金牌会员
- 积分
- 1108
- 金钱
- 1108
- 注册时间
- 2018-11-6
- 在线时间
- 240 小时
|
发表于 2022-1-27 10:51:55
|
显示全部楼层
很多初次接触FreeRTOS编程的人主要是对:划分任务和任务之间的通信感到困惑。
一、前后台
主程序是顺序执行。
定义一个全局变量AA
void main(void)
{
while (1)
{
程序1; --->读写全局变量AA
程序2; --->读写全局变量AA
程序3; --->读写全局变量AA
}
}
1、 全局变量AA只在主程序中进行读写,没有在中断服务程序中进行读写
由于主程序是顺序执行的,所以不存在全局变量AA的原子保护,也就是说,你可以在主程序的任何地方随意使用。
2、全局变量AA既在主程序中进行读写,又在中断服务程序中进行读写
(1)、主程序中读写全局变量AA之前:关中断
(2)、主程序中读写全局变量AA之后:开中断
二、FreeRTOS
任务间由优先级从高到低执行,因此存在原子保护。
操作系统给我们提供了消息队列这种方式传输数据,而消息列队本身就具备原子保护。
你就不能像前后台那样,定义一个全局变量,随便在哪里用就在哪里用。
在FreeRTOS下编程,一个任务想要获得另外一个任务的变量值,必须要通过FreeRTOS下提供的API函数才可以。因为FreeRTOS下提供的API函数本身就具备原子保护。
三、前后台和FreeRTOS区别的形象比喻
1、前后台就相当于你到菜市场拿着现金买菜
你、现金、菜、菜贩
双方都看得清清楚楚,交易过程双方全程可见--->就像你在前后台中使用全局变量一样,想在哪用就在哪用。
你把现金交给菜贩,菜贩把菜交给你。
2、FreeRTOS就相当于在天猫买东西
你首先要遵守天猫平台的规则(相当于你必须要用FreeRTOS提供的API函数从一个任务给另外一个任务传送变量值)
你在平台看上一款商品,点击下载,然后付款,你不是直接付款给商家,而是付给天猫平台。
天猫平台收到货款,通知卖家发货。
你收到货,签字,天猫平台给卖家打款。
(1)、你 ---> 任务1
(2)、卖家 --->任务2
(3)、付款给天猫平台,天猫平台收到货款,通知卖家发货,你收到货,签字,天猫平台给卖家打款
相当于FreeRTOS提供的API函数
交易过程,买家和卖家都看不到对方。
你不能直接把现金交给卖家,必须要通过天猫平台---> 在FreeRTOS编程中,任务1给任务2传输变量值,必须要通过【FreeRTOS提供的API函数】消息队列传输变量值。
|
|