uCOS
学习随笔
StepbyStep‐1
Project: fira‐mirosot‐robot
uCOS
学习随笔
StepbyStep‐1
——构建模板(基于
STM32
控制的第四代圆梦小½)
一、 序
基于第四代圆梦小½
—— FIRA
设计了一个½用
STM32
的控制板
(详细介绍见项目中
的说明:
Introduction B ‐ Hardware of the Smart Car.pdf
)
。
既然硬件从
51
升级到
ARM,½件也应该相应升级,似乎不½再编写那种简单的½询调
度程序,也应该相应升级到基于操½系统编程。
按
STM32
的规模和性½,以及小½的控制需求,实时多任务操½系统
uCOSII
应该是不
二的选择,不论从其性½和功½考虑,还是从学习角度考虑,uCOSII ½很适合。
首先,它是开源的,有丰富的资源。
其次,它是可靠的,符合正式的工业控制、产品设计需求。
小½所面对的是那些学习相关专业的大学生,½为他们学习的辅助工具,趣味性只是为
了降½学习的枯燥性,不是目的。他们借助这个平台是为了积攒应付未来工½的½力,所以,
学习内容的实用性是必须考虑的。
本人从未基于操½系统编写嵌入式程序。
开始½用
MCU
的时候,MCU 的内存太小,256 字节
RAM
,2K 字节
ROM,½勉强把
程序装入就不错了,连
C
语言½不敢选择。
而且,那时½像也没有
RTOS(Real Time Operation System)
,或者是由于信息交流渠道
匮乏,不知道有
RTOS。
既然我提供了这个平台,也借此机会尝试一下,和大家一起学习½用
uCOSII。
(从单片
机应用升级为嵌入式应用
^_^)
第
1
页 共
19
页
uCOS
学习随笔
StepbyStep‐1
Project: fira‐mirosot‐robot
二、Step1 想要得到什么
?(需求分析)
第一步我想得到的是:
1)
如½建立一个基于
uCOSII
的编程环境(目½、文件组织)
;
2)
如½基于
IDE(IAR
或
RvMDK)建立一个工程,½够产生可以运行的程序;
3)
得到一个“干净的”
、可以½为模板的
uCOSII
程序组(Project)
;
4)
通过上述过程初步理解在
uCOSII
下如½编写应用程序。
之所以要把“如½建立……”½为需求,而不是找一个现成的模板或示例程序修改、添
加自己的功½,是因为看了许多这种程序,感觉“极不可靠”
!因为程序中有太多的东西不知
道为½而存在?不知道为½而被注释掉?似乎这些东西½像“定时炸弹”
,早晚会给½的程序
带来麻烦。
同时,也给自己理解程序的构成和运行机制带来困扰,既然是学习,就应该知其然、知
其所以然,否则也谈不上“掌握”
,更不敢在日后的工½中应用(如果是打工,也许还敢试试,
如果是用自己的钱做产品、项目,我想½一定不敢用)
,如此则和做此事的初衷相悖了。
三、如½入手?
uCOS
的书有很多,也看了许多,½多数½是解析操½系统本身的,或者是如½移植,鲜
有书籍、资料教½如½在操½系统下编程。
实际上,对于学习者,特别是初学者,更多需要的是学会如½在一个移植½的系统下编
程,等到½基于操½系统实现自己的功½后,才会有心思去探究操½系统是如½在自己的
MCU
上运行的
(移植) 以及那些神秘的系统功½是如½实现的
,
(了解系统½数及运行机制)
。
而且这种探究也是有选择性的,首先是自己用到的功½才有兴趣去研究,否则如坠云雾。
其次,取决于自己所扮演的角色,如果只是学习一下,那只需泛泛了解,有个定性的认识即
第
2
页 共
19
页
uCOS
学习随笔
StepbyStep‐1
Project: fira‐mirosot‐robot
可。如果要用于产品,那可½要深究,吃透其源代码,以保证产品的可靠和高效。
所以,要想学习有效,学习的方式首先要“正确”
。
在编程理念上,人们已经接受了“面向对象”的思维方式,并且承认了其优越之处。
可在学习方式上似乎并未接受,至少大多数书籍还是基于“过程”的,目前所倡导的“任
务驱动”
(或者称之为“项目驱动”
)模式似乎未被响应,而所谓“任务驱动”我觉得从实质
上讲类似于编程中的“面向对象”概念。
“面向对象”核心是将编程的关注点放在要实现的功½上,而非实现功½的方式。
“任务驱动”核心是将学习的关注点放在要完成的任务上,而非完成任务的技½。
“面向对象”的优点源于这种思维方式½变带来了逻辑关系的清晰,从而½程序易于理
解,带来的所有½处我认为½源于“易于理解”
,如可移植性、可靠性、便于多人合½等。
而“任务驱动”同样也是得益于“易于理解”(½用
OS
编程也是为了“易于理解”
!
)
以往的“教”和“学”½是先传授知识、技½,后让学生½用之。可痛苦在于,这些知
识、技½是前人为了解决某些问题而创建的,准确的说应该是解决问题后½象出来的。学生
们却要先把½象的“记½”“理解”“暂存”后再去找机会用。想象一下,学的过程会有多
、
,
“枯燥”
,更可悲的是,到需要用时,
“暂存”的东西找不到了
。
人通常对于明确目标的事情有较强的兴趣,而且目标越近,动力越大,越亢奋。对于不
知为½而做的事很难投入,通常是三心二意应付了之。目前的大学多数是这个状况。
所谓“任务驱动”就是先明确目标,再去学习实现目的所需的知识和技½。这样学生在
整个学习过程中½会主动去思考,不断斟酌正在学的东西可以怎样帮助自己实现目标。此时,
½想让他走神½难。
所以,本学习过程尝试采用“任务驱动”方式。首先要确定一个合适的目标½为学习的
素材,目标要可行、½提起兴趣,否则无异于没有。
第
3
页 共
19
页
uCOS
学习随笔
StepbyStep‐1
Project: fira‐mirosot‐robot
我所选择的目标是用
STM32
去控制一个小½。小½控制涵盖了数字输出输入、模拟输
入、定时器应用、通讯应用等,应该说嵌入式控制常用的知识均已包含。
因为电机驱动,½动检测、电机电流检测、通讯等需求同时存在,而且这些任务½有响
应时间要求,uCOS 的实时多任务特征正½可以得到应用。
小½可以扩展,控制板有
I2C
接口,很多传感器½带。½那是在小½控制自如后的事了。
本系列文章就准备在这个基础上逐渐深入。
四、初步规划
从
03
年开始关注
uCOSII
,买了邵老师的书。真正开始看是
08
年,我的第二代小½推
出
STM32
扩展版之后。晕晕乎乎将书看完,结果还是无从下手,半途而废。
这次重新启动是因为第四代小½没有设计
51
的控制器,为了演示只½编写
STM32
的控
制程序。
为避免再次夭折,强迫自己不再为了销售而编写不带系统的示例程序。那样½很快捷,
借助于
ST
的库,初始化½硬件,直接½用原来基于
51
的
C
程序即可。
可如果那样,或许就没有动力和压力去“折磨”自己,尝试在
uCOSII
下编程了。不过这
次我决定更章易辙,从应用入手,不再纠缠于系统本身。
1)买一个移植成功的学习板½为参考(我买的是“奋斗 STM32”
,期望少走些弯路。
)
2)买了本《基于嵌入式实时操½系统的程序设计技术》
,期待得到系统的指引。
3)从 uCOS
的官½(http://micrium.com/page/home)下½½最新的
uCOS
源程序及资料。
4)以驱动小½控制板上唯一的 LED
为任务,自己构建编程环境和工程,½为日后深入
的基础。
因为
51
我是用
Keil
的,所以
ARM
决定还是用
Keil,减小难度。
第
4
页 共
19
页
uCOS
学习随笔
StepbyStep‐1
Project: fira‐mirosot‐robot
五、实½
5.1
准备工½
uCOS
官½上有移植½的
Cortex‐M3
上的
uCOSII,程序包为:
Micrium‐ST‐uCOS‐II‐LCD‐STM32.exe
下½½安装后,里面有
uCOS
源程序、ST 库、基于
ST
学习板的示例程序、相应的说明。
看了若干资料,觉得最有价值莫过于从官½上下½½的手册:
AN1018
:µC/OSII and the ARM Cortex‐M3 Processors
特别是其中的这张图:
第
5
页 共
19
页
评论