RTOS中的共享资源保护方法--Apple的学习笔记

一,前言

之前学习过一轮RTOS,主要是freertos比较全面的了解,其它RTOS通过对比法主要研究学习的是task切换和task调度算法及代码实现。但是关于共享资源保护及多核处理我都忽略了,此次就借用学习threadx的RTOS的同时再补上这些点。

二,共享资源保护方法(仅考虑单核)

我先回顾了下FreeRTOS共享资源的保护,比如printf打印信息,要保护这个共享资源有如下方法。
1。通过中断开关来保护资源
优点是简单,缺点是共享资源的处理必须快。
2。通过挂起调度器来保护资源
优点是简单且可以支持共享资源运行的更长,缺点是上下文调度花费时间,且可以被中断打断,需要考虑实际情况来使用。
3。互斥量来保护资源
优点是支持共享资源运行的更长,缺点是若系统资源设计不优化,则会发送优先级翻转和死锁发生。
4。守护任务
守护任务提供了一种干净利落的方法来实现互斥功能,而不用担心会发生优先级反转和死锁。但是他的实时性会受到一些影响。中断中可以写队列,要挂接一个心跳钩子函数,需要做以下配置。设置 FreeRTOSConfig.h 中的常量 configUSE_TICK_HOOK 为1。

三,AutosarOS中资源保护的应用

autosarOS中资源保护多核用自旋锁,单核用开关中断比较多。我理解event事件触发就是信号量的概念呢,和互斥量差不多,都存在优先级翻转问题,但是autosarOS就像threadxOS一样支持优先级调整,当低优先级抢占到资源后,OS会自动太高任务优先级,完成对资源的使用就会将优先级还原。
python控制trace32(下)--Apple的学习笔记之前遇到打印信息内容被打断,但是这个打印是将数据放入循环队列,然后trace32读取循环队列的值。和今天Freertos说的printf硬件资源保护有点不同。但是也有一个循环队列作为各个task的共享资源。若我也添加守护任务是不可行的,因为我的目的是项目os调度顺序可预测性的测试,若添加测试代码,也就是添加一个task就会影响原有系统设计。所以我能想到的最好的办法就是在os任务切换的函数中,也可以理解为所有任务切换前我写入切换信息到循环队列中。就可以解决内容被打断的问题,因为任务切换函数是在中断中进行的且不会被打断。

四,小结

技术都是相通的,多了解自己行业外的技术,引进新的想法,是我一贯的学习思路。在我想不到什么创造发明小项目的情况下,就多学习多思考吧,等待灵感的到来~

你可能感兴趣的:(RTOS中的共享资源保护方法--Apple的学习笔记)