EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
根据自己理解,来仿写一个ucosii
+ E, {1 u* N F
' K" x# P& h, w/ x3 H! g. D% v" S* H) N- z) l" @
简单谈谈我对uc的一些认识级对于部分源码的分析和调试,作为对近一段时间学习的阶段性总结。下文将分两部分介绍,前半部分主要谈谈我个人对一些问题的认识以及一些疑惑,后半部分是通过阅读ucosii,按照ucosii的思路自己编写或者调试的一些源码的分析,这些源码可以实现任务按照优先级定时切换(MDK+stm32)。 1.ucosii有什么作用,和裸机的区别 uc是一个实时操作系统,很长一段时间以来我一直在纠结这个东西是干嘛用的,单片机不是有中断吗,为什么非要用这个东西来完成中断的功能呢? 先谈谈我们比较熟悉的裸机开发,使用一个while(1)配合一些中断来响应事件。但是我们知道,单片机的中断资源是有限的,并且多是用来响应外部事件。另外,中断中使用的全局变量,不可重入性也容易使系统产生问题,造成不确定性。而且中断时间不能过长,使得任务的吞吐量不能太大,而中断之间的相互嵌套也容易使程序出现问题。所以,在需要及时处理复杂或者耗时任务的时候(简单任务while循环的实时性好像不比uc差),及时响应任务并进行处理,这种普通的模式效果就比较差了。而uc有个好处就是它可以随时切换任务,每个任务的执行有固定的时间,通过操作系统统一的TimeTick可以有效统一任务运行的时间,这样就不会出现一个任务长期占据cpu而其他任务得不到运行的情况,我们可以通过调用uc的API来控制每个任务的运行。多任务还有个好处就是把复杂的程序拆成几个任务,这样管理相对方便,容易修改和扩展,否则复杂些几千行的while循环程序一旦完成,想再扩展就变得灰常麻烦。从另一方面讲,在做一些简单的东西的时候,不需要实时性的时候,感觉不使用uc反而更简单一些。想想既然NASA都在使用ucosii,这个东西肯定有它的价值的,学明白了肯定是有用的。 ) l: R; t8 Q/ A$ w# X2 I
|