Forum: Projekte & Code STM32 FreeRTOS Projekt (Makefile - GCC)


von Oliver J. (skriptkiddy)


Angehängte Dateien:

Lesenswert?

Im Anhang befindet sich ein funktionierendes Beispielprojekt für 
FreeRTOS auf dem STM32F103. Als Platform habe ich das ET-STM32F103 Board 
verwendet. Das Programm lässt LEDs blinken und schreibt Daten über den 
USART1 heraus. Nichts spektakuläres, aber immerhin eine 
Ausgangsposition. ;)

Anleitung:
----------
+ Die Variable "CROSS_COMPILE" im Makefile an eure Toolchain anpassen
  (z.B. die arm-none-eabi Toolchain von Codesourcery)

+ make eingeben

+ im Ordner "output" liegt bei Erfolg dann das Kompilat


Gruß Oliver

von Entwickler (Gast)


Lesenswert?

Hallo Oliver,

vielen Dank für das Beispiel. Das Beispiel könnte man ja auch für den 
STM32F207 anpassen.

Das generierte ELF File könnte man dies auch für den IAR Debugger 
verwenden ?

von Oliver J. (skriptkiddy)


Lesenswert?

Entwickler schrieb:
> Das generierte ELF File könnte man dies auch für den IAR Debugger
> verwenden ?

Kann ich nicht sagen, weil ich IAREW nicht verwende.

Gruß Oliver

von Entwickler (Gast)


Lesenswert?

Hallo Oliver,

mit welchen Freewaretool tust du dann debuggen ?

von Oliver J. (skriptkiddy)


Lesenswert?

Entwickler schrieb:
> mit welchen Freewaretool tust du dann debuggen ?

openocd + gdb + eclipse

Gruß Oliver

von Pappnase (Gast)


Lesenswert?

um Himmels Gottes Willen...
1
#define RCC_APB2ENR  (*((volatile unsigned long*)(0x40021000 + 0x018)))
gibt's da nix schöneres in den STM's Libs?

SCNR

trotz alledem ein schönes Projekt, werde ich demnächst mal damit 
rumspielen müssen.

mfg

von Entwickler (Gast)


Lesenswert?

Ja und welche Hardware zum debuggen verwendest du dafür ?
Kann ich den IAR Debugger benutzen ?

von LTC1043 (Gast)


Lesenswert?

Entwickler schrieb:
> Ja und welche Hardware zum debuggen verwendest du dafür ?
> Kann ich den IAR Debugger benutzen ?

Schau mal in das file stm32_freertos_blank/openocd/openocd.cfg

von Oliver J. (skriptkiddy)


Lesenswert?

Entwickler schrieb:
> Kann ich den IAR Debugger benutzen ?
Was für einen Debugger hast du denn? Einen J-Link?

Dann sollte das mit folgender Openocd config funktionieren:
1
#daemon configuration
2
telnet_port 4444
3
gdb_port 4242
4
5
#interface
6
interface jlink
7
8
source [find target/stm32.cfg]

Segger bietet auch einen gdbserver für jlink an. Mit dem kann man sogar 
über den gdb das Target flashen.


Gruß Oliver

von Oliver J. (skriptkiddy)


Lesenswert?

Pappnase schrieb:
> gibt's da nix schöneres in den STM's Libs?

Ja die Standard Periphal Library bietet da sehr schöne Möglichkeiten. 
Hab ich doch auch genutzt, wenn mich nicht alles täuscht. Das define ist 
wenn man es genau betrachtet toter Code. Die Deklaration von ClkInit und 
das define von SLEEP auch.

Gruß Oliver

von Christoph a. (chrichri)


Lesenswert?

Servus ...

ich bekomme einen Linker fehler : cannot find -lgcc_s
Verwende Ubuntu mit CodeSourceryLite
Ich habe versucht manuell mit -L/... die Library einzubinden (bin mal 
alle pfade durchgegangen in denen ich libgcc_*.*) finden konnte aber 
ohne Erfolg.

Bin leider noch etwas wackelig auf den Füßen was dies Untiefen betrifft 
...

Gruß
Christoph


/usr/local/share/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none- 
linux-gnueabi/4.5.2/../../../../arm-none-linux-gnueabi/bin/ld:  cannot 
find -lgcc_s
/usr/local/share/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none- 
linux-gnueabi/4.5.2/../../../../arm-none-linux-gnueabi/bin/ld:  cannot 
find -lgcc_s

