FreeRTOS中使用全局变量的问题

您所在的位置:网站首页 在程序中如何使用变量 FreeRTOS中使用全局变量的问题

FreeRTOS中使用全局变量的问题

2024-07-15 09:54| 来源: 网络整理| 查看: 265

在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式,但是如果在使用操作系统的应用中用全局变量来传递消息就会涉及到“资源管理”的问题。

多任务访问全局变量会带来共享资源管理问题,消息队列最终是用的全局变量!但是消息队列对这个全局变量做了保护,重点就是资源管理的保护!假如你直接使用全局变量,那么在代码中任何任务都可以随时随地的访问、修改这个全局变量!

例如:

A任务正在使用全局变量S,A任务由于任务切换暂停运行切换到B任务,而B任务也要使用S,这时候B任务修改了S的值。当再次切换到A任务的时候这个变量S就变了,A任务可能就运行出错。

如果使用消息队列的话,A任务要使用队列S,先申请,申请成功以后才可以使用。B任务也要使用S的时候也要先申请,当时发现S已经被A任务使用了,所以B任务就没法使用(假设当前的队列长度为1),直到A任务使用完S并且释放掉B任务才申请使用!

操作系统中使用 信号量、消息队列、事件标志组、任务通知。 

消息队列:  全局数组 相比消息队列,主要有如下四个问题: 使用消息队列可以让 RTOS 内核有效地管理任务,而全局数组无法做到,任务的超时等机制需要用户自己实现。 使用了全局数组就要防止多任务的访问冲突,而使用消息队列则处理好了这个问题,用户无需担心。 使用消息队列可以有效地解决中断服务程序与任务之间消息传递的问题。 FIFO 机制更有利于数据的处理。 事件标志组: 

全局变量相比事件标志组,主要有如下三个问题:

使用事件标志组可以让 RTOS 内核有效地管理任务,而全局变量无法做到,任务的超时等机制需要用户自己实现。使用了全局变量就要防止多任务的访问冲突,而使用事件标志组则处理好了这个问题,用户无需担心。使用事件标志组可以有效地解决中断服务程序和任务之间的同步问题。 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3