Forum: Mikrocontroller und Digitale Elektronik Tasks stm32f103vct


von Ma B. (drumstick)


Lesenswert?

Morgen!

Ich möchte mit Tasks arbeiten. Ich habe ein funktionierendes Beispiel, 
dass eine LED blinken lässt. Jetzt möchte ich einen zweiten Task 
ausführen, der einen Port abfragt. In der Beschreibung steht, im ersten 
Task soll der zweite Task kreiert werden. Nun habe ich eine 
Fehlermeldung!
1
__task void init (void) // Task1
2
{
3
4
  BOOL LEDrun;
5
6
  os_tsk_creat (t_IO, 0); // Task 2
7
  
8
  LED_Off(LED_RUN);
9
  while(true)
10
  {
11
      os_dly_wait (500);   // LED run 500 ms  
12
      if(LEDrun)
13
      {
14
        LED_On (LED_RUN);
15
      }
16
      else
17
      {
18
      LED_Off(LED_RUN);
19
      }
20
      LEDrun = !LEDrun;
21
  }
22
23
}

.\Obj\Frontego_OS.axf: Error: L6218E: Undefined symbol os_tsk_creat 
(referred from frontego_os_main.o).


Ist die Beschreibung nur Theorie oder ist der zweite Task immer im 
ersten zu kreieren? Dies würde bedeuten, im zweiten Task kreiere ich den 
dritten Task??

Meiner Meinung nach, muss die anderst gehen. Mit einem Taskmanager oder 
so ähnlich!???

Danke und Gruss!

M.B.
von Random .. (thorstendb) Benutzerseite


Lesenswert?

Hi,

du solltest dein Projekt etwas genauer beschreiben.

Dem Code nach sieht es nach Keil RTX aus. Schau dir dazu bitte einmal 
die Beispiele im \RL examples Folder deines Boards / deiner MCU an.

Wichtig:
#include <RTL.h>

Options for Target -> Target -> Operating System -> RTX Kernel


Btw...
> Undefined symbol os_tsk_creat
heisst das Dingen nicht os_tsk_create ?


VG,
/th.
von Ma B. (drumstick)


Lesenswert?

Die Beispiele bin ich am Durchlesen!

ich arbeite mit dem uVision von Keil und arbeite mit dem RTX Kernel und 
habe dies auch so eingestellt. Mein Problem ist das lesen... es heisst 
create und nicht creat! :-(  Sorry und danke!

M.B.
von Random .. (thorstendb) Benutzerseite


Lesenswert?

np :-)
von Ma B. (drumstick)


Lesenswert?

1
/* Include type and function declarations for RTX */
2
#include "RTL.h"
3
4
/* id1, id2 will contain task identifications at run-time */
5
OS_TID id1, id2;
6
7
/* Forward reference. */
8
__task void task1 (void);
9
__task void task2 (void);
10
11
__task void task1 (void) {
12
  /* Obtain own system task identification number */
13
  id1 = os_tsk_self ();
14
  /* Assign system identification number of task2 to id2 */
15
  id2 = os_tsk_create (task2, 0);
16
  for (;;) {    /* do-this */
17
    /* Indicate to task2 completion of do-this */
18
    os_evt_set (0x0004, id2);
19
    /* Wait for completion of do-that (0xffff means no time-out)*/
20
    os_evt_wait_or (0x0004, 0xffff);
21
    /* Wait now for 50 ms */
22
    os_dly_wait (5);
23
  }
24
}
25
26
__task void task2 (void) {
27
  for (;;) {
28
    /* Wait for completion of do-this (0xffff means no time-out) */
29
    os_evt_wait_or (0x0004, 0xffff); /* do-that */
30
    /* Pause for 20 ms until signaling event to task1 */
31
    os_dly_wait (2);
32
    /* Indicate to task1 completion of do-that */
33
    os_evt_set (0x0004, id1);
34
  }
35
}

Habe ich das richtig verstanden?
1
id1 = os_tsk_self ();
speichert die ID des laufenden Tasks!?
1
id2 = os_tsk_create (task2, 0);
startet den Task2 und speichert seine ID? Was bedeutet genau der Wert in 
der Klammer (task2, 0);
1
os_evt_set (0x0004, id2);
Setzt das Event-Flag Bit 4 des Tasks mit der id2??

Was nützt mir dieses Event-Flag Bit? Task2 ist der Event 4??
1
os_evt_wait_or (0x0004, 0xffff);

Es wird mit der Ausführung des Events 4 gewartet, bis das Wait-Flag 4 
gesetzt wurde oder 0xffff systemticks abgelaufen sind ??

kann ich das Wait und event Flagbit auch abfragen?

danke und gruss!

M.B.
von Alex E. (tecnologic) Benutzerseite


Lesenswert?

>Habe ich das richtig verstanden?
>
>id1 = os_tsk_self ();
>
>speichert die ID des laufenden Tasks!?
richtig!

>id2 = os_tsk_create (task2, 0);
>
>startet den Task2 und speichert seine ID? Was bedeutet genau der Wert in
>der Klammer (task2, 0);
task2 ist die Funktion in der der Code von Task2 steht, und 0 die 
Priorität der Task, steht aber alles in dem Getting Startet zu den RL 
Bibs von Keil auf der Seite von dehnen zu finden.

BTW: Priorität 0 darf nur die idle Task haben also nicht deine Eigene 
Task da sollte Keil meckern.

>
>os_evt_set (0x0004, id2);
>
>Setzt das Event-Flag Bit 4 des Tasks mit der id2??
Jein Das EventFlag Bit2 wird gesetz (2^2 = 4) und id2 bedeutet das diese 
Signal an die Task mit der ID2 geht.

>Was nützt mir dieses Event-Flag Bit? Task2 ist der Event 4??
>
>os_evt_wait_or (0x0004, 0xffff);
Hier wartet die Task 2 auf das Event aus Task1 0xffff ist ein Timeout in 
dem Fall unendlich. Sonst eine Zeit in RTX Zyklen (meist 10ms)

>kann ich das Wait und event Flagbit auch abfragen?
Ja mit os_evt_get(id2) meine ich aber guck im Getting Startet zu RL

http://www.keil.com/product/brochures/rl-arm_gs.pdf

MfG

Tec
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.