von Oliver J. (skriptkiddy)


Lesenswert?

Christoph abc schrieb:
> ich bekomme einen Linker fehler : cannot find -lgcc_s

Versuch mal folgende LD_FLAGS:
1
LDFLAGS  = --gc-sections,-T$(LDSCRIPT),-no-startup


Gruß Oliver

von Christoph a. (chrichri)


Lesenswert?

nö nützt nichts. Auch nicht so wild ...

compilieren kann ich und mit stlink und gdb flashen und "debuggen" (ich 
komm mit gdb aber nicht zurecht).

Allerdings mach ich das auch unter MacOS mit der summon arm toolchain 
und auch nur fertige Beispiel Makefile-Projekte (z.B. die 
Stlink-Examples). Und eigentich auch für den F4. Selber das mal in eine 
IDE wie Eclipse zu bringen sodass es alles läuft, und am Ende dann noch 
ein eigenes Projekt erstellen, davon träume ich noch. Diese ganze STM32 
Geschichte entwickelt sich langsam zu einem Frustpaket (weil ich nicht 
unter Win programmieren will, bzw. keinen Windows Rechner habe).

von Oliver J. (helmo2004)


Lesenswert?

Christoph abc schrieb:
> nö nützt nichts. Auch nicht so wild ...

Ich Arbeite mit der arm-none-eabi-Toolchain 2011.03 von Codesourcery 
unter Ubuntu ohne Probleme. Zeig mal dein Makefile.

Gruß Oliver

von Oliver J. (skriptkiddy)


Lesenswert?

Huch falscher Account.

von Christoph a. (chrichri)


Lesenswert?

Hi
ich verwende dein Makefile unveändert aus dem Zip-Archiv.


Ich habe jetzt nochmal ganz von Vorne angefangen und Ubuntu neu 
installiert. Ich kann jetzt mit Eclipse + CodeSourcery + St-link 
arbeiten. :-) Soweit war ich noch auch noch nie...



jetzt habe ich einen anderen Fehler mit deinem Projekt:

/home/christoph/CodeSourcery/arm-2011.09/bin/../lib/gcc/arm-none-eabi/4. 
6.1/../../../../arm-none-eabi/lib/thumb2/libc.a(lib_a-sbrkr.o):  In 
function `_sbrk_r':
sbrkr.c:(.text+0x12): undefined reference to `_sbrk'
collect2: ld returned 1 exit status
make: *** [output/main.elf] Error 1

von Oliver J. (skriptkiddy)


Lesenswert?

