IAR MSP430 "naked" C-Funktion

OP #5446147
Hallo,

ich haben einen eigenen kleinen Bootloader geschrieben um den MSP in 
eine andere Firmware zu zwingen. Dieser Einsprungpunkt liegt an einer 
fixen Adresse, der C Code schaut folgendermaßen aus:
1
__root __noreturn void call__force_golden_firmware(void) @ "FORCE_GOLDEN"
2
{
3
     /* Note: This segment has a size of 16 bytes. */
4

5
     __asm("MOV.W #SFE(CSTACK),SP          ; initialize stack pointer   \n"
6
           "CALLA #__force_golden_firmware ; initialize hardware        \n"
7
           "CALLA #main                    ; call main function         \n"
8
     );
9
}
10

11
void __force_golden_firmware(void)
12
{
13
     initHardware();
14

15
     /* mimic cstart_init_zero */
16
     #pragma segment = "DATA16_Z"  // Data initialized to zero
17
     memset(__segment_begin("DATA16_Z"),
18
            0,
19
            __segment_size("DATA16_Z"));
20

21
     /* mimic cstart_init_copy */
22
     #pragma segment = "DATA16_I"  // Data initialized by copying from DATA<nn>_ID
23
     #pragma segment = "DATA16_ID" // Initializers for DATA<nn>_I
24
     memcpy(__segment_begin("DATA16_I"),
25
            __segment_begin("DATA16_ID"),
26
            __segment_size("DATA16_I"));
27

28
     /* TODO: also initialize DATA20 segments if needed */
29
}

Das Disassembly der Section "FORCE_GOLDEN" sieht so aus:
1
00AE00: mov.w #0x5B80,SP
2
00AE04: calla #__force_golden_firmware
3
00AE08: calla #main
4
00AE0C: reta
5
00AE0E: -1
6
00AE0F: -1

Ich möchte verhindern, dass der Compiler eine "reta" Instruktion 
erzeugt.
Im GCC gibt es dazu das Attribut "naked". Wie kann ich das mit dem IAR 
Compiler machen?
"__noreturn" oder "__task" machen das leider nicht.

Jan :)
OP
Rufus Τ. F. schrieb:
> Jan M. schrieb:
>> Ich möchte verhindern, dass der Compiler eine "reta" Instruktion
>> erzeugt.
>
> Stören Dich die zwei Bytes Code? Da in einem auch nur halbwegs
> sinnvollen µC-Programm die Funktion main() nie beendet wird, wird
> folglich auch dieses reta niemals aufgerufen.

Das ist mehr oder weniger nur kosmetischer Natur, ich weiß. Es wäre 
trotzdem schön zu wissen wie ich das reta verhindern kann.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 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.