R8C/NC30 externes SIZEOF?

Gast #792291
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.