Yes, I was supposing that… Actually each low level IO is accomplished via interrupt (I am using transmitit/receive
it peripheral related hals). For example, related to the bus, which actually is a CAN bus, at this stage I am doing the following (some code is better than any other explanation sometime):
void canLsReadGPIOTask(void const *pvParameters)
while(canLsRxReady != SET)
canLsRxReady = RESET;
where canLsRxReady is a sync flag set within the callback related to HALCAN
Receive_IT. So the right next step would be using, for example, ulTaskNotifyTake + vTaskNotifyGiveFromISR (see http://www.freertos.org/ulTaskNotifyTake.html), if I got well, right?
And what about some critical jobs like pin insertion and ack reception? I don’t want to miss the ack because of a task switch (which is what happens now)! Should I use vTaskExitCritical? The point is that I have tasks which have to cycle on very small time-scales (e.g. CAN bus reception/transmission) others which cycle on very large time-scales compared with the firsts. However, during IO, the “slow tasks” must not be prevented by the faster ones.