### KEIL5.23中UCOS-II移植全过程(stm32) #### 一、引言 在嵌入式开发领域,实时操作系统(RTOS)的应用越来越广泛,它能够有效地管理和调度多个任务,使得多任务之间的切换更为高效有序。μC/OS-II作为一款流行的嵌入式实时操作系统,被广泛应用于各种嵌入式系统中。本文主要介绍如何在STM32微控制器上使用KEIL5.23工具链进行μC/OS-II的移植。 #### 二、移植前准备 ##### 1. 安装KEIL5自带的μC/OS-II Pack 在进行移植之前,首先需要确保KEIL5环境已安装包含μC/OS-II的Pack。这一步骤可以通过KEIL5的“Pack Installer”来完成,具体步骤如下: - 打开KEIL5,点击“Options for Target 'Target 1'”->“Target”选项卡,然后选择“Manage Run-Time Environment”。 - 在弹出的新窗口中,点击“Get More Packs...”来获取最新的Pack列表。 - 在搜索框中输入“μC/OS-II”,找到对应Pack并进行安装。 ##### 2. 新建工程及添加组件 新建一个STM32工程,并添加必要的组件。在新建的工程中,通常会有一个“User”文件夹,用于存放用户自定义的代码,例如`main`函数和其他功能函数。 #### 三、核心移植步骤 移植μC/OS-II的核心在于将STM32的内核中断与μC/OS-II的操作系统中断进行关联,主要包括以下两方面: 1. **关联Cortex-M3内核嘀嗒中断与μC/OS-II嘀嗒中断**:内核提供了一个定时中断服务函数`SysTick_Handler()`,而μC/OS-II也有对应的`OS_CPU_SysTickHandler()`函数。移植的关键是让这两个函数协同工作。 2. **关联Cortex-M3内核的pendsv中断与μC/OS-II pendsv中断**:类似地,内核和μC/OS-II分别提供了`PendSV_Handler()`和`OS_CPU_PendSVHandler()`函数。同样地,我们需要将这两个函数关联起来。 为了实现上述关联,有两种常见的方法: - **修改μC/OS-II的文件**:这种方法涉及修改`os_cpu_a.asm`和`os_cpu_c.c`文件,将两个中断服务函数替换为STM32内核提供的版本。 - **修改STM32启动文件**:通过修改`startup_stm32f10x_hd.s`文件中的中断向量表,替换两个中断服务函数。 考虑到KEIL5在添加μC/OS-II系统文件后会将其设置为“只读”,不建议修改操作系统文件。因此,推荐采用第二种方法,即修改STM32的启动文件。 #### 四、启动内核嘀嗒定时器 完成中断向量表的修改后,还需要启动内核的嘀嗒定时器。μC/OS-II和STM32内核均提供了相关的函数,包括: - μC/OS-II提供的`OS_CPU_SysTickInit(INT32U cnts)`。 - STM32内核提供的`SysTick_Config(uint32_t ticks)`和`SysTick_CLKSourceConfig()`。 根据原文描述,在移植过程中使用μC/OS-II提供的函数时遇到了问题,嘀嗒定时器虽然状态正常,但操作系统无法启动。这种情况下,建议使用STM32内核提供的函数。 #### 五、主程序示例 我们来看一下如何在主程序中调用这些函数来启动μC/OS-II: ```c int main(void) { LED_Config(); // 硬件初始化 OSInit(); // 操作系统初始化 OSTick_Init(); // 嘀嗒定时器初始化 OSTaskCreate( // 创建开始任务 startTask, // 任务入口 (void*)0, (OS_STK*)&app_task_start_stk[APP_TASK_START_STK_SIZE-1], APP_TASK_START_PRIO); OSStart(); // 启动操作系统 } void OSTick_Init(void) { RCC_ClocksTypeDef RCC_ClocksStructure; RCC_GetClocksFreq(&RCC_ClocksStructure); // 获取内核时钟 SysTick_Config(RCC_ClocksStructure.HCLK_Frequency / OS_TICKS_PER_SEC); // 启动嘀嗒定时器 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); // 配置嘀嗒定时器时钟 } ``` #### 六、总结 通过以上步骤,我们可以看到在KEIL5.23环境下使用自带组件进行μC/OS-II的移植是非常简单且高效的。整个过程不仅避免了许多复杂的操作,而且使得开发者能够更加专注于应用逻辑的编写。需要注意的是,在实际移植过程中可能会遇到一些未预料的问题,如文中提到的使用μC/OS-II提供的嘀嗒定时器初始化函数导致操作系统无法启动的情况,此时需要灵活调整策略,比如使用STM32内核提供的函数来解决问题。














- qq_272402392019-07-06非常感谢!!
- JS78932019-05-02还可以吧,应该再详细些

- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 浅论网络时代的高校思想政治工作.docx
- Project-Management-Plan-Template-项目管理计划模板.doc
- 项目管理经验交流材料.docx
- 工程认证背景下软件项目管理企业捐课模式分析.docx
- 物联网对计算机通信网络的影响及问题研究.docx
- 计算机在人事管理中的应用.docx
- 论述基层文物保护信息化建设存在的问题与解决对策.docx
- (源码)基于Python的智能家居自动化系统.zip
- 互联网金融企业财务管理中存在的问题及对策.docx
- 第四章企业会计信息化及其流程重组.doc
- 物联网在智慧校园中的应用分析.docx
- 大数据时代企业管理会计的机遇与挑战.docx
- 计算机网络远程控制系统及应用研究.docx
- 互联网+时代高职《外贸英语函电》多模态教学探究.docx
- 下一代通信网络的无线传输技术研究.doc
- 大数据一期课程中的机器学习相关内容


