Реализация семафора в очередях в freeRtos

Являются ли очереди в freeRtos с самого начала также взаимоисключающими, я имею в виду, должен ли я создать какое-то взаимное исключение для записи или чтения из очереди, или это уже реализовано функциями xQueueRead и xQueueSend.


person user3712774    schedule 11.06.2014    source источник


Ответы (2)


Если вы посмотрите на исходный код в "queue.c", вы заметите, что функции xQueueGenericSend () и xQueueGenericReceive () используют пару макросов tastENTER_CRITICAL () / taskEXIT_CRITICAL () для обеспечения атомарной работы функции, которая, в некотором смысле, является вид взаимного исключения, о котором вы просите.

person Nenad Radulovic    schedule 12.06.2014

Очереди FreeRTOS являются потокобезопасными, вам не нужно реализовывать собственную блокировку. См. документацию FreeRTOS об очередях:

Очереди - это основная форма межзадачного взаимодействия. Их можно использовать для отправки сообщений между задачами, а также между прерываниями и задачами. В большинстве случаев они используются как потокобезопасные буферы FIFO (First In First Out).

person Étienne    schedule 06.07.2014