Forum: Mikrocontroller und Digitale Elektronik uCOS-III Semaphore


von Michael W. (Gast)


Lesenswert?

Hallo !

Ich habe unter Arm Cortex M4 einen Semaphor in uCOS-III.


Wenn ich 2x hintereinander (im gleichen Task) einen OSSemPend() 
durchführe, also
1
timeout = 100; /* 0.1 s */
2
3
OSSemPend(rtos_sem_p, timeout, OS_OPT_PEND_BLOCKING, NULL, &err);
4
...
5
OSSemPend(rtos_sem_p, timeout, OS_OPT_PEND_BLOCKING, NULL, &err);
6
...

und nirgendwo ein OSSemPost() abgesetzt wird, würde ich mir erwarten, 
dass der zweite Aufruf in das Timeout läuft. Er blockiert aber, egal was 
ich für timeout verwende. Übrigens: OS_OPT_PEND_BLOCKING heisst laut 
Manual nur, dass der Semaphor erst einmal auf das timeout wartet, bevor 
er signalisiert, dass das Pend schiefgegangen ist.

Ich wollte eigentlich bloß testen, ob der Timeout Mechanismus 
funktioniert, sehe nun aber, dass es hier scheinbar nicht so 
funktioniert, wie ich es mir vorstellte.


Woran kann das liegen?

Danke !

von Michael W. (Gast)


Lesenswert?

übrigens geht auch OSTimeDly() nicht...

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Da ist jetzt die Frage wie denn das System seine Clock Ticks bekommt 
oder ob überhaupt.
Der Timeout kommt ja bei deinem Beispiel erst nach 100 Clock Ticks.
Diese müssen dem RTOS mitgeteilt werden, vllt ist das einfach zu lang 
per Tick oder die kommen nicht an.
Wenn das Delay auch nicht geht, dann weist das doch sehr stark auf das 
clock Tick Problem hin.

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.