实操性最强:uCOS-II移植到STM32上的详细步骤;

上传人:Sc****h 文档编号:131408412 上传时间:2022-08-06 格式:DOCX 页数:16 大小:192.75KB
收藏 版权申诉 举报 下载
实操性最强:uCOS-II移植到STM32上的详细步骤;_第1页
第1页 / 共16页
实操性最强:uCOS-II移植到STM32上的详细步骤;_第2页
第2页 / 共16页
实操性最强:uCOS-II移植到STM32上的详细步骤;_第3页
第3页 / 共16页
资源描述:

《实操性最强:uCOS-II移植到STM32上的详细步骤;》由会员分享,可在线阅读,更多相关《实操性最强:uCOS-II移植到STM32上的详细步骤;(16页珍藏版)》请在装配图网上搜索。

1、精品文档前言:说点废话,网上有很多关于 uCOS-ii 移植的文章, 好多都是千篇 一律,理论性很强,分析了一大堆虚头巴脑的东西,真想问他们,你 确定你分析的这些东西是需要你做的工作吗?实操性严重欠缺。 。这 方面我也走了很多弯路,下面就将自己的移植过程一步步的记录下 来,也给大家做做参考。首先,简单总结一下移植的大概过程 :(1) 去uC/OS-ii官网下载你要移植芯片CPU勺相关案例,不一定完全对应,那就找相应系列吧。(2) 编程环境一般有两种,分别是IAR和MD,这个根据你自己勺编程环境进行下载。(3) 本案例需要将 uC/OS-ll移植到STM32F103ZET上,而我使用的编程环境是

2、MDK很遗憾,官网上提供的案例是基于 IAR的,所以要基于IAR的案例进行更改。(4) 使用MDK创建一个无操作系统的最简单程序,确保这个程序能够使用,这样做的目的是为了一步步的排查错误,假 如无操作系统时,都有错误,移植过程中也肯定会有编译 错误,那么在排查错误的时候也就增加了难度,不会写物 操作系统的简单程序怎么办。 。那就不要往下看了。(5) 移植的最大的改动主要有两部分,一个是一些头文件的增减 , 另 外 一 个 就 是 向 量 表 中 PendSV_Handler 和SysTick_Handler 的修改。这里我要吐槽一下,网上说了 一大堆关于什么OS_CPU.的更改还有各种函数的的

3、分析, 这都是扯淡。这些根本就不用移植者去修改,官网提供 的案例都已经提供了,除非你选择移植的CPU是比较偏的, 那么这些东西需要移植者自己去编写。好了,下面就开始详细的记录怎么去移植。一、创建一个无操作系统的简单裸板系统1.创建源文件工程文件夹,如下图所示:* CM&ISU ListOutputJi STM3StdPeriphUsr其中文件夹“CMSIS为内核的接口,包含的文件如下 图间 core_cm3.c10 core_cm2.h吶 5ta rtd p_stnn 3 2f 1 Ox_hd .s咸 tm 32f 10xhcjIOjl c0)systeh文件夹STM32_StdPeriph为

