Přístup do globální proměnné z ASM - VYŘEŠENO
Moderátor: Moderátoři
Přístup do globální proměnné z ASM - VYŘEŠENO
Zdravím,
mám napsaný program v C a na zápočet potřebuji mít část i v ASM, problém je, že potřebuji přistoupit na globální proměnnou. Programuji to v CodevisionAVR a ten asi nezná příkaz EXTERN. Píše mi to, že nezná proměnnou bCekej100, přitom podle různých zdrojů se dá přistupovat ke globálním normálně i bez příkazu extern. Nevíte někdo jak to vyřešit ? do přílohy dám txt s kódem.
Děkuji
mám napsaný program v C a na zápočet potřebuji mít část i v ASM, problém je, že potřebuji přistoupit na globální proměnnou. Programuji to v CodevisionAVR a ten asi nezná příkaz EXTERN. Píše mi to, že nezná proměnnou bCekej100, přitom podle různých zdrojů se dá přistupovat ke globálním normálně i bez příkazu extern. Nevíte někdo jak to vyřešit ? do přílohy dám txt s kódem.
Děkuji
- Přílohy
-
- asm.txt
- (1.91 KiB) Staženo 79 x
Naposledy upravil(a) Pejsvidek dne 22 kvě 2011, 16:37, celkem upraveno 1 x.
V asm má proměnná před sebou podtržítko.
Pokud je v konfiguraci zatrženo "Automatic Register Allocation",
proměnná musí být deklarována jako volatile.
Kód: Vybrat vše
unsigned char var1 = 5;
void main(void)
{
#asm
lds r0, _var1
#endasm
proměnná musí být deklarována jako volatile.
Zajímavé! Já do teď o téhle možnosti nevěděl. Myslel sem si, že existují dva způsoby a) inline assembler v GASu nebo b) libovolný assembler co umí generovat .obj a pak se poprat s make, aby to linker dal dohromady. Jak to vlastně funguje? To preprocesor pomocí maker převede na GAS, nebo to kompiluje jiným assemlerem, nebo nějakým kouzlem přepne as na intel syntaxi?