FreeRTOS消息队列

1. 在FreeRTOS中,任务通信可以通过一下函数来实现:
  1. xQueueCreate():用于创建一个消息队列,可以设置队列长度和每个消息的大小;

xQueueSend():将一条消息发送到队列中,可以选择阻塞式或非阻塞式发送;

xQueueReceive():从队列中接收一条消息,可以选择阻塞式或非阻塞式接收;

xQueuePeek():查看队列中的下一条消息,但不将其删除;

xQueueReset():清空队列中的所有消息。

  1. xQueueSemaphore Take()和xQueueSemaphoreGive():用于实现二值信号量,控制任务之间的互斥访问;

xSemaphoreCreateMutex():创建一个互斥信号量,用于实现任务间的互斥访问;

  1. xTaskNotify()和ulTaskNotifyTake():用于任务间的通知机制,一个任务可以通知另一个任务进行某种操作;

  2. xEventGroupCreate()和xEventGroupSetBits()和xEventGroupWaitBits():用于创建、设置和等待事件组。

2.消息队列一般用于以下几个地方:

2.1数据传递:消息队列运行任务之间传递数据,一个任务将数据打包成消息发送到队列,另一个任务则可以从队列中接收该消息并处理其中的数据。这使得任务之间可以方便地进行数据交换和共享。

2.2 任务解耦:通过消息队列,任务之间的耦合可以降低。一个任务只需要关注和发送消息,而不需要知道消息的具体处理细节和目标任务的实现。这样,当需要更改或替换某个任务时,只需要保证消息的格式和接口不变即可,不会对其他任务产生影响。

2.3 同步与协作:消息队列可以用于实现任务之间的同步和协作。一个任务可以等待某个特定的消息到达队列后才继续执行,从而实现任务的同步。另外,多个任务可以通过发送和接收消息来协调彼此的执行顺序和操作。

2.4缓冲和调节:消息队列可以充当缓冲区,用于存储一定的消息量。当发送方发送消息速度较快,而接收方处理速度较慢时,消息队列可以暂时存储未处理的消息,避免数据丢失。同时,消息队列还可以调节发送和接收任务之间的速度差异,以平衡任务负载。

Queue Name:队列名称

Queue Size:队列能够粗糙的最大单元数目,即队列深度

Queue Size:队列中数据单元的长度,以字节为单位

Allocation:分配方式:

Dynamic 动态存储创建

Buffer Name:缓冲区名称

Buffer Size:缓冲区大小

Conrol Block Name:控制块名称

Task Name:任务名称

Priority:优先级,数值越大优先级越高,0表示最低优先级

Stack Size:堆栈大小,字为单位,一个字等于4字节

Entry Function:入口函数名称

Code Generation Option:代码生成选项

Parameter:任务入口函数形参

Allocation:分配方式

3.创建工程:

1.添加队列消息的任务,只需要修改函数名称和任务名称即可,其他的参数都保持默认的值;

2.在下面的队列消息里添加一项队列,其中只修改前三项即可;

3.生成代码

栈的作用:

1.返回的寄存器地址值,函数调用。栈的大小主要取决于最复杂的调用深度:A>B>C>D>E,就是5级调用(被调用者寄存器共R1~R11共8个还有LR一个,每个寄存器占据4个字节,所以就是5*9*4),调用深度越深,用到的栈越大。

2.局部变量,char buf【1000】

3.现场:假若栈式16,那么16*4=64byte

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值