下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、前言:说点废话,网上有很多关于 uCOS-ii 移植的文章,好多都是千篇一律,理论性 很强,分析了一大堆虚头巴脑的东西,真想问他们,你确定你分析的这些东西是需 要你做的工作吗?实操性严重欠缺。 。这方面我也走了很多弯路,下面就将自己的 移植过程一步步的记录下来,也给大家做做参考。首先,简单总结一下移植的大概过程 :(1)去uC/OS-ii官网下载你要移植芯片 CPU的相关案例,不一定完全对应, 那就找相应系列吧。(2)编程环境一般有两种,分别是 IAR和MDK这个根据你自己的编程环境 进行下载。(3)本案例需要将uC/OS-II移植到STM32F103ZET上,而我使用的编程环 境是MDK很遗
2、憾,官网上提供的案例是基于IAR的,所以要基于IAR的 案例进行更改。(4)使用MDKJ建一个无操作系统的最简单程序,确保这个程序能够使用,这样做的目的是为了一步步的排查错误, 假如无操作系统时, 都有错误, 移植过程中也肯定会有编译错误,那么在排查错误的时候也就增加了难 度,不会写物操作系统的简单程序怎么办。 。那就不要往下看了。(5)移植的最大的改动主要有两部分,一个是一些头文件的增减,另外一个就是向量表中 PendSV_Handler 和 SysTick_Handler 的修改。这里我要吐槽一下,网上说了一大堆关于什么OS_CPU.啲更改还有各种函数的的分析,这都是扯淡。 。这些根本就不
3、用移植者去修改,官网提供的案 例都已经提供了,除非你选择移植的 CPU是比较偏的,那么这些东西需 要移植者自己去编写。好了,下面就开始详细的记录怎么去移植。一、 创建一个无操作系统的简单裸板系统1 创建源文件工程文件夹,如下图所示:其中文件夹“ CMSIS为内核的接口,包含的文件如下图文件夹STM32_StdPeriph为固件驱动文件夹,这个把 STM32的固件全都添加进去即可。文件夹 User 为其他文件,如下图所示:文件夹 Output 和 List 主要是放那些编译产生的乱七八糟的文件,为了使工程代码更加简洁。2. 使用MDK创建无操作系统工程项目, 这一点就不一一说了,将创建后的工程
4、项目文件树截图如下:这个时候还没有 main 文件,那么创建一个 mian.c 文档即可,这里需要注意, 创建 main.c 后,要将其添加到项目中才行,而不是简单的保存。如下图所示: 、注意: main.c 中要有一个 mian 函数,否则编译器会报错提示你的。然后就是 项目的配置,这个还是很重要的,下面分别说需要配置的地方:( 1) Output 选项如下:这里面勾选了 Create HEXFile 选项,同时将项目输出放到了之前创建的 Output 文 件夹。( 2) List 选项,将 List 产生的文件放入到之前创建的 List 文件夹中。(3) C/C+配置选项如下:其中Defi
5、ne选项中,填入:USE_STDPERIPH_DRIVER,STM32F10X_这是告诉编译器,使用标准外设,还有选择的CPU类型,其中CPU类型需要根据你选择移植的CPU进行适当的更改。 Include Paths 是要包含的头文件路径,这个为了保险,将项目 中的所有有 .h 的文件的文件夹都包含进去就可以了。4.Debug 选项如下:6 Options for Target 'uCOS-STM32Device | Target | Chitput | Listing: User' Use Smuiatcr厂 Limi Speed ts Fteal-Tin®| C/
6、C+ | Asm | LinkerSitingsu:Ikbii召 | Vtilities局 Lx)dd phcsion at Startup 丽 Ruo to mainQ Inrtilization File:IEdit|Restore Debuc Season Stin-gs顾 Breakpoints匝 Toolbox7 Watch VWndows 咅 Pewmarnce Anaer両 Memory HspAay硬 Load Apphcstior 岂 Startup 厂 ftjn to mainQInrfi韵空甜on File:|,|Ed*. |Restore Debug Session S
7、ettingsV Breakpoints中 Tootbox硬 Watch Windows 庄 Memory Disp ayCPU DLL:Parameter'SARMCM3.DLL |Driver DLL:Parameter:|5ARMCM3.DLL |Dialog DLLParameteriDARMSTMLL |-pSTM32F1D3ZEDialog DLL:Perarrieter:TARMSTM.DLL |-pSTM32FW32EOKCatiCIBefailtsHelp,我使用的是Jlink进行烧写调试,所以选择了如图所示,还要进行settings ,如下:这里要勾选“ Reset
8、 and Run ”,这样做的目的是,每当烧写下载后,CPU进行复位并运行。5.Utilities 选项设置如下所示:至此,配置完毕,编译一下,没有错误,创建一个简单的点亮LED程序,验证一下即可。备注说明:如果按照这个步骤操作,编译,如果出现一些简单的错误,比如没有main 函数,没有发现某个头文件,那么按照提示解决即可,但是如果发现了很多怪怪的编译错误,比如说未定义 u32,u8这些符号时,那就要注意一下了,有可能是MDK版本的问题,我在使用 MDK低版本的时候,发现有问题,而使用高版本的时候就没问题了,所以需要注意一下移植 uC/OS-ii 至U STM32F10XL1. 首先在官网上下
9、载基于 STM32的移植工程案例,里面的移植文档 AN-1018中是作者写的移植文档,说的很详细,想要移植的话,多看看 这个文档。2. 其中有张图,非常重要,其实就是告诉了移植者要做的工作,如下图 所示:这个图表达了什么信息呢,其实就是告诉移植者需要将那些文件移植至你的工 程当中,首先是 uC/OS-ii 的源文件,就是 OS_CORE.、COS_FLAG.Cucos_ii.H这些文件,其实是 uC/OS-ii 的 Port 文件,包括 4 个,分别是 OS_CPU_C.C,OS_CPU_A.ASM,OS_CPU.H,OS_DBG有是用户应用程序里的包含文件, 这个里面不能照搬,选择使用两个文
10、件,分别为OS_CFG.H和INCLUDES.H其他三个,可以自己编写,为什么不套用另外那三个呢,主要是因为那三个文件是针对官 方开发板创建的任务,里面包含的信息量太大,编译的时候,肯定会有大量的错误 (因为我们是一直至我们自己的板子) ,所以最好自己写最简单的,至于怎么写,后 面再详细说,可以先建 2个空文件,分别是 APP.C和APP_CFG.H这两个文件的含义 很简单,APP是自己的应用程序 C文件,APP_CFG.hH对我们自己的应用程序做的配 置文件,看到这里可能会有个疑问,APP_VECT.(文件怎么处理呢,答案是舍弃,因为官方提供的案例是自己写启动文件,APP_VECT.C文件是
11、向量表,我们使用的是STM32固件库里的启动代码,所以就不用使用了。BSF部分有两个文件BSP.C和BSP.H, 这个也建议直接舍弃,这个是官方文档中针对他们的的开发板写的一些底层的设备 驱动,我们自己的开发板跟他们的不同,所以根本就没必要要,至此,将刚刚分析的这些必须的文件加入到上面创建的无操作系统裸板程序中,进行编译。肯定会有很多错误,下面我们就一一的修改这些错误。添加到项目后的文件树,如下图所示:需要注意的是,这其中的 app.c和app_cfg.h是自己创建的空的文件,而不是 使用官网案例里提供的,如果非要使用官网里面的,那么只能不停的更正其中的错 误啦。下面就是要修改错误的过程了。3
12、. 修改os_cfg.h这个是配置uCOS-ii系统功能的头文件,根据自己的需要进行裁剪任务吧,我只做了一个修改,就是卡矗徐庶OS_APP_HOOKS_EN0,禁用钩子函数,这是为了防止出现那些所谓的文档中分析的要写的那几个钩子函数出现错误,禁用钩子函数了,也就不用写钩子函数了,其他的根据自己需要裁减吧。4. OS_CPU_A.AS文件的修改首先是修改PUBLIC CS_匚FUSESave PUBLIC匸工巴PUBLI亡 OSScarcHighRdyPUBLIC CSCtxSwPUBLIC CSIntCtxSwEU3LIC OSCPPendSVandler为EXPORT 05 CPU SR S
13、aveEXECRT CFU2SRR匸svoieEXECRT OS5CartHigLRdy EXPORT OSCtxSwEXPORT OSIntCratSwEXPORT CS CPU FendSVBandler这样修改的目的,是因为 MDK编程环境不认识PUBLIC要用EXPORT.其次是修改:为:这个也是因为编程环境的问题。5. 修改 OS_DBG.C“-:-OS COME 工匸 ER OPTrcot修改:-_为:加曲艮* 券际心叮,原因也是编程环境的问题。6. 修改启动代码这个步骤是移植的核心:上面说的其他的修改,都是一些附属的格式方面的修改,而启动代码的修改才是移植的核心,这里简单的分析2
14、个问题,一是,什么叫移植,二是移植的操作系统如何能够被我们的 工程所应用。所谓移植,打一个恰当的比喻一一器官移植,就是将A的器官移植到B身上,使A的器官能够为B所用。所以移植绝对不是 简单的“复制”,不仅要放到你的工程项目中,更重要的是要能够和你 的项目建立联系。那么 uCOS-ii怎么跟STM32建立联系呢?uCOS-ii的核心作用就是任务调度,要使用STM32的个特殊中断一一PendSV就是可挂起系统任务中断,通过该中断进行系统的调度。还 有就是uCOS-ii需要一个基准时间,那么 STM32中有一个专用的定时 器,嘀嗒定时器SysTick,这个定时器,就是专为操作系统而设计的, 通过这个
15、滴答定时器给 uCOS-ii提供一个时间基准,每隔固定的时间 出发一个PendSV中断,进行任务的调度。所以呢,在官方案例的移植 文档AN-1018中也特别提到这一点,要将启动代码中所有“ PendSV_Handler” 和“ SysTick_Handler ”,替换成“OS_CPU_PendSVHandl§r 和“ OS_CPU_SysTickHandler” 这样就相当于将 uCOS-ii 的“神经”跟你的项目的“神经”搭在了一起。7. 此时编译,发现还有一个错误:在uCOS-ii源码中查找 OS_TASK_TMR_PRO义,原来这个定义在源码文件 app_cfg.h 中,如下所
16、示:比葫芦画瓢,复制到自己创建的那个空白 app_cfg.h 中。然后编译,发现已经 还有的错误就是在 includes.h 中,说没有包含一些的头文件,这个把 includes.h 中对应错误的那些包含头文件代码删掉即可,这是因为我们没有完全的使用官方案 例中的所有文件。至此移植的修改工作告一段落,已经完成。8. 创建任务,验证移植效果。这个可以参照源代码中 APP.C进行创建任务,在app_cfg.h中编写各个任务的 配置文件,这里需要注意的是,我们之前创建的裸板中已经有 main.c 文件,其中已 经有 main.c 函数, 所以我们在 app.c 中就不必再创建 main 函数了, 直接在 main 函 数中初始化 uCOS-ii ,然后创建一个任务,或者调用一个函数,在这个任务或者函 数中再创建需要的几个任务即可。案例如下图所示:其中需要注意的是,在创建的第一个任务里,一定要先初始化嘀嗒定时器,这个是 仿照官方案例中的代
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 互联网的试题及答案
- 无人机智能导航定位技术升级方案
- 物流场地临时使用免责协议书
- 2026年航空工业招聘笔试准备指南
- 2026年农村宅基地分户条件认定题库
- 2026年国际化产品经理面试跨文化
- 2026年大学生士兵提干考试准备与职业发展前景
- 2026年街道未成年人防溺水安全知识题
- 2026年妇联执委作用发挥工作机制与联系群众及议事建言及领办项目考核
- 2026年逻辑推理能力提升训练题集
- 2026贵州南方乳业股份有限公司管理类岗位第一批次招聘33人考试参考题库及答案解析
- 2025年电工考试试题及答案详解
- 2026年固态变压器(SST)项目可行性研究报告
- 基坑工程监测专项技术方案
- 2025-2026统编版二年级语文下册第四单元素养达标(A卷)(含答案)
- 汉中职业技术学院2025年招聘辅导员试题及答案
- 2026年个人查摆问题及整改措施清单
- 少年宫教师培训制度
- 液氧储罐安全知识培训课件
- 新污染物治理培训课件
- 2025年高中信息技术考试试题及答案
评论
0/150
提交评论