4、固件驱动文件夹,这个把STM32勺固件全都添加进去即可。文件夹User为其他文件,如下图所示:stir32flOw_conf.hl(hc_it.cstm32flOx it.h文件夹Output和List主要是放那些编译产生的乱七八糟的文件,为了使工程代码更加简洁。2.使用MDK创建无操作系统工程项目,这一点就不一一说了, 将创建后的工程项目文件树截图如下:日UCO&-5TM32肖 0 CMS1Si 閣 sta rtu pw5tm3 2 fl O_hd. s“为 systm 3 2f 1 Dx.c由 口 STM32Fl(yx_StdPeriph白臼User 圍 5tm32fl0x_itc这个时候

5、还没有main文件,那么创建一个 mian.c文档即可, 这里需要注意,创建 main.c后,要将其添加到项目中才行,而不是 简单的保存。如下图所示:、自佝User圃 stm32flOx it,c-當 maini.c注意:main.c中要有一个mian函数,否则编译器会报错提示 你的。然后就是项目的配置,这个还是很重要的,下面分别说需要配 置的地方:(1)Output选项如下:puCOS-STM32这里面勾选了 Create HEXFile选项,同时将项目输出放到了之前创建的Output文件夹。(2) List选项,将List产生的文件放入到之前创建的List文件夹中(3) C/C+配置选项如

6、下:冈 Options for Target uCO&-STM32Devi ce | Target Output | LiEtingIjEer心C+ | Asm| Linker DeVu百Pnepracesror SymbolsRefine: |USE_STDPERIPH_DFtlVER.STM32F10X_HDlindefine:Language / Code GenerationQptimnatior- | Level 0(-0 (Z: T 厂 OptimiM for TirnftI Split Load and Store MultipleOne ELF Section per Func

7、tion厂 Strict ANSI CI Enitm Corttarier always inrt厂 Plain Char is Signed厂 Read-Onl Positioi Independent I- Read-Write Position IndependentWarnings: | 二 厂 Thumb ModeWd Auto IncludesCancelDefaults其中 Define 选项中,填入:USE_STDPERIPH_DRIVER,STM32F10X_HD这是告诉编译器,使用标准外设,还有选择的 CPU类型,其中CPU类型需要根据你选择移植的 CPL行适当的更改。In

8、 elude Paths是要包含的头文件路径,这个为了保险,将项目中的所有有.h的文件的文件夹都包含进去就可以了。4.Debug选项如下:Device | Target | Output | Listi口召Vs er| Linker ebug:| Utilities |i Use Sinuhtor 厂 Umi Spetdto Real-TimeJ-LINK / J -Trace Cottat| C/C+ | AsmSettingsI* Load 申picarion at Startup 审 Run to manQ Initialization Fie:EditRest one Debug: S

9、ession Settin5P Erekpoints匝 Toolbox7 训at占 Windows & PerFomance Analyzer “ Mem ary DisplayLoad Application at Startup 厂 Run :o mainQInitialization FileII Edil 1Restcne Debug Session jettrigsV Bneakpoints两 Toofcox1 Wat di WindowsI? ternary DisplayCPU DLL Parameter SARMCMICLL |Driver DLL:Parameter:|5AR

10、MCM3.DLL |Dialog DLL:ParwnetenDARMSTFOLL |-pSTM32F10-ZEDialog DLL:Parameter:TARM5TM.DLL -pSTM32F1MZEOKCancelDefaultsHelp細 Options for Target uCOS-STM32我使用的是Jlink进行烧写调试,所以选择了如图所示,还要进行settings ,如下:这里要勾选“ Reset and Run ”,这样做的目的是,每当烧写下载后,CPL进行复位并运行。5.Utilities选项设置如下所示:厠 Options for Target uCOS-STM32至此,配

11、置完毕,编译一下,没有错误,创建一个简单的点亮LED程序,验证一下即可。备注说明:如果按照这个步骤操作,编译,如果出现一些简单的错误, 比如没有main函数,没有发现某个头文件,那么按照提示解决即可, 但是如果发现了很多怪怪的编译错误,比如说未定义u32,u8这些符号时,那就要注意一下了,有可能是 MDK版本的问题,我在使用MDK 低版本的时候,发现有问题,而使用高版本的时候就没问题了,所以 需要注意一下。二、 移植 uC/OS-ii 至U STM32F10XL1.首先在官网上下载基于 STM32的移植工程案例,里面的 移植文档AN-1018中是作者写的移植文档,说的很详细, 想要移植的话,多

12、看看这个文档。2.其中有张图,非常重要,其实就是告诉了移植者要做的工作,如下图所示:Your ApplicationAPP.CSection 5APPVECT.CAPPCFG.HTNCLUnES.Hoscra.hpC OSdlBookSection 3Section 6这个图表达了什么信息呢,其实就是告诉移植者需要将那些文件 移植到你的工程当中,首先是uC/OS-ii的源文件,就是OS_CORE、COS_FLAG.C.ucos_ii.H 这些文件,其实是 uC/OS-ii 的 Port 文件, 包括 4 个,分别是 OS_CPU_C.C,OS_CPU_A.ASM,OS_CPU.H,OS_DBG

13、.C,还有是用户应用程序里的包含文件,这个里面不能照搬,选择使用两 个文件,分别为OS_CFG和INCLUDES.H其他三个,可以自己编写, 为什么不套用另外那三个呢,主要是因为那三个文件是针对官方开发 板创建的任务,里面包含的信息量太大,编译的时候,肯定会有大量的错误(因为我们是一直到我们自己的板子) ,所以最好自己写最简 单的,至于怎么写,后面再详细说,可以先建 2 个空文件,分别是 APP.C和APP_CFG.H这两个文件的含义很简单,APP是自己的应用程 序C文件,APP_CFG.是对我们自己的应用程序做的配置文件,看到 这里可能会有个疑问,APP_VECT.C文件怎么处理呢,答案是舍

14、弃, 因为官方提供的案例是自己写启动文件, APP_VECT 文件是向量表, 我们使用的是STM32固件库里的启动代码,所以就不用使用了。BSP部分有两个文件BSP.C和BSP.H这个也建议直接舍弃,这个是官方 文档中针对他们的的开发板写的一些底层的设备驱动, 我们自己的开 发板跟他们的不同,所以根本就没必要要,至此,将刚刚分析的这些 必须的文件加入到上面创建的无操作系统裸板程序中, 进行编译。 肯 定会有很多错误, 下面我们就一一的修改这些错误。 添加到项目后的 文件树,如下图所示::-uCO5-STM32S-O CMSIS*Ul STM盟Flg-tdP命phS-_ Jeer肖卑APP!P

15、includes.hp - Q os_dg.h!一圍 app.c app_cfgrh 百仙 uCDG-IPortjllirii jrJlO5_cpu_3.aniQ5_GpU_G.C團 os_dbg.r曰自 uCOS-ISRC:圍 os_eore.ci zr園 os_flagiC:-團 O5_mbcx .可 cs_mern.c?園 os mutex, cL 園 os_q.ci eI戈1 os seinri匸! i 驹i1_圍 os_taskxi 二”05 time.c 圍 cs_tm r.cD ucasji.h需要注意的是,这其中的app.c和app_cfg.h是自己创建的空的文件,而不是使用官

16、网案例里提供的,如果非要使用官网里面的,那 么只能不停的更正其中的错误啦。下面就是要修改错误的过程了。3修改os_cfg.h这个是配置uCOS-ii系统功能的头文件,根据自己的需要进行裁剪任务吧,我只做了一个修改, 就是-,禁用钩子函数,这是为了防止出现那些所谓的文档中分析的要写的 那几个钩子函数出现错误,禁用钩子函数了,也就不用 写钩子函数了,其他的根据自己需要裁减吧。4. OS_CPU_A.AS文件的修改首先是修改FUSLIC OS_CPU_SR_SftvePU5LI亡 05亡匸R匕已匸口工巴PUBLIC OSScartHighRdyPUBLIC CSCtxSwPUBLIC OSIntCt

17、xSwFrT3LIC O 5_C PU_ P end5 VH andl e rEXPORTOS CPU R SaveEXFCTC5 CFU SR ResvoieEXECRTOSSCartMighRdyEXPORTCSCtxSwEXPORTCSInrCrxSw为EXPORTOS CPU PendSVHandler这样修改的目的,是因为MDK编程环境不认识PUBLIC要用EXPORT.其次是修改:REG CODE!CODE:NOROOI(2为:AREA |.texEI,CCDEFREADONLY,ALIGN=2REQUIRES PRESERS这个也是因为编程环境的问题5.修改 OS_DBG.C修改

18、:tdefine OS COMPILER OPTroot为:碍工g 总仝心,原因也是编程环境的问 题。6修改启动代码这个步骤是移植的核心:上面说的其他的修改,都是一 些附属的格式方面的修改,而启动代码的修改才是移植 的核心,这里简单的分析2个问题,一是,什么叫移植, 二是移植的操作系统如何能够被我们的工程所应用。所谓移植,打一个恰当的比喻一一器官移植,就是将 A的器官移植到B身上,使A的器官能够为B所用。所以移 植绝对不是简单的“复制”,不仅要放到你的工程项目中, 更重要的是要能够和你的项目建立联系。那么uCOS-ii怎么跟STM32建立联系呢?uCOS-ii的核心作用就是任务调度,要使用ST

19、M32的一个 特殊中断一一PendSV就是可挂起系统任务中断,通过 该中断进行系统的调度。还有就是 uCOS-ii需要一个基 准时间,那么STM32中有一个专用的定时器,嘀嗒定时 器SysTick,这个定时器,就是专为操作系统而设计的, 通过这个滴答定时器给uCOS-ii提供一个时间基准,每 隔固定的时间出发一个Pe ndSV中断,进行任务的调度。 所以呢,在官方案例的移植文档AN-1018中也特别提到这一点,要将启动代码中所有“PendSV_Handlef和“SysTick_Handler ”,替换成“OS_CPU_PendSVHandl”r 和 “OS_CPU_SysTickHandle”

20、,这样就相当于将 uCOS-ii 的“神经”跟你的项目的“神经”搭在了一起。7此时编译,发现还有一个错误:exxor:#20:is undcfiacd在uCOS-ii源码中查找OS_TASK_TMR_PR定义,原来这个定义在源码文件app_cfg.h中,如下所示:define OS TASK TMR PRIO(OS LOWEST PRIO - 2)比葫芦画瓢,复制到自己创建的那个空白app_cfg.h中。然后编 译,发现已经还有的错误就是在in cludes.h中,说没有包含一些的头文件,这个把includes.h中对应错误的那些包含头文件代码删掉 即可,这是因为我们没有完全的使用官方案例中的

21、所有文件。至此移植的修改工作告一段落,已经完成。8.创建任务,验证移植效果。这个可以参照源代码中 APP.C进行创建任务,在app_cfg.h中 编写各个任务的配置文件,这里需要注意的是,我们之前创建的裸板 中已经有ma in .c文件,其中已经有 mai n.c函数,所以我们在app.c 中就不必再创建 main函数了,直接在 main函数中初始化uCOS-ii, 然后创建一个任务,或者调用一个函数,在这个任务或者函数中再创 建需要的几个任务即可。案例如下图所示:void() _Led InlD(;OS_CPU_S ys T i c kln i t 门;OSTaslcCreate (taalcLf ivoid *)TASEC1_5TK_5IZE, TASK1_PRJO);05Ta3kCreate(ta31c2, (void *)0,TA5K22sTk2sIEE1 , IASK2PRIO);int main(void) o)OSStatInit();#endif这个,调用了 OSStatlnit ()函数,这个函数的作用是启动统 计CPU占用率的函数,这个不太清楚还有没有其他功能,建议不要使 用,因为我在使用的时候,发现,创建的任务都不能工作了,索性就 不使用,反倒好了。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!