RISC-V reset handler Probleme

OP #7416783
Lesenswert?

Hallo,

ich experimentiere gerade mit einem CH32V307 Controller und habe dabei Probleme mit dem Reset Handler, wenn ich den Flashbereich ändere.

Ich habe den Flash (im LD Script) um 0x2000 verschoben. Im Map File sieht auch alles gut aus. Der Reset Handler bleibt aber beim kopieren der Daten von Flash in RAM hängen oder so (Es funktioniert nichts mehr)

Der Reset Handler ist hier: https://github.com/openwch/ch32v307/blob/main/EVT/EXAM/SRC/Startup/startup_ch32v30x_D8C.S#L348-L358

Wenn ich Zeile 355 (sw t0, (a1)) auskommentiere, läuft die Applikation prinzipiell wieder (wenn auch nicht ganz korrekt.

1
0x0000000020000000                PROVIDE (_data_vma = .)
2
0x0000000000005d94                PROVIDE (_data_lma = .)
3
0x0000000020000088                PROVIDE (_edata = .)

Warum scheitert das kopieren der Daten hier? Komme bei dem Problem einfach nicht weiter.

P.S. Was ich auch noch nicht ganz verstehe ist das im Linker File:

1
>FLASH AT>FLASH
2
>RAM AT>FLASH

Was macht das AT>FLASH (vor allem bei RAM)?

#7417136
Lesenswert?

Was macht das AT>FLASH (vor allem bei RAM)?

Es sagt, dass er die Initialwerte der Daten in den Flash legen soll. Adressen (des Datensegments - Variablen, Strings, etc und deren Initialwerte) werden für's RAM generiert, abgespeichert wird aber im Flash. Sie werden dann vom Startcode (crt0) aus dem Flash ins RAM kopiert bevor main aufgerufen wird.

Siehe: https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_chapter/ld_3.html#IDX307

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren