Hallo Gemeinde, ich möchte ein Beispielprogramm für ThreadX kompilieren/Linken. Target ist ein Cortex-M4. (gibts auch mit M0) GCC/GDB = 12.3.1/13.2 Dieses RTOS liegt hier: https://github.com/eclipse-threadx/threadx unter: ports\cortex_m4\gnu\example_build\ ist ein Beispielprogramm welches eine Selbstläufer sein sollte... build_threadx.bat - läuft fehlerfrei build_threadx_sample.bat - scheitert beim Linken (siehe Ausgabe) Die ganzen "undefined reference" beziehen sich auf die Datei "cortexm4_crt0.S" und konkret auf den RAM. (/* Copy initialised sections into RAM if required. */ ) Im Linker-Skript (sample_threadx.ld) sind keine entsprechenden Referenzen drin. Frage: Brauche ich überhaupt RAM an dieser Stelle? Kann das raus? Bin Einsteiger bei ThreadX/Azure RTOS. Ausgabe: output_as.txt Viele Grüße runout
:
Bearbeitet durch User
und wenn man es mit Cmake baut? Die ganzen Projekte sind für Cmake ausgelegt wie es aussieht. edit: in dem commit für Version 6.1.12 wurde massiv geändert, seitdem gibt es die angemeckerten Symbole nicht mehr im Linkerfile. Das ist das Problem bei so Megarepos, das Testen kostet mehr als die Entwicklung wenn so viele Plattformen unterstützt werden. Vielleicht mal ein Issue aufmachen. https://github.com/eclipse-threadx/threadx/commit/8c3c08f10826c4d5332a6d8e2fdf014b793a456a#diff-e40e468407adc3c2d2068b19f92afb2c40de1a2474da3d51fa6d5dd37956ed58
:
Bearbeitet durch User
Thomas T. schrieb: > Die ganzen "undefined reference" beziehen sich auf die Datei > "cortexm4_crt0.S" und konkret auf den RAM. (/* Copy initialised sections > into RAM if required. */ > ) Wahrscheinlich wird das der Startup Code sein, der u.a. als Teil der Segmentinitialisierung etwas ins RAM kopieren möchte. Hast du denn diese Datei und könntest sie mit ins Buildscript aufnehmen? Alternativ (Achtung Werbung!): https://www.segger.com/downloads/embos/embOS_CortexM_EmbeddedStudio_Trial
Also crt0.S und das Linkerfile passen nicht zusammen, für den CM3 scheint es richtig angepasst worden zu sein. Also einfach das dieses crt0.S benutzen: https://github.com/eclipse-threadx/threadx/blob/master/ports/cortex_m3/gnu/example_build/cortexm3_crt0.S
Hallo, danke für die Hinweise. Wenn ich aus der "crt0.S" die Referenzen auskommentiere baut alles. Werde alles mit Cmake aufsetzen, das konkrete Target ist der Raspi PI Pico (Dual-M0). Läuft im Moment nur mit einem Kern. Angeblich unterstützt das OS mehrere Kerne (SMP). siehe: https://www.st.com/en/partner-products-and-services/azure-rtos-threadx.html Ich bleibe erst mal bei ThreadX. Das ist sicherheitsgerichtet und unterstützt SIL 4. Ansonsten nutze ich HW aus dem Hause S***r natürlich gern (@ Til S.) :-) Viele Grüße runout
:
Bearbeitet durch User
Das dürfte nicht gut sein weil dann ja die Initialisierung der statischen Variablen und der C++ Konstruktoren fehlt.
Ja könnte sein. der eigentliche Code (aus cortexm0_crt0.S) sieht so aus /* Copy initialised sections into RAM if required. */
1 | ldr r0, =__data_load_start__ |
2 | ldr r1, =__data_start__ |
3 | ldr r2, =__data_end__ |
4 | bl crt0_memory_copy |
5 | ldr r0, =__text_load_start__ |
6 | ldr r1, =__text_start__ |
7 | ldr r2, =__text_end__ |
8 | bl crt0_memory_copy |
9 | ldr r0, =__fast_load_start__ |
10 | ldr r1, =__fast_start__ |
11 | ldr r2, =__fast_end__ |
12 | bl crt0_memory_copy |
13 | ldr r0, =__ctors_load_start__ |
14 | ldr r1, =__ctors_start__ |
15 | ldr r2, =__ctors_end__ |
16 | bl crt0_memory_copy |
17 | ldr r0, =__dtors_load_start__ |
18 | ldr r1, =__dtors_start__ |
19 | ldr r2, =__dtors_end__ |
20 | bl crt0_memory_copy |
21 | ldr r0, =__rodata_load_start__ |
22 | ldr r1, =__rodata_start__ |
23 | ldr r2, =__rodata_end__ |
24 | bl crt0_memory_copy |
beim STM32 (z.B STM43 F4, startup_stm32f429zitx.S) sieht das so aus: /* Copy the data segment initializers from flash to SRAM */
1 | ldr r0, =_sdata |
2 | ldr r1, =_edata |
3 | ldr r2, =_sidata |
4 | movs r3, #0 |
5 | b LoopCopyDataInit |
6 | |
7 | CopyDataInit: |
8 | ldr r4, [r2, r3] |
9 | str r4, [r0, r3] |
10 | adds r3, r3, #4 |
11 | |
12 | LoopCopyDataInit: |
13 | adds r4, r0, r3 |
14 | cmp r4, r1 |
15 | bcc CopyDataInit |
Ich bin jetzt auf Visual Studio/VisualGDB gewechselt. Das sind Cmake-Projekte. (erzeugt mit Wizard) Grüße Runout
Thomas T. schrieb: > Ansonsten nutze ich HW aus dem Hause S***r natürlich gern (@ Til S.) :-) Hilft die Sch*r* im K*pf, oder w*s s*ll d*e Z*ns*r?
J. S. schrieb: > Also crt0.S und das Linkerfile passen nicht zusammen, für den CM3 > scheint es richtig angepasst worden zu sein. > Also einfach das dieses crt0.S benutzen: > https://github.com/eclipse-threadx/threadx/blob/master/ports/cortex_m3/gnu/example_build/cortexm3_crt0.S kann funktionieren, muss aber nicht. cortexm3_crt0.S und cortexm0_crt0.S haben unterschiedlichen Code im Copy-Loop (crt0_memory_copy). Trotzdem schade, dass das ThreadX-Zeug nicht konsistent ist. Runout
Ein M4 ist aber ein M3 mit FPU die hier nicht behandelt wird, von daher passt der M3 Code für den M4.
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.