Forum: Mikrocontroller und Digitale Elektronik FreeRTOS auf Linux Rechner


von Aa B. (aaab)


Lesenswert?

Ich habe versucht 2 Tasks auf meinen Rechner mit Ubuntu als OS, mit 
Hilfe von FreeRTOS APIs zu erstellen. Also, Freertos für PC sozusagen. 
Compilieren, tut er schon, das Problem ist nur, die beide Task werden 
nur ein einziges mal ausgeführt, und dann passiert ein Stackoverflow 
(ist nur eine Vermutung weil, ich den Fehler Meldung bekomme 
'Segmentation fault (core dumped)'). Ich habe versucht Taskdelay weg zu 
lassen und zu Debuggen, dann bleibt er immer der while schleife von 
Task1.

Das habe ich als Basis genommen und entprechend angepasst.
https://www.freertos.org/FreeRTOS-simulator-for-Linux.html


Hat jemand bestimmt damit Erfahrung! ?

Toolchain ist Eclipse mit GCC.

Hier ist mein Code:
1
static unsigned long uxQueueSendPassedCount = 0;
2
3
void vTask1(void *pvParameters)
4
{
5
   const char *str_to_display="This is task1\n\r";
6
   while(1)
7
   {
8
    printf("%s",str_to_display);
9
    vTaskDelay(1000);
10
11
   }
12
13
}
14
15
void vTask2(void *pvParameters)
16
{
17
  const char *str_to_display="This is task2\n\r";
18
19
  while(1)
20
  {
21
    printf("%s",str_to_display);
22
    vTaskDelay(1000);
23
  }
24
25
}
26
27
int main()
28
{
29
30
    xTaskCreate(vTask1, (signed char *)"Task1",1000,NULL,3,NULL);
31
    xTaskCreate(vTask2,(signed char *)"Task2",100,NULL,1,NULL);
32
33
    vTaskStartScheduler();
34
    while(1)
35
    {
36
37
    }
38
  return 0;
39
40
}
41
42
void vMainQueueSendPassed( void )
43
{
44
  /* This is just an example implementation of the "queue send" trace hook. */
45
  uxQueueSendPassedCount++;
46
}

von Mampf F. (mampf) Benutzerseite


Lesenswert?

sieht interessant aus! abo-on

von Aa B. (aaab)


Angehängte Dateien:

Lesenswert?

Hi,

Sorry dass ich extrem lange dafür gebraucht habe zu antworten.
Mittlerweile habe ich eine Lösung gefunden für mein Problem der 
einwandfrei auf Ubuntu machine mit Eclipse-GCC Toolchain läuft. Anbei 
der Source Code als Vorlage/Basis, wenn ihr was ausprobieren wollt könnt 
ihr diese modifizieren und entsprechende FreeRTOS APIs verwenden, 
kompilieren und ausführen.

Ich hatte mich zu diesem Zeitpunkt zu einem Online Course über 
"Development of Real-time Systems" angemeldet 
(https://www.coursera.org/learn/real-time-systems/). Das ist ein Kurs 
der 5 Wochen lang dauert. Am ende der Woche muss man ein entsprechende 
Assignment abgeben und deshalb kam zu diese Frage oben. Ist sehr zu 
empfehlen, man lernt wichtige Dinge die man braucht um eine Real-Time 
systeme zu Designen/entwerfen. Die Programmieraufgaben die in diese Kurs 
sind, sind nur auf PC ebene machbar, gibt es leider keine konkrete 
Beispiele auf ein bestimmte Architektur wie ARM oder AVR. Ich fände es 
besser wenn sowas gäbe. Aber ist schon sehr hilfreich um die Konzepte 
kennenzulernen und zu verinnerlichen.

Gerade für Studenten die ganz viel Zeit haben, ist es sehr ideal :)  Für 
Berufstätige auch ist das schaffbar. Wenn man einige Stunden nach der 
Feierabend oder am Wochenende investiert, kann man davon nur 
profitieren. Das gute ist, wenn man es nicht schaffen sollte in 5 Wochen 
am Stück die Dinge fertig zu machen, es ist nicht schlimm, denn, man 
kann beim nächstes mal wenn dieses Course wieder angeboten wird, ab dort 
weitermachen wo man beim letztes mal aufgehört hat weil man einfach 
nicht geschafft hat oder so, diese Feature finde ich ganz gut.

von Benjamin S. (recycler)


Lesenswert?

Erster Vorschalg:
Mach den Stack größer

Zweiter Versuch:
Starte gdb unter Linux: gdb ./deinprogramm
beim crash tippe: "backtrace" oder "bt"
dort siehst du die Funktionsaufrüfe und warum er einen fehlerhaften 
Zugriff hat.
Danach selber suchen
Danach dump hier posten und auf Hilfe hoffen
Zum Schluß Lösung hier posten

von Aa B. (aaab)


Lesenswert?

Benjamin S. schrieb:
> Erster Vorschalg:
> Mach den Stack größer
>
> Zweiter Versuch:
> Starte gdb unter Linux: gdb ./deinprogramm
> beim crash tippe: "backtrace" oder "bt"
> dort siehst du die Funktionsaufrüfe und warum er einen fehlerhaften
> Zugriff hat.
> Danach selber suchen
> Danach dump hier posten und auf Hilfe hoffen
> Zum Schluß Lösung hier posten

Hi, danke sehr, das klingt vllt doof aber, ich habe den Original Broken 
code nicht mehr gefunden, ich habe das allerdings frisch nochmal von der 
freertos.org heruntergeladen, angepasst mit dem tasks da oben, musste 
ich beim linken
1
rt
 flags noch zusätzlich einstellen und hat es kompiliert und läuft wie 
erwartet.

von Joe J. (j_955)


Lesenswert?

Da will ich mit lauschen. Wir haben sowas am Laufen, stecke aber im 
Projekt nicht im Detail drin.

von Joe J. (j_955)


Lesenswert?

Abo an

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.