Hallo Zusammen, wir programmieren aus diversen Gründen noch ziemlich "Old School" in Assembler und mussten jetzt von AVR und PIC auf ARM (Renesas RA2E2) umsteigen. Als Entwicklungsumgebenung verwenden wir dafür Keil µVison. Leider haben wir ein Problem und wissen nicht wie die Option Function Select Register gesetzt werden können (OFS0 und) OFS1). Diese können scheinbar nicht im Hauptprogramm nach dem Reset beschrieben werden, sondern müssen vorher gesetzt werden. Weiß vielleicht jemand, ob und wie ich diese vorher definieren in Assembler definieren kann oder geht es vielleicht über das J-Link Programmiergerät, dass dieses die beiden Register direkt beim Flashen setzt. Vielen Dank im Voraus. Beste Grüße, Ernie
Diese beiden Register werden doch vom Flasher gesetzt. Die sind für das Programm readonly.
Hallo, vielen Dank für die Rückmeldung. Dies habe ich auch schon gedacht, aber leider finde ich da keine Einstellung oder Beschreibung. Wir verwenden das erste Mal ARM und Keil und kennen uns da noch nicht so gut aus. Auf dem Evaluation Board ist ein Segger J-Link onboard. Die RA2E2 Dokumentation gibt da auch wenig her und die meisten werden das wohl mit dem Smart Configurator für C einstellen. Gruß, Ernie
ich denke dass du sowas mit AREA machen kannst. Dann im Linkerskript den beiden AREA Sections die passenden Adressen zuordnen Beispiel (ungetestet weil ich kein ARM Asm kann):
1 | AREA config0 READONLY |
2 | DCD 0x<your OFS0 value> |
3 | END
|
4 | |
5 | AREA config1 READONLY |
6 | DCD 0x<your OFS1 value> |
7 | END
|
Die Idee dahinter ist dass deinem Flash executable eben die bei beiden Config Words vom Linker beigefügt werden.
Vielen Dank, leider bekomme ich es nicht hin, da ich nicht weiß wo und wie ich diese Bereich im Linkerskript definiere. Ist das Linkerskript bei Keil µVision das "Scatter File" oder kann man es irgendwie über den "Linker Control String" definieren?
Schau mal in die Hilfe Files.
Arm Compiler User Guide ->
Linker User Guide ->
Methods of specifying an image memory map with the linker
Da must du dich halt mal durchwurschteln. Speziell gibt es da noch einen
Abschnitt Section Placement. Mir ist klar dass das alles andere als
übersichtlich ist. Und immer schön in die Map Files schauen
Hallo, ich habe eine Lösung für das IAR Embedded Workbench gefunden. In der Linker Datei *.icf muss die Region definiert werden:
1 | define region OSF1_REGION = mem:[from 0x00000404 to 0x00000407]; |
2 | place in OSF1_REGION { section OSF1_SECTION }; |
Dann muss im Code noch eine C-Datei mit der Definition des Wertes erfolgen:
1 | #include <stdint.h> |
2 | |
3 | #pragma location="OSF1_SECTION"
|
4 | |
5 | __root const uint32_t OFS1_VALUE = 0xFFFFAFFF; |
Vielen Dank nochmal für die Unterstützung! Gruß, Ernie
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.