
本帖最后由 baiyongbin2009 于 2014-12-20 17:44 编辑 4 r- R9 K1 R& p ~ 特别说明:' s/ W- c- `. Z2 m* F* }6 p+ T2 @ x 1. 本教程是安富莱电子原创。 2. 安富莱STM32F407开发板资料已经全部开源,开源地址:地址链接" Z+ y& j2 _; e6 d) }* O 3. 当前共配套300多个实例,4套用户手册。$ [9 b2 ~# M0 [5 d 第8章 μCOS-III系统移植过程详解 本期教程主要教大家如何移植μ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的链接: ![]() 8 o$ F; L& z& J 点击进入后,在网页的最下面可以看到源代码的下载地址: ![]() 大家可能已经注意到了左侧是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 0 N9 Q& l: t8 Q# l, W 3) Added OSTaskRegGetID() toassign task register IDs dynamically 4) Now able to Suspend and Resumetasks from ISRs 5) Added option'OS_OPT_TASK_NO_TLS' to OSTaskCreate() to specify that a task will not requireTLS 6) Added and changed some errorcodes 7) Removed OSMsgPoolExtend() sinceit was not documented and not used. & K8 l# q2 [3 F. ~9 R$ V& O; e 8) Added globalOSStatTaskCPUUsageMax to keep track of peak CPU usage. This value is reset byOSStatReset() 8 ], u' I+ v. ^ 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. " P9 z; P+ l: \; D5 e 3) Added a "return"statement after each invocation of the OS_SAFETY_CRITICAL_EXCEPTION() macro. - a" z" l; v$ {$ F' b! t 4) Fixed OS_TmrLink() while addingTmr object into middle of spoke linked-list. 2 t4 |: A( [ U/ W: E% R 5) Corrected OS_TmrResetPeak()reset maximum number of entries (NbrEntriesMax). $ _: C4 \! Z" O7 P& Z 6) Added note to clarify use ofOS_OPT_LINK_DLY option on OS_TmrLink() at OSTmrStart(). # d: @. h3 \1 |. i( l 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. ! O: {9 J3 A; @) W# n3 G 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. - k/ }: z1 @+ B& ]* u 14) Removed OS_TMR_TICK datatype;converted OSTmrTickCtr to OS_TICK to be consistent with other OS_TMR structure fields. + T5 K \7 Y+ V, {0 S3 l. ~ 15) Prevent OSSchedLock/Unlock() tobe called from ISR. 4 y+ p k$ l- m' F: t 16) Re-arranged order of datastructure members on OS_TCB to keep non-optional items at the beginning of the structure. 8 ^# a4 K5 @2 ^7 k s/ i9 t9 o 17) Changed error codes to enum. 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. " u* p: o# V3 f! O# y% ~# b 21) Added changes to priorityhandling to allow word addressable architectures. 22) Adjusted copyright in fileheaders for source available distribution. -------------------------------------------------------------------------------------------------------- $ A+ ^2 ?; o; c( `3 }/ i/ Y2 |, U4 f" b' p8 V 3 `7 N8 |* h/ y y8 t, }$ j# _ |
9 I3 F! G+ @) k4 l1 p
( L7 V( P/ d0 M2 z( @% o+ L5 f
, ~( g' V" U) t. f
7 ^3 b; `) v* M" n( J' L
8.2.2 文件修改
. F# i1 _; L t8 x$ B3 t2 n
" [8 M/ _6 d8 Y7 K
4 J+ M; q6 s# D& ?( a3 O0 E* C4 J7 t; {
! h8 c) v8 e$ U* n2 D
3 q* A' B9 t' L- Z, y
(续)8.2.2 文件修改0 m# d6 ?2 x/ Y9 ? |
: C% m* K3 ^, @& F C* o# w
上面这几步完成后,编译,链接,下载程序到开发板上,可以看到4个LED闪烁。至此μCOS-III的简单移植就完成了。& X; p; ^- v8 j0 S/ P" D- r5 ^
4 v0 e% j+ h* y% L5 x
x: x0 b8 |* m6 t7 B" d9 X$ [
7 |( L; `/ g9 B; y, c$ |# c
% T# P/ J) X3 R; ?% j' ~( E
* |* w- j! [: c' g- K% r
$ W" f1 R4 F6 U
+ S/ |! e' S$ y# V
5 O; J4 E' C0 w, M. P. Y E
9 I% I( Q, t2 ?/ u3 u. [, Z
- \5 D) a. {$ I8 m/ ^) @- \4 [
谢谢支持