C 8051 otázku - Předávání parametrů z kódu C do ASM

M

mcoster

Guest
Ahoj, já jsem vyvíjí program, a rozhodl jsem se postavit uživatelského rozhraní v jazyce C, protože je to jednodušší, a hlavní kódu v ASM, protože to je čas-kritický. Nyní jsem před problémem! Nevím, jak předat argument formulář kód C část k části kódu ASM. Například, chci, aby hodnoty v některém z registrů nebo jakékoliv části paměti pomocí C a pak se tato hodnota pomocí ASM. Dělat ASM část je snadné je jen pár příkazů, MOV, ale jak uložit hodnotu v RAM, nebo zaregistrovat pomocí C je součástí nemohu na to přijít! Může mi někdo pomoct? Příklad kódu main () {kód, který bude ukládat hodnotu 0xC0 v R0} # pragma ASM MOV P0, R0 # pragma ENDASM Díky!
 
To je zvláštní kompilátor. Některé kompilátory předat parametry na zásobníku, někteří to v registrech. Máte-li zkontrolovat dokumentaci překladače, který používáte. Existuje alternativní způsob, jak kontrolovat to také. Můžete napsat funciton v C jako externí neplatné ASMfunction (unsigned char), pak se nazývají z C ASMfunction (parametr), pak můžete zkontrolovat asm kód generovaný kompilátorem C vidět, jak je parametr předán
 
Podívejte se na příklad http://www.keil.com/support/man/docs/c51/c51_ap_at.htm char text xdata [256] _at_ 0xe000 , / * pole na xdata 0xe000 * / uvnitř hlavní funkce: text [0] = ''; , později v asm kód část můžete udělat toto: MOV DPTR, # E000h MOVX, @ DPTR , Acc teď dostat '' napsal v C jsem se snažil dodržet stejné rozložení postupem uvedeným, které jste jako příklad. Stejně jako jste napsal: "jak předat argument z části kódu C část kódu ASM" a "Jak uchovávat hodnotu uvnitř RAM nebo zaregistrovat pomocí C" Pro hodně do hloubky vysvětlení číst Cx51 uživatelská příručka: [url ] http://www.keil.com/support/man/docs/c51/c51_ap_ctoasm.htm [/url]
 
Nemáte přístup do rejstříků přímo v C. Je ale možné to udělat pomocí ukazatele. Přímý přístup k paměti RAM se také pomocí ukazatele. Ale přístup k registrům ukazateli je nebezpečné. Ke * il má docela dobrou dokumentaci absolvování paramters. Myslím, že to jde takhle. Pro jeden byte, to je děláno přes R7 a tak dále.
 

Welcome to EDABoard.com

Sponsor

Back
Top