Datum: 24.02.2008 14:49
Hallo,
aus einem C-Programm möchte ich eine Assemblerroutine aufrufen.
Wie komme ich in der Assemblerroutine an die Grösse von arr1?
C:
extern void ARRMULT(void);
int arr1[]={10,20,30,40};
int arr2[]={45,35,25,15};
unsigned int arrsize=sizeof(arr1)/sizeof(int);
void main(void)
{
ARRMULT();
}
Assembler:
.GLB _ARRMULT
.GLB _arr1
.GLB _arr2
.GLB _arrsize
.SECTION program
_ARRMULT:
mov.w #0,r0 ; summe arr1[i]*arr2[i] fuer arrsize elemente
mov.w #0,r1 ; summe in r2..r0
mov.w #0,r2
mov.w _arrsize,r3
mov.w #_arr1,A0
mov.w #_arr2,A1
rmpa.w
rts
Der Umweg über die Variable arrsize funktioniert zwar, ist aber unschön.
Die Renesasdokumentation zu Compiler und Assembler ist da auch nicht
besonders hilfreich.
Ein
mov.w # SIZEOF _arr1 , r3
wird mit:
Error (asp30): Section name is missing '_arr1' angemeckert.
Die diversen Sections hab ich auch schon mal durchprobiert.
Als Workaround tut ein:
mov.w #(_arr2-_arr1)/2,r3
Jemand einen Rat? Der Linker müßte die Grösse ja eigentlich kennen.
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel