《嵌入式软件的时间分析》-第三章分享:多任务中需要注意的一些问题分享
<div class='showpostmsg'><p>本章介绍了操作系统相关概念。</p><p > </p>
<p >这里个人澄清一个事实,就是很多人把RTOS看作是微内核,这是错误的概念。</p>
<p >微内核和宏内核不是指的操作系统的规模的”微”还是”宏”,指的是其内核实现架构方式的区别,</p>
<p >如果把文件系统等组件也集成到内核中则属于宏架构,如果内核仅仅是实现内核调度等基本功能,其他的文件系统功能等在内核以外实现则属于微内核。</p>
<p >RTOS是把所有的组件和内核一起构建的,所以RTOS属于宏内核。</p>
<p > </p>
<p >本章首先介绍了无操作系统的程序架构,属于前后台架构,程序主循环执行,中断可以打断主循环执行其他操作。</p>
<p >也可以完全不采用中断,使用轮询查询模式,上述架构优点是结构简单,缺点是不适合扩展和大规模业务。</p>
<p > </p>
<p >然后介绍了OSEK/VDX 汽车电子开放系统及接口标准化委员会/法国汽车分布式执行标准委员会,即ISO17356-3:2005标准。</p>
<p >介绍了任务,中断,ErrorHook,调度策略等概念。</p>
<p > </p>
<p >这里提一下RTOS的调度实现一般基于优先级调度,同优先级基于FIFO(uCOSII的查找最高优先级任务算法,FIFO实现等可以参考本人公众号系列文章分享:嵌入式Lee),</p>
<p >即按照就绪先后排队, 同时会实现时间片轮转,即同优先级任务可以指定每个任务轮流执行的时间片数,这里顺便提一下FreeRTOS的时间片每个任务都是固定为1,</p>
<p >而uCOSOIII每个任务可以指定时间片大小,相对更灵活。</p>
<p > </p>
<p >然后介绍了多任务,介绍了堆栈消耗,数据一致性问题。</p>
<p >这两个问题是需要重点关注的,这里简单提一下,堆栈主要关注其消耗量避免溢出,实现方法是先初始化堆栈为固定内容比如0xA5这些值,</p>
<p >运行时检查剩余多少内容依然是0xA5就知道堆栈剩余多少未使用(可以参考本人公众号系列文章分享:嵌入式Lee)。</p>
<p >当然还可以使用MPU(ARM),PMP(RISC-V),Fireware等硬件技术对栈溢出进行检测(可以参考本人公众号系列文章分享:嵌入式Lee)。</p>
<p > </p>
<p >数据一致性也是需要重点考虑的,多任务里最容易出的问题就是这类,比如资源共享需要考虑临界段处理,</p>
<p >举个简单的例子,freertos的heap实现malloc和free是通过关任务调度实现临界段保护的,所以其接口只能在任务中调用,</p>
<p >如果在中断中调用就可能抢占正在执行的malloc和free接口,导致堆的链表结构被破坏(某个malloc和free接口正在执行,另外一个maloc或者free在中断中抢占执行,链表操作非原子,导致破坏链表的结构)。</p>
<p > </p>
<p >最后介绍了Posix,介绍了进程,线程的概念,状态图,调度策略。这里提一下RT_Thread参考Linux的风格进行设计是不错的选择,且有Posix兼容层,使用起来比较方便,当然其他RTOS也可以实现类似的Posix兼容层,这也是可移植性的一个考虑,在自己的项目中可以考虑实现。</p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>介绍了时钟方面的问题,有收货!</p>
页:
[1]