任务间资源共享问题示例

2018-01-12 09:42:05 +0000 李述铜

上一节课时中,我们学习了任务间共享资源问题的原因。

从这一节课程开始,我们开始介绍具体怎么用相应的RTOS组件解决这个问题。

为了更好的说明,我们借助一个简单点的例子。

主要内容

课程中使用了两个任务对同一计数器进行读写的问题来说明任务间共享资源的问题。该例子所展现的原理也适用于更多任务。

在课程中我们看到两种冲突的示例。

读改写过程被打断

在前面的课程中已经讲过,任务被打断可能随时随地。现在的这个问题演示的是在机器指令语句层面看到的打断过程。注意!该过程在C语句层面是看不到的。

这种在汇编语句层级出现的打断操作,通常情况下很难发觉。

资源访问流程被打断

这种问题则显示了C语句层面的打断。在视频中提到,这种打断可能源于任务延时、等待事件等主动放弃CPU切换到其它任务运行。

相比上一示例,该打断更容易预测,且该打断过程是在A任务完成了读写操作之后,任务B覆写了修改,导致A的修改丢失。

重点难点

课程提供的两个示例中,第二个示例较容易预测和分析,而第一个更难预测,不确定什么任务在执行时在何时、何地出现打断写冲突的问题。

所以,在编写具体的应用代码时,为了简单起见,只要是临界区,不过发生冲突的概率有多大,都使用一定的方式进行保护。

注意事项

课程中之所以拿简单的例子来介绍,是因为简单才能人人都能看懂,有条件测试。

有同学曾问我有没有结合外设讲的例子。抱歉,这个没有。一旦结合外设,必然涉及具体芯片,无论选择哪一颗芯片,总有一部分人从未用过。

再者,这个例子所展示的原理,同样也适用于任务间共享外设的情况。万变不离其宗!

请在学习本课程时,结合你过往的开发经验。

常见问题