本帖最后由 21ic大掌柜 于 2017-4-5 10:14 编辑
在一个no os的cpu里面,想要做点事,或在做事的时候要考虑什么呢:
重中之重是中断,能否用好中断是体现你思想的时候。要熟悉你的中断控制器的性能,包括如何挂接中断,如何响应中断,各中间之间的关系是什么样的。以m4 core的cpu为例,在各模块的中断信号送出之时,cpu还不能响应中断,在各模块和cpu之间连着一个中断控制器。该控制器对中断提供了一个统一的管理。中断控制器也是一个模块,不像以前51 cpu,要让cpu响应你的模块,还要让中断控制器模块接受其它模块提交的中断信号,在m4 core中就是向0xE000E100地址写入配置值。
其实任务一工程师,比较完整地使用过os的话,都不想回到裸编程,但实际情况是复杂的,比如刚研发出来的cpu,还没有配套该cpu的稳定的os可用,比如出于flash,ram等成本的原因,不能加载os,毕竟加载os会消费一定的ram,flash.实际上加载os,主要用到os二个特点,一为任务管理,二为os组件。在大量的嵌入式控制器中,更常用到的是任务管理,很多时候,我们的任务不会很多。在一个好的嵌入式设计中,不会任由任务数量增加,毕竟每个任务都需要自己的ram stack space,在嵌入式cpu中,ram还是比较贵的。在很多的情况下,二个任务就可以了。
是的,很多应用,二个任务就可以了。一个后台任务,一个实时任务。在裸程序中,一个由main带来的非实时任务,一个由中断带来的实时任务,就可分配相应的逻辑和应用。在阻塞处理方便的相应代码,分布到非实时的main任务中,比如等待用户输入,并对输入合法性检查的代码块。在需要实时处理的可以分配到中断任务,如果中断任务分优先级的话,那就更好了,可以根据实时程度来分享中断任务。
在有优先权的cpu中,中断的分配也就成了一门艺术了,给了高优先权的事务,该事务也要主动的最快的让出cpu使用权,这个做法和os系统中对优先权的管理思路是一样的。采用上半部分和下半部分的做法。这个对于用过os的人再熟悉不过了。
随着项目code的增大,功能增强,裸程序也长大了,有自己的管理事务的组织框架。这时候,又从no os code到“os code”了。
|