Professional Documents
Culture Documents
traceTASK - INCREMENT - TICK - Apelata Din Rutina de Tratare A
traceTASK - INCREMENT - TICK - Apelata Din Rutina de Tratare A
void Task1(void *params){ 9.Se considera o aplicatie dezvoltata pentru FreeRTOS si dsPIC33.
portTickType xLastWake = xTaskGetTickCount(): Taskul T1 (creat in main) trebuie sa asigure la fiecare 800 msec
portTickType no Ticks: urmatoarele functionalitati: scrie 0 pe PORTB10 si mentine aceasta
for(;;) { valoare constanta pentru N*100 msec, unde N reprezinta numarul
noTicks = xTaskGetTickCount(); taskurilor din memorie. PORTB10 trebuie tratat ca resursa pasiva
if(xSemaphoreTake(hS,1) == pdTRUE){ partajata (semafor binar cu timeout 0 msec). Daca accesul la
_RB10 = 1; resursa a fost posibil, T1 scrie un mesaj cu valoarea 0 in coada Q,
vTaskDelay(2); altfel scrie un mesaj cu valoarea egala cu numarul de accesari la
xSemaphoreGive(hS); resursa, efectuate cu succes pana la acel moment (variabila care
else {accesariNereusite++;} indica numarul de accesari cu succes la resursa va fi considerata de
xQueueSend(h1, &accesariNereusite, 0): tip unsigned int). Cadrul are durata de 100 msec. Scrieti codul
vTaskDelayUntil(&xLastWake, 4);} pentru taskul T1.
xQueueHandle q2:
unsigned nr 0:
#define traceQUEUE_RECEIVE (pxQueue) f receive (pxQueue)
void f receive (pxQueue){
if (pxQueue=q2)
nr=nr++ :
QueueHandle q2;
unsigned nr=0;
#define traceQUEUE_SEND (pxQueue) f_send (pxQueue)
#define traceBLOCKING_ON_QUEUE_SEND (pxQueue)
f_blockingSend (pxQueue)