Forum: Mikrocontroller und Digitale Elektronik RISC-V reset handler Probleme


von Felix F. (wiesel8)


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)?

: Bearbeitet durch User
von Rbx (rcx)


Lesenswert?

Es gibt ein Ida-Plugin für RISC-V, könnte dir das weiterhelfen?
https://github.com/bingseclab/ida_riscv

von Foobar (asdfasd)


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

: Bearbeitet durch User
von Felix F. (wiesel8)


Lesenswert?

OK, habe das Problem gelöst.
Die letzten paar Bytes des Programms wurden nicht ins Flash geladen, 
wodurch hier tatsächlich "Müll" stand. Mit vollständig geflashten 
Programm funktionierts auch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.