uCOS 移植
下载uCOS源码
uCOS官网:https://www.silabs.com/developer-tools/micrium
Github仓库:https://github.com/weston-embedded/uC-OS3
实验所需uCOS源码:https://wwrx.lanzoum.com/iFtsE2vhvezg
正点原子开发指南:https://wwrx.lanzoum.com/i6IgV2vh99kj
本次实验源码:https://wwrx.lanzoum.com/i3cyK2vquoze
HAL基本工程
stm32cubemx建立cmake工程,打开串口1,板载LED。


生成MDK工程
程序测试
重写printf函数
[printf]测试
在main.c中引用<stdio.h>,并在while函数中添加以下代码:
1 | HAL_Delay(500); |
编译并下载
打开串口助手,led每500ms闪烁

移植uCOS
引用.c文件
在工程目录下新建文件夹uCOS。

打开基础工程,新建四个分组,分别为 uCOS/BSP、uCOS/CPU、uCOS/LIB 和 uCOS/OS,如下图所示:

uCOS/BSP
uC-CPU/BSP/Template/bsp_cpu.c
uC-OS3/Template/bsp_os_dt.c

uCOS/CPU
uC-CPU/ARM-Cortex-M/ARMv7-M/ARM/cpu_a.asm
uC-CPU/ARM-Cortex-M/ARMv7- M/cpu_c.c
uC-CPU/cpu_core.c

uCOS/LIB
uC-LIB/lib_ascii.c
uC-LIB/lib_math.c
uC-LIB/lib_mem.c
uC-LIB/lib_str.c

uCOS/OS
uC-OS3/Cfg/Template/os_app_hooks.c
uC-OS3/Ports/ARM-Cortex-M/ARMv7- M/ARM/os_cpu_a.asm
uC-OS3/Ports/ARM-Cortex-M/ARMv7-M/os_cpu_c.c
uC-OS3/Source目录下除__dbg_uCOS-III.c外的所有 C 源文件

添加.h文件

替换中断服务函数
在 µC/OS-III 的移植过程中会遇到两个重要的中断,分别为 SysTick 中断和 PendSV 中断, 这两个中断分别用于为 µC/OS-III 内核提供时基和任务切换。HAL 库会默认定义 SysTick 和 PendSV 的中断服 务函数,因此在移植 µC/OS-III 的时候,需要将 HAL 库默认定义的 SysTick 和 PendSV 中断服 务函数,替换为 µC/OS-III 提供了中断服务函数。
将启动文件中的PendSV_Handler和SysTick_Handler 修改为OS_CPU_PendSVHandler和OS_CPU_SysTickHandler。分别在第7475行和215210行左右。


µC/CPU 的配置文件的路径在 uC-CPU/Cfg/Template/cpu_cfg.h,打开该文件,并将配置文件中用于配置配置 CPU 中断优先级寄存 器使用位数的宏开关置 1 即可

编译,0错误0警告
测试uCOS
新建用户文件夹

在keil中引用

头文件路径

添加测试代码
1 |
|
1 |
|
在main.c中引用#include "rtos.h",在while(1)前添加OS_StartScheduler()。程序将由uCOS接管,并不会运行while函数。

实验结果
板载LED灯每秒闪烁一次,并且串口每秒发送一次,当发送10次时停止发送
