FreeRTOS临界资源保护(临界区保护)

本文探讨了在FreeRTOS中临界资源未保护可能导致的问题,通过一个链表操作的例子解释了临界区的概念。介绍了临界资源、临界区和可重入等概念,并提出了互斥锁和屏蔽中断两种保护方法。同时,文章建议减少临界资源的使用,检查并确保关键操作的保护,以及在某些情况下使用原子操作来确保基础数据类型的完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

临界区未保护出现的异常

  有一种问题相信大家都不愿碰上,就是低概率偶现问题,这类问题的根源,根据作者的经验常见于以下四种情况:

  • 野指针引用
  • 数组越界
  • 栈溢出
  • 临界资源未保护

  今天我们说说其中之一的原因:临界资源未保护。
  我们先看个例子,假如有一个5个节点单向链表,如下结构:

head->1->2->3->4->5->NULL

  有一任务A在一个单向链表的2->3节点之间插入一个新的2a节点,已经将2->2a,还未将2a->3,此时,链表变为两个未完整的部分,如下结构:

head->1->2->2a->?
3->4->5->NULL

  如此时,任务A被更高优先级的任务B抢占了,并任务B开始访问该链表,那么任务B此次访问就会获得一个错误的结果。

  上面的情景就是临界资源未保护导致错误的一种情况,解决这类问题我们通常有两种方法,一种是互斥锁保护,一种是暂时屏蔽中断。
  借助这个例子我们先了解几个与临界资源保护相关的概念。

相关概念

  临界资源
  临界资源指会被多个任务(或中断)访问到的公共资源。包含软件资源和硬件资源,软件资源指全局变量,如上面例子中的链表ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值