Christoph abc schrieb:
> sbrkr.c:(.text+0x12): undefined reference to `_sbrk'

Ohne sprintf sollte es bauen. Sorry. Ich werde noch einmal ein neues 
Paket schnüren, welches auch auf Anhieb funktioniert.

Gruß Oliver

von Oliver J. (skriptkiddy)


Angehängte Dateien:

Lesenswert?

Wie versprochen hier die überarbeitete Variante.

Gruß Oliver

von Christoph a. (chrichri)


Lesenswert?

Super :-)

wenn man mal davon absieht:

/tmp/ccxttmIa.s: Assembler messages:
/tmp/ccxttmIa.s:512: Error: registers may not be the same -- `strexb 
r0,r0,[r1]'
/tmp/ccxttmIa.s:537: Error: registers may not be the same -- `strexh 
r0,r0,[r1]'
make: *** [src/fw_lib/core_cm3.o] Error 1


Google hatte auch schnell eine Lösung
https://github.com/texane/stlink/issues/65

Damit geht es dann auch.

Nur wieso funktioniert es denn bei dir?


Auf das Board habe ich es noch nicht überspielt. Mal schauen wann ich 
dazu komme.

Gruß
Christoph

von Oliver J. (skriptkiddy)


Lesenswert?

Christoph abc schrieb:
> Nur wieso funktioniert es denn bei dir?
Weiß ich nicht.

Gruß Oliver

von Entwickler (Gast)


Lesenswert?

Hallo,

ich habe das Beispiel auf den STM32F207 angepasst. Das Compilieren und 
Linken funktioniert. Jetzt möchte ich mit dem IAR JLink Debugger über 
den GDB Server debuggen und auch flashen können. Welche Einstellungen 
müsste ich in Eclipse sowie im OpenOCD File vornehmen ?

von Andreas R. (rebirama)


Lesenswert?

Hi,

Ich versuche gerade dein Beispiel auf einem stm32F103VET6 zum laufen zu 
bringen, bisher ohne Erfolg.

Was es Tut:
Es compiliert,
die *_init() sache werden noch ausgeführt (per LED getestet), aber kommt 
aus dem "xTaskCreate" nicht mehr zurück und führt auch keine Code in den 
Tasks aus.

Was ich bisher gemacht habe:
1)
#define STM32F10X_HD in einkommentiert, da es ja ein HD-Device ist.

2)
den inhalt der startup.s gegen den aus einer startup_stm32f10x_hd.s 
getauscht.
die FeeRTOS-spezifischen Änderungen (Umbenennungen der ISR-Vektoren des 
Systick-Timers etc.) habe ich aus deiner Version mitgenommen.
Die weak aliases waren auch in deiner Version unverändert.

Hab ich irgendwas übersehen?

von Entwickler (Gast)


Lesenswert?

Guten Morgen,

bin leider noch nicht weitergekommen. Welche Einstellungen müsste ich 
vornehmen, damit ich mit dem JLink Debugger von IAR auf dem STM32F207 
debuggen kann ?

von Oliver J. (skriptkiddy)


Lesenswert?

Andreas R. schrieb:
> Hab ich irgendwas übersehen?

Das verwendete Linkerskript ist für 128kB Flash und 20kB RAM. Eventuell 
muss man da noch was nachjustieren.

Gruß Oliver

von Andreas R. (rebirama)


Lesenswert?

@ Oliver, danke für den Tip, aber das habe ich auch schon gemacht, nur 
vergessen zu erwähnen.

3)
Linkerscript wurde angepasst:
1
MEMORY
2
{
3
  RAM      (RWX) : ORIGIN = 0x20000000     , LENGTH = 64K
4
  FLASH    (RX)  : ORIGIN = 0x08000000     , LENGTH = 512K
5
  FLASHB1 (rx)  : ORIGIN = 0x00000000, LENGTH = 0
6
  EXTMEMB0 (rx) : ORIGIN = 0x00000000, LENGTH = 0
7
  EXTMEMB1 (rx) : ORIGIN = 0x00000000, LENGTH = 0
8
  EXTMEMB2 (rx) : ORIGIN = 0x00000000, LENGTH = 0
9
  EXTMEMB3 (rx) : ORIGIN = 0x00000000, LENGTH = 0
10
}
11
12
/* higher address of the user mode stack */
13
_estack = ORIGIN(RAM)+LENGTH(RAM);

von Oliver J. (skriptkiddy)


Lesenswert?

Entwickler schrieb:
> bin leider noch nicht weitergekommen. Welche Einstellungen müsste ich
> vornehmen, damit ich mit dem JLink Debugger von IAR auf dem STM32F207
> debuggen kann ?

Das nutze ich als GDB-Init-Sequence für die JLinkExe von Segger als 
GDB-server:
1
monitor interface swd
2
monitor speed 4000
3
monitor endian little
4
monitor flash device = STM32F103RB
5
monitor flash breakpoints = 1
6
monitor flash download 1
7
load ./output/main.elf
8
monitor reset

Gruß Oliver

von Entwickler (Gast)


Lesenswert?

Guten Morgen Oliver J.,

vielen Dank. Wie wird der GDB server in Eclipse konfiguriert ?
Wo wird die GDB-Init-Sequence in Eclipse eingefügt ?

Vielen Dank im Voraus!

von Entwickler (Gast)


Angehängte Dateien:

Lesenswert?

Im Dateianhang habe ich mal einen Auszug von der Eclipse Debug 
Konfiguration angehängt. Vielleicht kann mir da jemand genauer sagen was 
ich wo einstellen muss.

von Entwickler (Gast)


Lesenswert?

Wenn ich in Eclipse die Debug Konfiguation einstelle und den Button 
Debug drücke erscheint folgende Meldung:

Cannot run program "make" (in directory "C:\STM32\STM32F207_BLINK_LED"): 
CreateProcess error=2, Das System kann die angegebene Datei nicht finden
Error: Program "make" is not found in PATH

von Oliver J. (skriptkiddy)


Lesenswert?

Entwickler schrieb:
> Wie wird der GDB server in Eclipse konfiguriert ?
Bei mir gar nicht. Den starte ich immer über die Kommandozeile und 
einstellen braucht man beim Segger JlinkGDBServer (nicht JlinkExe) auch 
nichts. Bei mir wird alles über die Init Commands vom arm-none-linux-gdb 
aus eclipse heraus erledigt. Wie das geht hab ich dir bereits gezeigt.


Entwickler schrieb:
> Cannot run program "make" (in directory "C:\STM32\STM32F207_BLINK_LED"):
> CreateProcess error=2, Das System kann die angegebene Datei nicht finden
> Error: Program "make" is not found in PATH
Steht doch da wo das Problem liegt. Make kann nicht gefunden werden, 
weil der Installationsordner nicht in der PATH-Umgebungsvariable 
eingetragen ist.


Entwickler schrieb:
> Vielleicht kann mir da jemand genauer sagen was
> ich wo einstellen muss.

Im Bild1: dort muss bei application das elf-file eingetragen werden.

Im Bild2: Versuchen auf TCP 2331 einzustellen

Im Bild3: nur einen Haken bei Load Symbols und die Init-Sequenz in das 
obere
          Textfeld.

Dann brauchst du eigentlich nur noch vorm Debuggen den JlinkGDBServer in 
einer Konsole starten und es sollte funktionieren.

Gruß Oliver

von Entwickler (Gast)


Lesenswert?

Hallo Oliver J.,

ich habe jetzt versucht deine Angaben umzusetzen. Welche EXE Datei 
müsste ich starten ? Ich habe im IAR Programmverzeichnis folgende EXE 
Dateien die den IAR JLINK Debugger betreffen.

JLinkTCPIPServer.exe
JLinkSTM32.exe
JLinkConfig.exe
jlink.exe

Das mit dem make und der PATH Umgebungsvariable bereitet mir noch 
Probleme.
Wo muss ich dies einstellen ? in Eclipse ?

von Entwickler (Gast)


Lesenswert?

Welches make wird da verlangt ? Steht das make für das makefile ?
Das verstehe ich leider nicht.

von Entwickler (Gast)


Lesenswert?

In Bild2 unter Debugger GDB Command habe ich nun folgende EXE Datei 
eingetragen arm-none-eabi-gdb.exe

Das mit dem make macht mir noch Probleme.

von Entwickler (Gast)


Lesenswert?

Den Segger JlinkGDBServer finde ich auf dem Rechner nicht. Muss diese 
Software noch zusätzlich heruntergeladen werden ?

von Entwickler (Gast)


Lesenswert?

Ich habe für das Debuggen kein make erzeugt. Deshalb verstehe ich auch 
nicht, warum ein make verlangt wird.

von Oliver J. (skriptkiddy)


Lesenswert?

Entwickler schrieb:
> Ich habe für das Debuggen kein make erzeugt. Deshalb verstehe ich auch
> nicht, warum ein make verlangt wird.
Eclipse führt bei mir standardmäßig ein make all aus vor dem Debug.
Nimm das Make hier:
http://gnuwin32.sourceforge.net/packages/make.htm

Entwickler schrieb:
> Den Segger JlinkGDBServer finde ich auf dem Rechner nicht. Muss diese
> Software noch zusätzlich heruntergeladen werden ?
http://www.segger.com/jlink-gdb-server.html

Entwickler schrieb:
> Das mit dem make und der PATH Umgebungsvariable bereitet mir noch
> Probleme.
> Wo muss ich dies einstellen ? in Eclipse ?

Das stellt man in Windows ein.


Gruß Oliver

von Entwickler (Gast)


Lesenswert?

Ich verwende den MinGW GCC.

Wie kann ich dies unterbinden, dass vor dem Debug make all ausgeführt 
wird ? Da ich MinGW GCC einsetze, wie kann ich dies in Eclipse 
einstellen, dass statt make all MinGW GCC gestartet wird ?

von Entwickler (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe den Haken "Disable auto build" bei der Debug-Konfiguration 
aktiviert. Somit kommt die Fehlermeldung nicht mehr. Nun bekomme ich 
eine weiter Fehlermeldung. So wie es aussieht kann ich mit dem JLink 
nicht auf mein Device zugreifen.

von Oliver J. (skriptkiddy)


Lesenswert?

Entwickler schrieb:
> Wie kann ich dies unterbinden, dass vor dem Debug make all ausgeführt
> wird ? Da ich MinGW GCC einsetze, wie kann ich dies in Eclipse
> einstellen, dass statt make all MinGW GCC gestartet wird ?
Was willst du denn mit dem MinGW wenn du für ARM kompilierst?
Weißt du auch nur ansatzweise, was du da tust?

Entwickler schrieb:
> So wie es aussieht kann ich mit dem JLink
> nicht auf mein Device zugreifen.
Der JLinkGDBServer scheint nicht zu laufen.


PS. Kauf dir lieber ne Fertiglösung, da braucht man so gut wie kein 
Hintergrundwissen. Installieren und fertig. Rowley Crossworks könnte 
eine Anlaufstelle sein.

Gruß Oliver

von Entwickler (Gast)


Lesenswert?

Hallo Oliver J., ich muss mich leider korrigieren.
Ich verwende kein MinGW GCC sondern CoudeSourcery für ARM. Es geht mir 
eigentlich nur um den JLink Debugger. Irgendwo habe ich was falsches 
bzw. vergessen einzustellen. Wo könnte bei mir noch das Problem liegen ?

von Oliver J. (skriptkiddy)


Lesenswert?

Entwickler schrieb:
> Irgendwo habe ich was falsches
> bzw. vergessen einzustellen.
Du musst auf jeden Fall die JLinkGDBserver.exe starten, denn diese 
stellt erst den TCP-Socket "localhost:2331" für den arm-gdb bereit.

Gruß Oliver

von Entwickler (Gast)


Lesenswert?

Hallo Oliver J.,

ok vielen Dank. Das werde ich am Montag mal testen.

Dies bedeutet, dass zuerst der JLinkGDBServer.exe gestertet werden muss 
und im Anschluss in Eclipse dann die arm-none-eabi-gdb.exe.

Bye

von Entwickler (Gast)


Angehängte Dateien:

Lesenswert?

Guten Morgen,

ich habe von SEGGER das Softwarepaket für den JLink GDB Server 
heruntergeladen und istalliert. Wenn ich die Datei JLinkGDBServer.exe 
ausführe, wird der JLInk Debugger von IAR auch erkannt. Nun starte ich 
in Eclipse im GDB Hardware Debugging die Datei arm-none-eabi-gdb.exe.
In der Konsole von Eclipse erscheint eine Warnung: warning: RMT ERROR : 
failed to get remote thread list. Ich kann den Code nicht starten. Der 
Debugger in Eclipse zeigt mir Thread [1] <main> (Supsend : User Request) 
0x0 an. Ich kann gar nicht debuggen.

C/C++ Application:
C:\STM32\STM32F207_BLINK_LED\output\main.elf

GDB Setup
GDB Command:
C:\CodesourceryARM\arm-2011.09\bin\arm-none-eabi-gdb.exe

Remote Target
JTAG Device: Generic TCP/IP
Hoast name or IP address: localhost
Port number: 2331

Initialization Commands:
monitor interface swd
monitor speed 5000
monitor endian little
monitor flash device = STM32F207IG
monitor flash breakpoints = 1
monitor reset

Load symbols
Use project binary:
STM32\STM32F207_BLINK_LED\output\main.elf

von Entwickler (Gast)


Lesenswert?

Ich habe auch mal diese Kommandos benutzt:
monitor interface swd
monitor speed 1000
monitor endian little
monitor flash device = STM32F207IG
monitor flash breakpoints = 1
monitor flash download 1
load ./output/main.elf
monitor reset
monitor reg r13 = (0x00000000)
monitor reg pc = (0x00000004)
#after load:
monitor reset
continue

von Entwickler (Gast)


Lesenswert?

Wenn ich folgende Kommandos verwende:

>>set mem inaccessible-by-default off
>>monitor interface swd
>>monitor speed auto
>>monitor endian little
>>monitor flash device = STM32F207IG
>>monitor flash breakpoints = 1
>>monitor flash download 1
>>load ./output/main.elf
>>break main
>>monitor reg r13 = (0x00000000)
>>monitor reg pc = (0x00000004)
>>monitor reset
>>continue

erhalte ich folgende Meldung von Eclipse:

Error in final launch sequence
Failed to execute MI command:
-target-select remote localhost:2331

Error message from debugger back end:
localhost:2331: Ein Verbindungsversuch ist fehlgeschlagen, da die 
Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, 
oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host 
nicht reagiert hat.

von Oliver J. (skriptkiddy)


Lesenswert?

Entwickler schrieb:
> Warnung: warning: RMT ERROR :
> failed to get remote thread list.
Das kommt bei mir auch und das Debuggen funktioniert trotzdem.

Versuch es doch erst einmal über die Konsole. Wenn das dann 
funktioniert, dann kann man sich daran machen diese Geschichte in 
Eclipse zum Laufen zu bringen.

Den GDB-startest du so:
1
arm-none-eabi-gdb STM32\STM32F207_BLINK_LED\output\main.elf


Dann führe mal folgende Befehle im GDB-Commandline-Interface Zeile für 
Zeile aus:
1
target remote :2331
2
monitor interface swd
3
monitor speed 1000
4
monitor endian little
5
monitor flash device = STM32F207IG
6
monitor flash breakpoints = 1
7
monitor flash download 1
8
load ./output/main.elf
9
break main
10
monitor reset
11
continue

Mit Strg+c kannst du das Programm anhalten. Mit continue gehts weiter.


Entwickler schrieb:
> Error message from debugger back end:
> localhost:2331: Ein Verbindungsversuch ist fehlgeschlagen, da die
> Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat,
> oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host
> nicht reagiert hat.
Manchmal kann es helfen den Jlink auf der USB-Seite neu zu verbinden.

Gruß Oliver

von Entwickler (Gast)


Lesenswert?

Hi Oliver J.,

danke. Ich kann nun debuggen. Das ist schonmal super!

Ich meiner Applikation starte ich zunächst einen Task.
Der Task wird allerdings nur einmal angesprungen. Das verstehe ich nicht 
ganz.
1
/* Include STM32 Firmware Lib Headers */
2
#include "stm32f2xx.h"
3
#include "stm32_eval.h"
4
5
/* Scheduler include files. */
6
#include "FreeRTOS.h"
7
#include "task.h"
8
#include "croutine.h"
9
10
// Function Declarations
11
int main(void);
12
void vLeds(void* dummy);
13
14
unsigned int retTaskCreate=0;
15
16
/* Main function */
17
int main(void)
18
{
19
  STM_EVAL_LEDInit(LED1);
20
  STM_EVAL_LEDInit(LED2);
21
  STM_EVAL_LEDInit(LED3);
22
23
  STM_EVAL_LEDOn(LED1);
24
  STM_EVAL_LEDOn(LED2);
25
26
  retTaskCreate = xTaskCreate(vLeds,(signed char*)"Led",100,0,10,0);
27
28
  vTaskStartScheduler();
29
30
  /* Here the devil lives */
31
  while(1)
32
  {
33
    STM_EVAL_LEDOn(LED3);
34
  }
35
    return 0;
36
}
37
38
/* Controls 4 LEDs (chaser light) */
39
void vLeds(void* dummy)
40
{
41
  STM_EVAL_LEDOff(LED1);
42
  STM_EVAL_LEDOff(LED2);
43
  vTaskDelay(500);
44
  STM_EVAL_LEDOn(LED1);
45
  STM_EVAL_LEDOn(LED2);
46
}

von Oliver J. (skriptkiddy)


Lesenswert?

Entwickler schrieb:
> void vLeds(void* dummy)
> {
>   STM_EVAL_LEDOff(LED1);
>   STM_EVAL_LEDOff(LED2);
>   vTaskDelay(500);
>   STM_EVAL_LEDOn(LED1);
>   STM_EVAL_LEDOn(LED2);
> }

Da fehlt die Endlosschleife.
1
void vLeds(void* dummy)
2
{
3
   while(42) {
4
     STM_EVAL_LEDOff(LED1);
5
     STM_EVAL_LEDOff(LED2);
6
     vTaskDelay(500);
7
     STM_EVAL_LEDOn(LED1);
8
     STM_EVAL_LEDOn(LED2);
9
   }
10
}

Gruß Oliver

von Entwickler (Gast)


Lesenswert?

Hmmm, ok stimmt. Danke!

von Andreas R. (rebirama)


Lesenswert?

Hi,

hab inzwischen zum laufen bekommen.

Es lag nich an deinem Paket Oliver, sonder vermutlich an meiner 
toolchain.

Ich verwende die summon-arm-toolchain, mit der ich bisher gute 
Erfahrungen gemacht habe (bisher = ohne FreeRTOS).

Ich hab den Fehler soweit zurückverfolgen können: Er springt beim 
Starten der Tasks in den HardFault_Handler.
Beheben konnte ich das Verhalten, in dem ich den Aufruf der strncpy 
funktion aus der <string.h> durch das RTOS durch eine einfache selbst 
implementierte Version von strncpy ersetzt habe. (strncpy wird verwendet 
um den Task-Name zu kopieren).

Warum die Nutzung einer Funktion aus <string.h> einen Hard-Fault 
auslößt: keine Ahnung. Vielleicht kann das jemand anders beantworten.

Danke Oliver für das onlinstellen deines Minimaldemos!

von Oliver J. (skriptkiddy)


Lesenswert?

Andreas R. schrieb:
> Warum die Nutzung einer Funktion aus <string.h> einen Hard-Fault
> auslößt: keine Ahnung. Vielleicht kann das jemand anders beantworten.

Ein ähnliches Problem hatte ich Anfangs auch. Und zwar blieb bei mir 
auch jedes mal das System im Hardfault-Handler hängen. Der Grund war, 
dass der Linker die 32-Bit arm-Code-Variante von strcpy gelinkt hatte. 
Der Fehler lag natürlich bei mir. Ein Cortex-M kann ja bekanntlich nur 
Thumb(2)-Code ausführen, sodass er sich an 32-Bit-Code die Zähne 
ausbeißt.

Einen solchen Fehler kann man leicht finden, indem man sich mal das 
Assembler-Listing ansieht: Wenn in der Spalte mit den hex-kodierten 
Befehlen bei strcpy etwas auftritt, was 32 Bit breit ist, dann wurde 
wahrscheinlich nicht die Thumb-Version gelinkt.

Gruß Oliver

von Entwickler (Gast)


Lesenswert?

Hi, letzte Woche hatte ich den Debugger zum Laufen gebracht. Nun ist es 
allerdings so, dass es Probleme mit dem GDB Debugger gibt.

Disassembly in Eclipse:

00000000:   Failed to execute MI command:
          -data-disassemble -s 0 -e 76 -- 1
          Error message from debugger back end:
          Cannot access memory at address 0x0

Was könnte da die Ursache für dieses Fehlverhalten sein ?

von Entwickler (Gast)


Lesenswert?

Ich verstehe das einfach nicht. Warum funktioniert plötzlich der GDB 
Debugger nicht mehr. Vor jedem debuggen starte ich manuell die Software 
"JLinkGDBServer.exe".

Wenn sich jemand mit dieser Fehlermeldung auskennt, wäre ich sehr 
dankbar für die Unterstützung.

von Oliver J. (skriptkiddy)


Lesenswert?

Mach bitte einen eigenen Thread dafür im Bereich µC-Elektronik auf.

von Leonhardt (Gast)


Lesenswert?

Hallo Oliver J.,

ich habe ein Evaluationboard von STMicroelectronics "STM32VLDISCOVERY" 
mit dem STM32F100 Mikrocontroller.
Link: http://www.st.com/internet/evalboard/product/250863.jsp

Eclipse sowie Codesourcery habe ich laut dieser Anleitung installiert.
Link: 
http://www.chibios.org/dokuwiki/doku.php?id=chibios:guides:eclipse1

Ich habe nun das FreeRtos Projekt heruntergeladen und mit Eclipse habe 
ich das Projekt geöffnet. Den Link habe ich bei CROSS_COMPILE auch 
angepasst.
Wie kann ich nun in Eclipse das Projekt kompilieren ? Ich finde kein 
MakeTarget.

von Oliver J. (skriptkiddy)


Lesenswert?

Leonhardt schrieb:
> Wie kann ich nun in Eclipse das Projekt kompilieren ? Ich finde kein
> MakeTarget.

Unter Project properties -> C/C++ Build -> Use default Build Command
den Haken entfernen.

Gruß Oliver

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.