STM32上UCOS-II移植详解:基于CMSIS和PendSV_Handler的实战

需积分: 9 24 下载量 100 浏览量 更新于2024-09-11 收藏 938KB DOCX 举报
本文档详细介绍了如何在STM32F103RBT6微控制器上进行UC/OS-II操作系统移植,针对的是Micrium官方代码,并结合STM32V3.5库。移植过程主要包括以下几个关键步骤: 1. **UC/OS-II文件结构组织**: 首先,创建一个名为`ucosii`的文件夹,将其细分为`src`和`port`子目录。将Micrium官方UC/OS-II源代码复制到`src`,特别是`Source`文件夹,保持其只读属性。`port`目录则存放与STM32特定硬件相关的移植代码,如来自`Generic\RealView`的文件。 2. **处理os_cpu.h和os_cpu_c.c**: 在`os_cpu.h`头文件中,移除关于SysTick的相关声明,因为会使用CMSIS库提供的SysTick处理函数。在`os_cpu_c.c`中,注释掉与SysTick相关的定义和处理函数,因为它们将被替换。 3. **SysTick功能的迁移**: 将`os_cpu.h`中与SysTick相关的函数(如`OS_CPU_SysTickHandler()`、`OS_CPU_SysTickInit()`和`OS_CPU_SysTickClkFreq()`)注释掉,并且在`os_cpu_c.c`中相应地移除代码。不再使用UC/OS-II自带的SysTick管理,转而使用CMSIS库提供的`SysTickhandler()`函数,因为它负责中断处理。 4. **替换PendSV_Handler**: 在`startup_stm32f10x_md.s`文件中,将`PendSV_Handler`替换为`OS_CPU_PendSVHandler`,因为UC/OS-II任务切换依赖于PendSV中断。这一更改确保了中断处理流程与UC/OS-II的期望方式一致。 5. **硬件适配**: 根据STM32F103RB的特性,使用V3.5库提供的`startup_stm32f10x_md.s`替换原有的`startup_stm32f10x_hd.s`,以匹配硬件架构。同时调整工程目录以反映这些更改。 在整个过程中,特别强调了使用CMSIS库以及对中断处理函数的正确配置,这对于UC/OS-II在STM32F103RB上的稳定运行至关重要。移植时需确保所有代码和中断处理逻辑与UC/OS-II的内核调度机制相协调,以便实现任务管理和中断响应。这是一次涉及基础系统设置和硬件适配的复杂移植任务,需要对UC/OS-II和STM32平台有深入的理解。