自顶向下学习RTOS第2讲-RTOS任务间通信
自己瞎理解一下RTOS的通信:
“通信”中的“通”表示拨通,建立联系,就像我们只拨通别人的手机而不与之通话;
“信”表示信息,表示要传递的具体内容。
1 全局变量
全局变量只能承担通信中的“信”的作用
全局变量可以承载通信的内容,但是接收方无法意识到信息的到达,除非接收方不断轮询该全局变量;
如:task1与task2通过全局变量val进行通信
global int val; // "信"
void task1(void) // 发送方
{
val = 1;
}
void task2(void) // 接收方
{
while (1) {
if (val == 1) {
// do something
}
}
}
很显然,需要发送与接收方都处于运行状态,接收方需一直检测全局变量。
2 信号量
信号量与全局变量有什么不同呢?
信号量只能承担通信中的“通”的作用。
信号量的本质是一个等待队列。简单的理解:当一些任务需要等待某个信号量,可以把这些任务从运行队列中摘除,放到等待队列中,等条件成熟后,通知方使用信号量将等待队列的任务重新放回到运行队列中,这些任务重新参与调度了。
3 消息邮箱与消息队列
消息邮箱 = 信号量 + 消息指针,既能拨通电话而且能通话传递内容。
消息队列相当与消息邮箱数组,因为一个邮箱只能装一封信。把多上邮箱集中到一起管理和使用就变成了消息队列。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!