FreeRTOS学习笔记

RTOS中任务、事件、消息之间的关系

它们之间的关系如下:

1、任务是处理事件的一个功能集合,一般由一个事件处理函数实现(ProcessEvents)

2、事件是当前系统中被触发的动作,例如有按键按下,接收到其他节点发送过来的消息等等

3、消息则是事件编号和其对应事件内容的集合,发生事件并将其打包到消息队列,供事件处理函数进行处理

大致的流程如下:

 **事件发生后-->被打包为消息-->存放到消息队列-->事件处理函数取出消息并进行相应操作。**

关于消息队列的几个疑问?

1、对于一个任务发送消息,多个任务接收消息,那么接收消息的任务如何确定接收的消息是否是自己想要的?
2、多个任务发送消息,一个任务接收消息,那么如何确定接收消息的来源呢?
3、任务通知方式仅可以用在只有一个任务等待信号量,消息邮箱或者事件标志组的情况???具体是指整个工程的通知方式只能三选一???还是说一个任务中的通知方式只能三选一???
答:工程中只能有一个任务接收任务通知(信号量,消息邮箱或者事件标志组)。

关于FreeRTOS各种信号的理解:

一、共同点:

都是在接收到自己相对于的信号时,这个任务后面的程序的才可以进入运行态或就绪态,否则,这个任务一直处于阻塞态。

二、不同点:

1、事件标志组:传递的是标志位
  1)选择“等待所有标志位都被设置”时,那么这个任务后面的程序只有在所有的标志位全部置位后,才会进 入运行态或就绪态。而对于这些标志位,可以在不同的任务、不同的函数中分别置位,也可以同时置位
  2)选择“等待不是所有标志位都被设置”时,那么只有有一个标志位置位,后面的的程序就可进入运行态或就绪态
2、消息队列:传递的是数值(指针值)
3、计数信号量:传递的是信号量计数值

  1)这个计数值的大小,代表可用资源的数量,每占用一个资源,信号量计数值-1;每释放一个资源,信号量计数值+1.
  2)当这个计数值为0时,表示没有资源可以使用,任务进入阻塞态,直至有信号量释放。
4、二值信号量:相当于只有0或1两种计数值的计数信号量。
5、互斥信号量:可以防止优先级翻转的二值信号量。

三、任务通知方式:任务事件标志组、…

1、任务事件标志组、任务计数信号量、任务二值信号量、任务消息邮箱
2、注意事项

  1)任务通知方式只能有一个任务接收任务通知(信号量,消息邮箱或者事件标志组),不过实际项目项目中这种情况也是最多的。
  2) 接收通知的任务可以因为等待通知而进入阻塞状态,但是发送通知的任务即便不能立即完成发送通知,也不能进入阻塞状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值