Přístup do globální proměnné z ASM - VYŘEŠENO

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
Pejsvidek
Příspěvky: 200
Registrován: 10 kvě 2006, 02:00
Bydliště: Plzeň
Kontaktovat uživatele:

Přístup do globální proměnné z ASM - VYŘEŠENO

#1 Příspěvek od Pejsvidek »

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
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.

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#2 Příspěvek od Andrea »

A kde máš tu proměnnou definovanou?

Uživatelský avatar
Pejsvidek
Příspěvky: 200
Registrován: 10 kvě 2006, 02:00
Bydliště: Plzeň
Kontaktovat uživatele:

#3 Příspěvek od Pejsvidek »

V kódu nad tim, mám to definovaný takhle:

unsigned char bCekej100;

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#4 Příspěvek od Andrea »

Tak to tam asi nemá být ten IMPORT, pokud je to vložený assembler a ne oddělený překlad.

Uživatelský avatar
Pejsvidek
Příspěvky: 200
Registrován: 10 kvě 2006, 02:00
Bydliště: Plzeň
Kontaktovat uživatele:

#5 Příspěvek od Pejsvidek »

Je to vložený asembler, ale bez EXTERN to zase píše:
Undefined symbol bCekej100

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#6 Příspěvek od Andrea »

Dyť píšeš, že to EXTERN nezná.

Uživatelský avatar
Pejsvidek
Příspěvky: 200
Registrován: 10 kvě 2006, 02:00
Bydliště: Plzeň
Kontaktovat uživatele:

#7 Příspěvek od Pejsvidek »

No však, EXTERN to nezná vůbec. Tam prej vůbec nemusí být, tak sem ho smazal. Ale bCekej100 to stejnak nepozná, nevim jestli při tý deklaraci to nemam ještě nějak jinak zapsat. Podle manuálu by to mělo takhle fungovat, ale nefunguje.

Uživatelský avatar
mtajovsky
Příspěvky: 3694
Registrován: 19 zář 2007, 02:00
Bydliště: Praha

#8 Příspěvek od mtajovsky »

Možná pomůže tohle.

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#9 Příspěvek od AB1 »

V asm má proměnná před sebou podtržítko.

Kód: Vybrat vše

unsigned char var1 = 5;
void main(void)
{
    #asm
    lds r0, _var1
    #endasm
Pokud je v konfiguraci zatrženo "Automatic Register Allocation",
proměnná musí být deklarována jako volatile.

Uživatelský avatar
Zmije
Příspěvky: 1513
Registrován: 30 čer 2005, 02:00
Bydliště: Pardubický kraj

#10 Příspěvek od Zmije »

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?

Uživatelský avatar
Burajko
Příspěvky: 1803
Registrován: 21 srp 2009, 02:00

#11 Příspěvek od Burajko »

To sa ti nechce citat manual od kompileru? :roll: :roll: :roll: :roll:
Toto budu inzinieri... :cry:
Už druhý krát strihám a furt je to krátke

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#12 Příspěvek od AB1 »

Zmije:
Tady se bavíme o překladači CodeVisionAVR.
Ten nemá s GAS nic společného.

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#13 Příspěvek od AB1 »

K Burajkovi bych pododkl jenom toto:
Ukaž mi, kde v manuálu Cvavr jsi našel odpověď na tuto otázku.

Uživatelský avatar
Burajko
Příspěvky: 1803
Registrován: 21 srp 2009, 02:00

#14 Příspěvek od Burajko »

No ja som ho necital,ale urcite existuje manual.Aspon hitech,zilog,texas ma taku dobru zvyklost.
Už druhý krát strihám a furt je to krátke

Uživatelský avatar
Pejsvidek
Příspěvky: 200
Registrován: 10 kvě 2006, 02:00
Bydliště: Plzeň
Kontaktovat uživatele:

#15 Příspěvek od Pejsvidek »

Díky moc AB1, chybělo mi tam jenom to podtržítko

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“