μcos_II之移植篇
- 格式:doc
- 大小:659.00 KB
- 文档页数:28
实时操作系统μCOS-II在MCF5272上的移植实时操作系统μC/OS-II在MCF5272上的移植摘要:介绍了实时操作系统μC/OS-II的特点和内核结构,并首次实现μC/OS-II在Motorola嵌入式处理器MCF5272上的移值。
关键词:μC/OS-II MCF5272 移植 GNU工具链作为一个实时内核,μC/OS从1992年开始为人们熟悉,到现在已经发展为μC/OS-II。
ΜC/OS-II最多支持56个任务,其内核为占先式,总是执行就绪态的优先级最高的任务,并支持Semaphore(信号量)、Mailbox(邮箱)、Message Queue(消息队列)等多种常用的进程间通信机制。
与大多商用RTOS不同的是,μC/OS-II公开所有的源代码,并可以免费获得,对商业应用收取少量License费用。
一般商用操作系统如VxWorks、pSOS、WinCE,购买费用动辄数万美元,而且每件产品都需要交纳运行费,开发、使用成本高昂。
目前MCF5272是Motorola公司一款集成度最高的ColdFire处理器,采用ColdFire V2可变长RISC处理器核心和DigitalDNA技术,在66MHz时钟下能够达到63Dhrystone2.1MIPS。
其内部SIM (System Integrated Module)单元集成了丰富的通用模块,如10/100MHz快速以太网控制器,USB1.1接口等,并且能够与常用的外围设备(如SDRAM、ISDN收发器)实现无缝连接,从而简化了外围电路设计,降低了产品成本、体积和功耗。
使用GNU工具链(包括交叉编译器GCC、汇编器AS等)进行μC/OS-II内核的编译,Host(宿主机)环境为16MB SDRAM。
在宿主机上编译出MCF5272处理器的可执行代码,通过MCF5272的BDM调试工具下载到目标板调试运行。
1 μC/OS-II系统结构图1说明了μC/OS-II的软硬件体系结构。
μCOS-II在ARM Cortex-M3处理器上的移植摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTA—C)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计滤波器带宽进行控制,并利用ADS软件进行电路设计和仿真验证。
仿真结果表明,该滤波器带宽的可调范围为1~26 MHz,阻带抑制率大于35 dB,带内波纹小于0.5 dB,采用1.8 V电源,TSMC 0.18μm CMOS工艺库仿真,功耗小于21 mW,频响曲线接近理想状态。
关键词:Butte摘要:Cortex-M3是ARM公司最新推出的基于ARMv7-M架构的低功耗处理器。
在深入了解μCOS-II工作原理和Cortex-M3特性的基础上,给出了在STWl32F103ZE处理器上的详细移植过程。
将移植后的μC/OS-Ⅱ操作系统应用于移动多媒体直放站CMMB项目中,验证了移植的成功。
这对于管理硬件资源,缩短开发周期和提高系统稳定性方面有着重要的意义。
关键词:Cortex-M3;μCOS-Ⅱ;移植;嵌入式系统0 引言嵌入式系统已经广泛渗透到了人们工作、生活中的各个领域,嵌入式处理器已占分散处理器市场份额的94%,其中ARM的应用最为广泛。
基于ARM内核的处理器以其诸多优异性能而成为各类产品中选用较多的处理器之一。
当系统越来越大,应用越来越多时,就出现了如何管理众多的硬件资源,以及如何满足系统的实时控制要求和如何提高系统软件开发效率等不可回避的问题。
这时,使用嵌入式操作系统很有必要。
操作系统的主要作用有:统一管理系统资源;为用户提供访问硬件的接口;调度多个应用程序和管理文件系统等。
1 概述μC/OS-II是著名的、源码公开的实时内核,是专为嵌入式应用设计的,可用于各类8位、16位和32位处理器。
μC/OS-II已经在世界范围内得到广泛使用,包括诸多领域,如手机、飞行器、医疗设备及工业控制等。
实际上,μC/OS-II已经通过了非常严格的测试,并且得到了美国航空管理局的认证,可以用在飞行器上。
uCOS-II移值过程实例讲解我将uCOS-II 移植到了EPONS 的C33209的平台上,接下来我就基于我移植好的代码讲解如何将uCOS-II从一种MCU移植到另一种MCU。
首先介绍uCOS-II的文件,如下表:ucos_ii.hos_cfg.hos_cpu.hos_core.cos_dbg_r.cos_flag.cos_mbox.cos_mem.cos_mutex.cos_q.cos_sem.cos_task.cos_time.cucos_ii.cos_cpu_c.cos_cpu_a.asm其中我们和硬件平台相关的文件的文件名被加粗了,也就是说若要将uCOS-II移植到新的平台上只要关心以上四个文件就行了。
当然你也可以根据需要再添加你自己的和平台相关的文件,事实上我也是这么做的。
在我移植的例子中就添加了四个和平台相关的文件,文件如下表:crt0.cdrv_rtc.cvector.cext.scrt0.c是用来初始化系统的比如说MCU的一些特殊寄存器、设置外围的总线接口,等。
drv_rtc.c是用来初始化系统中的一个RTC的,这个RTC可以为内核提供必要的基于时间片调度的时基。
同时提供了对RTC开始和停止的操作函数。
在我的例子中RTC会每秒产生32次中断。
vector.c顾名思义,它是系统上电后为系统提供矢量入口表的文件,当然也包括中断向量表。
ext.s是为uc/OS-II 提供OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()函数的具体实现以及在用户程序的中断函数出入时要调用的状态保护和状态恢复函数OS_SA VEALL ()和OS_RESTOREALL ()。
前面两个函数的功能是:OS_ENTER_CRITICAL()屏蔽中断;OS_EXIT_CRITICAL()恢复原来的中断使能状态。
1. os_cpu_a.asm的说明要想顺利的移植首先要了解uCOS-II的一些基本概念。
μCOS-II 在 S3C44BOX 处理器上的移植 摘要介绍实时操作系统 μ-的特点和内核结构,给出 μ-在嵌入式 3447 微处理器上的移植的步骤及详细相关代码, 同时阐述 μ-在应用中应注意的 问题。
关键词 μ-344 移植实时操作系统 μ-功能强大,支持 56 个用户任务, 其内核为占先式,支持信号量、邮箱、消息队列等多种常用的进程间通信 机制,现已成功应用到众多商业嵌入式系统中,是一个成熟稳定的实时内 核。
与大多商用不同的是,μ-公开所有的源代码,90 的代码使用标准的语 言书写,程序可读性强、移植性好;同时它可免费获得,即使商业应用也 只收取少量的许可费用。
因此,对 μ-实时操作系统的学习研究、开发、应用具有重要意义。
3440 微处理器是三星公司专为手持设备和其它嵌入式应用提供的高 性价比的微控制器解决方案。
它使用公司的 16 位 32 位结构,内核是 7,工作在 66,片上集成了以 下部件 8、外部存储器控制器、控制器、4 个通道、2 个、1 个多主 2 总线 控制器、1 个 2 总线控制器,以及 5 通道定时器和 1 个内部定时器、8 通 道 12 位等,能够与常用的外围设备实现无缝连接,功能强大。
目前,国内应用较为广泛。
范文先生网收集整理 1μ-实时操作系统结构图 1 说明了 μ-的软硬件体 系结构。
应用程序处于整个系统的顶层,每个任务都可以认为自已独占了,因 而可以设计成为一个无限循环。
μ-处理器无关的代码提供了 μ-的系统服务,应用程序可以使用这些函 数进行内存管理、任务间通信及创建、删除任务等。
大部分的 μ-代码是使用语言书写的,因此 μ-的可移植性好,然而仍需 要使用和汇编语言写一些处理器相关代码。
μ-的移植需要满足以下要求①处理器的编译器可以产生可重入代码; ②可以使用调用进入和退出临界区代码; ③处理器必须支持硬件中断, 并且需要一个定时中断源;④处理器需要能够容纳一定数据的硬件堆栈; ⑤处理器需要有能够在寄存器与内核和堆栈交换数据的指令。
实时操作系统μCOS-II在MCF5272上的移植摘要介绍了实时操作系统μ-的特点和内核结构,并首次实现μ-在嵌入式处理器5272上的移值。
关键词μ-5272移植工具链作为一个实时内核,μ从1992年开始为人们熟悉,到现在已经发展为μ-。
Μ-最多支持56个任务,其内核为占先式,总是执行就绪态的优先级最高的任务,并支持信号量、邮箱、消息队列等多种常用的进程间通信机制。
与大多商用不同的是,μ-公开所有的源代码,并可以免费获得,对商业应用收取少量费用。
一般商用操作系统如、、,购买费用动辄数万美元,而且每件产品都需要交纳运行费,开发、使用成本高昂。
目前5272是公司一款集成度最高的处理器,采用2可变长处理器核心和技术,在66时钟下能够达到6321。
其内部单元集成了丰富的通用模块,如10100快速以太网控制器,11接口等,并且能够与常用的外围设备如、收发器实现无缝连接,从而简化了外围电路设计,降低了产品成本、体积和功耗。
使用工具链包括交叉编译器、汇编器等进行μ-内核的编译,宿主机环境为16。
在宿主机上编译出5272处理器的可执行代码,通过5272的调试工具下载到目标板调试运行。
1μ-系统结构图1说明了μ-的软硬件体系结构。
应用程序处于整个系统的顶层,每个任务都可以认为自己独占了,因而可以设计成为一个无限循环。
μ-处理器无关的代码提供μ-的系统服务,应用程序可以使用这些函数进行内存管理、任务间通信以及创建、删除任务等。
范文先生网收集整理大部分的μ-代码是使用语言书写的,因此μ-的可移植性较好。
尽管如此,仍然需要使用和汇编语言写一些处理器相关的代码。
μ-的移植需要满足以下要求1处理器的编译器可以产生可重入代码;2可以使用调用进入和退出临界区代码;3处理器必须支持硬件中断,并且需要一个定时中断源;4处理器需要能够容纳一定数据的硬件堆栈;5处理器需要有能够在寄存器与内存和堆栈交换数据的指令。
移值μ-的主要工作就是处理器和编译器相关代码以及的编写。
ucosii在stm32上的移植详解虽然目前网上已经有不少关于ucosii在stm32上的移植版本,包括micrium也有官方移植版本。
但这些版本具体是怎么移植出来的,又该怎么基于移植好的ucosii 开发应用软件,网上介绍的并不多。
这里介绍一下我的移植经历,希望对大家有所帮助。
我的移植基本上是从零开始的。
首先想要做好移植,有两方面的内容是必须要了解。
1.目标芯片;2.ucosii内核原理。
虽然我们移植的目标芯片是stm32,但操作系统的移植基本是针对Cortex-M3内核(以下简称CM3)而言的,所以我们只需了解CM3内核就好了。
stm32芯片就是CM3内核加上各种各样的外设。
怎么才能了解CM3呢?看一本书<<ARM Cortex-M3权威指南>>(宋岩译,网上多的很)就好了,很多同学可能想,看完这本书移植的新鲜劲都没了,因此我把该书和移植有关的章节都列了出来,并对其中的重点内容进行介绍,我数了数相关章节还不到100页,就这点内容,总要看了吧。
相关章节如下:chapter2 Cortex-M3概览2.1 - 2.9主要了解Cortex-M3的概貌。
刚开始看时不用追求全部理解,后面会有详细介绍,很多内容多看几遍就明白。
其中2.8 指令集,只要了解,CM3只使用thumb2就ok了。
chapter3 Cortex-M3基础3.1 寄存器组R0-R12: 通用寄存器R13: 堆栈寄存器有两个,MSP和PSP,同时只能看见一个引用R13时,引用的是正在使用的那个MSP:可用于异常服务和应用程序PSP:只能用于应用程序系统复位后,用的堆栈指针是MSP。
R14: 连接寄存器,又名LR,存储返回地址R15: 程序计数寄存器,又名PC3.2 特殊功能寄存器程序状态字寄存器组(PSRs)中断屏蔽寄存器组(PRIMASK, FAULTMASK, BASEPRI)控制寄存器(CONTROL)程序状态字寄存器组(PSRs)分为应用程序 PSR(APSR)中断号 PSR(IPSR)执行 PSR(EPSR)每个都是32位,由于这3个寄存器有效位是错开的,因此可以组合访问。
/**Author:Callon Huang*Version:1.0*Time:2014/11/5*blog:/u/2451220761*/希望博客也能帮到你~第一步:μcosII源码下载/downloadcenter/STM32固件库stm32f10x_stdperiph_lib.zip的下载第二步:新建文件夹,并准备子目录:其中Software是μcosII源码下载完成后拷贝过来的,其它的都自己新建.App 用来存放应用程序文件,Bsp 用来存放版级驱动文件,Lib 用来存放 STM32 的标准外设库文件,Source 用来存放uCOS 文件第三步:把Software里的uCOS-II、uC-LIB和uC-CPU文件夹到Source里并把后两者拷贝到uCOS-II文件夹里,最后如下:第四步:找到Software\EvalBoards\ST\STM32F103ZE-SK\IAR下的BSP文件夹,复制到Source文件夹下第五步:找到Software\EvalBoards\ST\STM32F103ZE-SK\IAR下的OS-Probe-LCD文件夹,复制到Source文件夹下并改名为APP第六步:解压下载好的stm32f10x_stdperiph_lib.zip固件库:找到stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Librari es\STM32F10x_StdPeriph_Driver下的inc和src文件夹并复制到Lib 文件夹下第七步:复制stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Librari es\CMSIS下的CM3文件夹到Lib文件夹下第八步:删除一些不需要的文件:APP文件夹只需要:BSP文件夹只需要:在Software\CPU\ST\STM32里也有inc和src文件夹,但是比STM32固件库的要多两个文件stm32f10x_systick.c和stm32f10x_systick.h把这两个文件拷贝到SysTick文件夹下.第九步:建立工程my_ucosII,把所有的.c文件和.asm文件都加进来:‘第十步:对工程进行一些设置:Device就不用说了;Target不变;Output勾选上Create HEX File,并在里选择Obj文件夹;C/C++中添加头文件所在路径,否则会出现大量如下编译错误:头文件路径:Libraries文件夹是这三个最后这部分全部设置好后,如下:最后总体设置完如下:Debug里最后下载程序的时候,如果碰到MDK中出现“Error Flash download failed-Cortex-M3”错误,可以通过上面的添加On-chip-Flash来解决。
其他没提的就不改变;此时先修改部分代码做到最简化:app.c:#include "stm32f10x_conf.h"#include <os_cfg.h>#include <ucos_ii.h>#include <bsp.h>#define STARTUP_TASK_PRIO 4#define LED1_TASK_PRIO 6#define STARTUP_TASK_STK_SIZE 80#define LED1_TASK_STK_SIZE 80OS_STK startup_task_stk[STARTUP_TASK_STK_SIZE];OS_STK led1_task_stk[LED1_TASK_STK_SIZE];static void systick_init(void){RCC_ClocksTypeDef rcc_clocks;RCC_GetClocksFreq(&rcc_clocks);SysTick_Config(rcc_clocks.HCLK_Frequency/OS_TICKS_PER_SEC);}void led1_task(void *p_arg){while(1){LED1_ON();OSTimeDlyHMSM(0,0,1,0);LED1_OFF();OSTimeDlyHMSM(0,0,1,0);}}void startup_task(void *p_arg){systick_init();OSTaskCreate(led1_task,(void*)0,&led1_task_stk[LED1_TASK_STK_SIZE-1],LED1_TASK_PRIO) ;GPIO_SetBits(GPIOF,GPIO_Pin_7);while(1){LED2_ON();OSTimeDlyHMSM(0,0,0,500);LED2_OFF();OSTimeDlyHMSM(0,0,0,500);}}int main(void){led_config();OSInit();OSTaskCreate(startup_task,(void*)0,&startup_task_stk[STARTUP_TASK_STK_SIZE-1],ST ARTUP_TASK_PRIO);OSStart();return 0;}bsp.c:#include "stm32f10x_conf.h"void led_config(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //板上LED编号D5GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOF, &GPIO_InitStructure);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //板上LED编号D5 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOF, &GPIO_InitStructure);}打开bsp.h修改为:#ifndef __BSP_H__#define __BSP_H__#define LED1_ON() GPIO_SetBits(GPIOF,GPIO_Pin_6)#define LED1_OFF() GPIO_ResetBits(GPIOF,GPIO_Pin_6)#define LED2_ON() GPIO_SetBits(GPIOF,GPIO_Pin_7)#define LED2_OFF() GPIO_ResetBits(GPIOF,GPIO_Pin_7)void led_config(void);#endif现在可以下编译试试,会出现很多很多问题:No.1:原因是因为stm32f10x_conf.h需要包含的很多头文件没有包含,如没有包含stm32f10x_gpio.h,当然就会很多东西没有定义,我们彻底修改一下stm32f10x_conf.h:#ifndef __STM32F10x_CONF_H#define __STM32F10x_CONF_H/* Includes ------------------------------------------------------------------*//* Uncomment/Comment the line below to enable/disable peripheral header file inclusion *///#include "stm32f10x_adc.h"//#include "stm32f10x_bkp.h"//#include "stm32f10x_can.h"//#include "stm32f10x_cec.h"//#include "stm32f10x_crc.h"//#include "stm32f10x_dac.h"//#include "stm32f10x_dbgmcu.h"//#include "stm32f10x_dma.h"//#include "stm32f10x_exti.h"//#include "stm32f10x_flash.h"//#include "stm32f10x_fsmc.h"#include "stm32f10x_gpio.h"//#include "stm32f10x_i2c.h"//#include "stm32f10x_iwdg.h"//#include "stm32f10x_pwr.h"#include "stm32f10x_rcc.h"//#include "stm32f10x_rtc.h"//#include "stm32f10x_sdio.h"//#include "stm32f10x_spi.h"//#include "stm32f10x_tim.h"//#include "stm32f10x_usart.h"//#include "stm32f10x_wwdg.h"#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ #ifdef USE_FULL_ASSERT#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) void assert_failed(uint8_t* file, uint32_t line);#else#define assert_param(expr) ((void)0)#endif /* USE_FULL_ASSERT */#endif /* __STM32F10x_CONF_H *//******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/上面的stm32f10x_xxx.h,当你需要用到相应功能时再包含即可,这里只是点亮led灯.No.2:..\Libraries\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h(96): error: #35: #error directive: "Please select first the target STM32F10x device used in your application (in stm32f10x.h file)"如果出现上述错误是需要修改stm32f10x.h配置芯片类型:打开 stm32f10x.h 文件,在大约的 66-73 行,根据所选芯片类型,去掉相应注释。