Splitta asm kod till flera filer i AVRStudio
Visst, det var därför jag frågade om den aktuella utv.miljön stöder separat-assemblering.
Fixa gärna ihop ett exempel. Och/men då måste man absolut byta ut rcall.
Generellt så bör nog inte r-hopen (rcall, rjmp) användas annat än inom
en och samma fil, annars är det allt för lätt att man inte har koll på
hur "långt" det är mellan rcall/rjmp och den aktuella labeln.
Fixa gärna ihop ett exempel. Och/men då måste man absolut byta ut rcall.
Generellt så bör nog inte r-hopen (rcall, rjmp) användas annat än inom
en och samma fil, annars är det allt för lätt att man inte har koll på
hur "långt" det är mellan rcall/rjmp och den aktuella labeln.
"Error: Relative bransch out of reach"
Jag hade något i bakhuvudet att det var problem med att lägga INCLUDE sist för ATmega88 och det var nog för att den inte stödjer CALL instruktionen som tillåter hopp i hela programminnet men däremot så gör ATmega16 detta så prova att byta ut RCALL till CALL.
"CALL - Long Call to a Subroutine
Description:
Calls to a subroutine within the entire program memory. The return address (to the instruction after the CALL) will be stored onto the stack. (See also RCALL). The stack pointer uses a post-decrement scheme during CALL.
This instruction is not available in all devices. Refer to the device specific instruction set summary."
@AAVE
Du får gärna beskriva lite närmare hur man gör detta.
Jag hade något i bakhuvudet att det var problem med att lägga INCLUDE sist för ATmega88 och det var nog för att den inte stödjer CALL instruktionen som tillåter hopp i hela programminnet men däremot så gör ATmega16 detta så prova att byta ut RCALL till CALL.
"CALL - Long Call to a Subroutine
Description:
Calls to a subroutine within the entire program memory. The return address (to the instruction after the CALL) will be stored onto the stack. (See also RCALL). The stack pointer uses a post-decrement scheme during CALL.
This instruction is not available in all devices. Refer to the device specific instruction set summary."
@AAVE
Du får gärna beskriva lite närmare hur man gör detta.
- Swech
- EF Sponsor
- Inlägg: 4750
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Mindre processormodeller från AVR stödjer inte call, de har
bara rcall - iallafall på papperet, i verkligheten finns call i hårdvaran
ändå men är inte verifierad vid tillverkningen och bör därför inte användas...
men det går
Rcall hos AVR täcker +- 2k så på de allra flesta modellerna kan det inte
"glida iväg" då minnet inte är större...
.include är inga problem normalt vid AVR. Man kan lägga dem
vart man vill, dock måste ju sakerna definieras i rätt ordning som redan
nämnts i tråden.
Det sodjan syftar på med separat assemblering har jag aldrig hittat hos AVR. Hade varit mycket bra...
En sak att se upp med.. vid stränghantering kan assemblern ibland
få fnatt.
Lägg inte include direkt efter en textsträngsdefinition. Har varit med om att
assemblern då blir tokig, Har även exempel då det funkat fint.. men kan
alltså vara något att se upp med.
Men utifrån fagges beskrivningar så låter det mer som ett init problem
och inte include problem. Särskilt vid 90% funktion.. det är skumt
Swech
bara rcall - iallafall på papperet, i verkligheten finns call i hårdvaran
ändå men är inte verifierad vid tillverkningen och bör därför inte användas...
men det går

Rcall hos AVR täcker +- 2k så på de allra flesta modellerna kan det inte
"glida iväg" då minnet inte är större...
.include är inga problem normalt vid AVR. Man kan lägga dem
vart man vill, dock måste ju sakerna definieras i rätt ordning som redan
nämnts i tråden.
Det sodjan syftar på med separat assemblering har jag aldrig hittat hos AVR. Hade varit mycket bra...
En sak att se upp med.. vid stränghantering kan assemblern ibland
få fnatt.
Kod: Markera allt
.db "min text",0
.include "mer_kod.asm"
assemblern då blir tokig, Har även exempel då det funkat fint.. men kan
alltså vara något att se upp med.
Men utifrån fagges beskrivningar så låter det mer som ett init problem
och inte include problem. Särskilt vid 90% funktion.. det är skumt
Swech