前情提要
FreeRTOS ~(四)同步互斥与通信 ~ (2/3)互斥的缺陷
举例子说明:利用队列解决前述的"互斥的缺陷"问题
static QueueHandle_t xQueueUARTHandle;
/* 利用队列的写数据和读数据来做类似标志位的工作,类似于锁,因此实际上并不关心这个数据表示的具体值是多少.
而只在意数据是否写入队列,数据是否被读取走.
队列在这里就相当于做了全局变量Flag的作用. */
int InitUARTLock(void)
{
int val;
/* 创建一个队列,只有1个Item,Item的大小是sizeof(int),因为val是int类型 */
xQueueUARTHandle = xQueueCreate(1, sizeof(int));
/* 创建队列有可能会失败,因此给一个返回值表示创建是否成功 */
if (xQueueUARTHandle == NULL)
{
printf("can not cr

该文通过示例展示了如何在FreeRTOS中利用队列作为同步互斥的工具,以解决传统互斥锁的缺陷。通过创建、发送和接收队列,实现任务间的串口使用权管理,确保资源的公平访问。文中提到,如果不加延迟,高优先级任务可能会持续占有资源,而加入延迟可以避免这种现象,保证任务调度的正确性。
最低0.47元/天 解锁文章
3356

被折叠的 条评论
为什么被折叠?



