
本帖最后由 baiyongbin2009 于 2014-12-20 17:44 编辑 特别说明:% K) R8 L% L% j5 ?( `- o 1. 本教程是安富莱电子原创。6 O# |1 Z& R$ D! g2 j4 Y8 N% x" ` 2. 安富莱STM32F407开发板资料已经全部开源,开源地址:地址链接6 ]+ O$ { ]5 Z2 c1 p2 o 3. 当前共配套300多个实例,4套用户手册。4 b( v/ E+ P/ P6 z4 p; O 第8章 μCOS-III系统移植过程详解 + ^$ X) m6 V" r 本期教程主要教大家如何移植μCOS-III系统,μCOS-III的移植并不难,因为官方已经帮我们把移植代码写好了,我们要做的只是将工程建立起来,编译、链接、运行。如果有什么错误参考官方已经建立好的代码即可。下面就跟大家详细的讲解一下移植过程。 8.1 源代码下载 8.2 源代码移植-MDK 8.3 源代码移植-IAR 8.4 总结 8.1 源代码下载 移植前要从官网下载相关的源代码,一般官方会为IC厂商新推出的评估板配套相应的移植工程,比如去年(2013年)ST公司推出的STM32F429 探索套件。推出后不久Micrium公司就为其配套了自己的μCOS-III工程文件。其实不光Micrium会为其移植相应的工程,其它的RTOS厂商也会移植的,比如SEGGER公司为STM32F429探索套件移植的embOS工程文件。还有一点要和大家说的是,这些RTOS厂商倾向于使用IAR开发环境。为什么使用IAR开发环境?主要是因为IAR中集成了多款RTOS的调试组件。如下图所示: ![]() 考虑到初学μCOS-III的同学中使用MDK的比较多,而且μCOS-III有相关的调试工具μC/Probe,功能也比较的强大。我们今后的教程以使用MDK为主,IAR相关的知识也会跟大家讲解。 下面开始说一下如何从官网下载μCOS-III源码代码以及为STM32配套好的工程代码。先说如何下载源代码: l 打开Micrium的官方网站:www.micrium.com,并点击下面的图标: ![]() l 进入分版块以后,在最上面会有Download的链接: ![]() 5 Q3 j7 ]2 X( k1 F0 U8 r" i' _! f p* L1 i & J- Z& D1 \0 | 点击进入后,在网页的最下面可以看到源代码的下载地址: ![]() 大家可能已经注意到了左侧是Login,这个的意思是大家需要注册一个账号才可以下载,注册很简单,点击Login弹出下面的界面注册就行。 ![]() 注册并登陆后上面的截图就会变成下面这样: ![]() 这种情况下就可以下载源码了,咱们要下载的是最下面的那个,不过日期有点早,是2012年的了。将这个源码下载下来解压后会看到里面的文件如下(路径:\Micrium\Software\uCOS-III): ![]() 这里咱们重点看一下Release文件,这个文件比较的重要,主要记录着μCOS-III的更新内容。内容如下(建议初学的同学把下面的内容读完,脑子里有个印象): -------------------------------------------------------------------------------------------------------- Release V3.03.00 (2012/02/14): -------------------------------------------------------------------------------------------------------- 1) Added Thread Local Storage(TLS) support See chapter 20 of the User'sManual 2) Computation of CPU usage hasnow a resolution of 1/100th of a percent 3) Added OSTaskRegGetID() toassign task register IDs dynamically 4) Now able to Suspend and Resumetasks from ISRs 4 w: M$ o6 A4 n- t% h9 | 5) Added option'OS_OPT_TASK_NO_TLS' to OSTaskCreate() to specify that a task will not requireTLS 6) Added and changed some errorcodes , f S5 |3 X9 l( w7 A/ r 7) Removed OSMsgPoolExtend() sinceit was not documented and not used. ) a7 s3 ^* g' u% v1 O3 f: M 8) Added globalOSStatTaskCPUUsageMax to keep track of peak CPU usage. This value is reset byOSStatReset() 9) Added per task .CPUUsageMaxwhich tracks the peak CPU usage of each task. -------------------------------------------------------------------------------------------------------- Release V3.02.00 (2011/08/01): -------------------------------------------------------------------------------------------------------- 1) Corrected pointer to integercast in OSMemCreate. 2) Corrected invalid typecast onconstant initialization on os_cfg_app.c. 3) Added a "return"statement after each invocation of the OS_SAFETY_CRITICAL_EXCEPTION() macro. " g0 x2 F. v: [' p5 L4 m 4) Fixed OS_TmrLink() while addingTmr object into middle of spoke linked-list. 5) Corrected OS_TmrResetPeak()reset maximum number of entries (NbrEntriesMax). e# ]+ w& p9 t0 |) y6 S) g 6) Added note to clarify use ofOS_OPT_LINK_DLY option on OS_TmrLink() at OSTmrStart(). / W6 ?" ]4 I( v9 b5 x7 a, o 7) Adjusted order of operation onTick Wheel during insert (OS_TickListInsert) to first set link pointers on new object, then add it tothe linked-list. 8) Corrected OS_OPT_POST_NO_SCHEDoption for OSFlagPost and OSFlagPendAbort. 9) Initialize Interrupt QueueHandler Task before any other task to prevent usage of OSIntQNbrEntries uninitialized. V) p/ G) N2 @, E 10) Corrected use of disabledvariable 'OSCfg_ISRStk'. 11) Changed default OS_CYCLES to32-bits. 12) Corrected per task CPU usagestatistics computation. 13) Adjusted version to new formatVx.yy.zz. 14) Removed OS_TMR_TICK datatype;converted OSTmrTickCtr to OS_TICK to be consistent with other OS_TMR structure fields. 7 @/ u) Z* J7 i7 W$ @ O 15) Prevent OSSchedLock/Unlock() tobe called from ISR. 16) Re-arranged order of datastructure members on OS_TCB to keep non-optional items at the beginning of the structure. 17) Changed error codes to enum. ' E7 N/ G! q& Y" c 18) Converted OS object types touse CPU_TYPE_CREATE. 19) Reworked check to not allow tocreate multiple tasks at idle task priority. 20) Corrected alignment check onOSMemCreate() to handle cases where sizeof(void *) == 1. 21) Added changes to priorityhandling to allow word addressable architectures. 22) Adjusted copyright in fileheaders for source available distribution. 1 a5 c9 V" [" Z1 ?-------------------------------------------------------------------------------------------------------- . L3 ]/ ?6 j1 r* {* t/ e( r9 z2 t$ p0 X8 W 6 W5 Y9 X# M& I / X! {# w5 _$ D7 C1 g i |
y$ `. N7 o% n7 y' J
5 t8 [4 d( H( t' n6 @$ s0 Z
5 x: F2 E! | O8 G" E3 e2 e
4 _' b& q- q# O* d( J* Q
8.2.2 文件修改
. e7 _; C- v1 \* m6 y
( d5 l3 Q0 B& ?- ?' j8 F
/ s6 A+ G; ~% q+ L
, p* z6 ]! A! l
(续)8.2.2 文件修改
上面这几步完成后,编译,链接,下载程序到开发板上,可以看到4个LED闪烁。至此μCOS-III的简单移植就完成了。/ O% ^1 V* b6 z$ e3 j i ?
1 | F! E$ X8 b1 }& m
9 X: ?% }6 M/ [
4 t# e8 X6 J' ?( a
+ u+ ?9 {, g! U" ]9 @5 o, a
谢谢支持