uCOSII在STM32上的移植
- 格式:pdf
- 大小:310.17 KB
- 文档页数:5
stm32f103 ucos ii移植目录stm32f103 ucos ii移植 (1)1.1 ucOS源码获得 (1)1.2 移植步骤 (5)1.2.1 裸机工程准备 (5)1.2.2 复制相关ucos 移植文件 (5)1.2.3 添加ucos源码和移植cpu相关源码。
(6)1.2.4 添加ucos源码和移植cpu相关头文件路径 (14)1.2.5 编译纠错 (15)1.2.6 修改裸机的main()函数,实现ucos编程模板。
(22)1.2.7测试系统是否能正常工作。
(30)1.3附录相关源码工程 (31)1.1ucOS源码获得登陆ucos官方网站/,如下所示:点击网站上方的Login/Registration ,进行登陆或注册一个新帐号。
如果没有帐号要先注册一个,注册过程不再描述。
我已经有帐号,直接登陆。
Xin Ying Da Electronics Co., Ltd. 1 / 32ZHIFA CHENXin Ying Da Electronics Co., Ltd.2 / 32 ZHIFA CHEN点击后转入登陆界面,网址是/wp-login.php , 直接输入这个进行登陆也可以,界面如下:在这个界面中输入用户名和密码,点击Log In,即可以进入,登陆后可以下载网站上的免费资源。
Xin Ying Da Electronics Co., Ltd. 3 / 32ZHIFA CHEN点击上面的“Downloads Center ”,进入下载页面。
点击” STMicroelectronics ” ,进入ST 公司芯片的ucos 工程下载页面。
点击上面的下载图标后,可以下载到ucos 工程代码,名字是Micrium_STM32xxx_uCOS-II.exe ,这是一个自解Xin Ying Da Electronics Co., Ltd.4 / 32 ZHIFA CHEN压的文件,双击解压。
a COSII在STM32处理器上的移植目前,嵌入式技术已被广泛应用到汽车电子、无线通信、数码产品等各个领域。
嵌入式操作系统及嵌入式处理器技术发展迅猛,嵌入式操作系统典型代表有aCOS—II 、aClinux 、Winclow CE、VxWorks 等;嵌入式处理器包括ARM、MIPS PowerPC等。
随着软硬件技术的发展,人们开始意识到基于嵌入式操作系统的程序开发模式的便利性及可靠性,并且在程序开发过程中开始倾向于从传统超循环开发模式转向基于嵌入式操作系统的开发模式。
1软硬件开发环境及处理器介绍1.1 软件硬开发环境本移植过程使用的软件环境是RealView MDK开发套件,此产品是ARM公司最新推出的针对各种嵌入式处理器的软件开发工具,该开发套件功能强大,包括了aVision3 集成开发环境和RealView 编译器。
使用的硬件平台是深圳英蓓特公司推出的全功能评估板STMI03V100,其上所采用的处理器是ST意法半导体公司生产的32位哈佛结构ARM处理器STM32F1O3VBT0该处理器内置ARM公司最新的Cortex —M3核,并且具有非常丰富的片上资源。
1.2关于基于Cortex-M3的ARM处理器的介绍基于Cortex —M3核的ARM处理器支持两种模式,分别称为线程模式和处理模式。
程序可以在系统复位时或中断返回时两种情况下进入线程模式,而处理模式只能通过中断或异常的方式来进入。
处于线程模式中代码可以分别运行在特权方式下和非特权方式下。
处于处理模式中的代码总是运行在特权方式下。
运行在特权方式下的代码对系统资源具有完全访问权,而运行在非特权方式下的代码对系统资源的访问权受到一定限制。
处理器可以运行在Thumb 状态或Debug状态。
在指令流正常执行期间,处理器处于Thumb状态。
当进行程序调试时,指令流可以暂停执行,这时处理器处于Debug状态。
处理器有两个独立的堆栈指针,分别称为MSF和PSP系统复位时总是处于线程模式的特权方式下,并且默认使用的堆栈指针是MSP本移植过程中假设任务总是运行在线程模式的特权方式下且总是使用堆栈指针PSP 2移植过程详解2.1 aCOS-II 内核介绍aCOS—II 是一个实时可剥夺型操作系统内核,该操作系统支持最多64 个任务,但每个任务的优先级必须互不相同,优先级号小的任务比优先级号大的任务具有更高的优先级,并且该操作系统总是调度优先级最高的就绪态任务运行。
UC/OS-II 2.92移植在STM32F4xx单片机在Micrium官网上注册一个账号下载UC/OS-II 2.92源代码。
在MDK4.25中搭建UC/OS-II 2.92工程文件结构如下图所示
修改OS_CPU.H文件
作用:主要定义数据类型、处理器相关代码、声明函数原型。
主要做了一下修改如下图所示
由于自己编写Systick定时器相关代码即屏蔽掉上图所示的与Systick定时器相关的函数。
由于stm32f4xx_it.c中PendSV的中断已经定义因此在上图中屏蔽OS_CPU_PendSVHandler(void)函数。
修改OS_CPU_C.C文件
主要做了以下修改
屏蔽掉与Systick定时器相关的宏定义
屏蔽掉下面两个与Systick定时器相关的函数
编写用户HOOKS钩子函数如下图所示
修改OS_CPU_A.ASM文件
因为编译器的原因将下面的PUBIC改为EXPORT如下图所示
修改后的如下图所示
由于我们屏蔽掉了OS_CPU.H中的OS_CPU_PendSVHandler(void)函数所以在这里要将PendSV的中断函数修改为PendSV_Handler。
修改下面的语句
修改后如下图所示
将下面的语句进行修改
修改之后如下图所示
对所用到的外设进行初始化
编写系统Systick定时器的初始化程序
编写LED口初始化程序
编写bsp.h文件
编写app.c文件
编写main函数
编写开始任务
编写APP_CFG_H文件
编译。
STM32上⾯运⾏UCOSII的步骤1、移植 UCOSII要想 UCOSII 在 STM32 正常运⾏,当然⾸先是需要移植 UCOSII。
ALIENTEK 提供的 SYSTEM ⽂件夹⾥⾯的系统函数直接⽀持 UCOSII,只需要在 sys.h ⽂件⾥⾯将: SYSTEM_SUPPORT_UCOS 宏定义改为 1,即可通过 delay_init 函数初始化 UCOSII 的系统时钟节拍,为 UCOSII 提供时钟节拍。
2、编写任务函数并设置其堆栈⼤⼩和优先级等参数。
编写任务函数,以便 UCOSII 调⽤;设置函数堆栈⼤⼩,这个需要根据函数的需求来设置;堆栈字节对齐的问题,如果任务运⾏出现莫名其妙的错误(⽐如⽤到 sprintf 出错),请考虑是不是字节对齐的问题。
设置任务优先级,这个需要⼤家根据任务的重要性和实时性设置,记住⾼优先级的任务有优先使⽤ CPU 的权利。
3、初始化 UCOSII,并在 UCOSII 中创建任务调⽤ OSInit,初始化 UCOSII,通过调⽤ OSTaskCreate 函数创建我们的任务。
4、启动 UCOSII调⽤ OSStart,启动 UCOSII。
通过以上 4 个步骤, UCOSII 就开始在 STM32 上⾯运⾏了,这⾥还需要注意我们必须对os_cfg.h 进⾏部分配置,以满⾜我们⾃⼰的需要。
软件设计1、在⼯程源码下⾯加⼊ UCOSII ⽂件夹,存放 UCOSII源码(我们已经将 UCOSII源码分为三个⽂件夹:CORE、PORT和 CONFIG)。
打开⼯程,新建 UCOSII-CORE、 UCOSII-PORT 和 UCOSII-CONFIG 三个分组,分别添加UCOSII 三个⽂件夹下的源码,并将这三个⽂件夹加⼊头⽂件包含路径:UCOSII-CORE 分组下⾯是 UCOSII 的核⼼源码,我们不需要做任何变动。
UCOSII-PORT 分组下⾯是我们移植 UCOSII 要修改的 3 个代码,这个在移植的时候完成。
STM32F407在IAR环境下移植Ucos-II第一步:安装IAR for ARM。
第二步:建一个文件夹,最好用工程名命名。
第三步:在新建的文件夹下面建7个文件夹,分别是:app、bsp、libraries、Project、si、ucos-ii、user,建好的文件夹见下图(图一):图 1第四步:准备好STM32F4XX的固件库。
见图二、图三:图 2图 3第五步:准备好uCOS-II源码。
我的源码路径为:E:\项目文件\电阻焊控制器V2\参考资料\ucos源码\Micrium\Software\uCOS-II;见图4、图5、图6、图7、图8:图 4图 5图 6图7图8第六步:将第四步中准备好的stm32固件库里libraries下的文件拷贝到工程文件夹下的libraries文件夹里。
第七步:将第五步中准备好的uCOS-II源码文件夹里的Ucos-II文件夹中的ports、source两个文件夹拷贝到工程文件夹下的ucos-ii文件夹中。
图9第八步:打开IAR,file—new—workspace先建一个工作空间。
第九步:建立一个工程,project—create new project,在工程文件管理器中新建组,右键单击工程名—add—add group,并给每个组添加相应的文件(右键单击工程名—add—add file);添加好文件的窗口如下图:图10第10步:IAR配置,右键单击工程名—options,跳出如下图所示窗口:图111、在General Options项中的Device中选择芯片,其他项默认值OK;2、在library configuration页中的library选择Full,否则会编译会保错,将右下角的Use CMSIS勾上。
其他项保持默认值。
图123、在C/C++ Compiler项中的Preprocessor也中添加头文件路径($PROJ_DIR$\表示工程路径,$PROJ_DIR$\..\是工程路径的父目录),并添加宏定义(USE_STDPERIPH_DRIVER、STM32F10X_HD),添加好的窗口见下图:图134、在Linker项中的cofig页中☑Override default。
基于Keil移植Ucosii到STM32F103RC中一、资源准备1.STM32F10x标准库:STM32F10x_StdPeriph_Lib_V3.5.02.Ucosii源码库:2.86版本3.开发工具:Keil4.STM32F103RC芯片开发板。
二、STM32F10x标准库移植1.建立工程文件夹STM32F10x_Ucosii_Keil2.建立子文件夹:CMSIS、STM32F10x_StdPeriph_Driver、Ucosii、Project。
如下:3.将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x中的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h三个文件拷贝到CMSIS文件夹;4.将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm中的startup_stm32f10x_hd.s文件拷贝到CMSIS文件夹;5.将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template中的main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h三个文件拷贝到User文件夹;6.将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver中的文件夹及其文件全部拷贝到STM32F10x_StdPeriph_Driver中。
三、Ucosii源代码移植1.在Ucosii文件夹下建立子文件夹ports、source。
2.将Micrium\Software\uCOS-II\Ports\ARM-Cortex-M3\Generic\RealView中的os_cpu.h、os_cpu_a.asm、os_cpu_c.c、os_dbg.c四个文件拷贝到Ucosii\ports文件夹中。