目录
使用 CubeMX 建立 STM32F103 HAL 库工程
1 uC/OS-III 多任务系统简介
uC/OS 是 Micrium 公司出品的 RTOS 类实时操作系统,uC/OS 目前有两个版本:uC/OS-II 和 uC/OS-III。
uC/OS-III 是一个可裁剪、可剥夺型的多任务内核,而且没有任务数限制。
uC/OS-III 提供了实时操作系统所需的所有功能,包括资源管理、同步、任务通信等。
uC/OS-III 是用 C 和汇编来写的,其中绝大部分都是用 C 语言编写的,只有极少数的与处理器密切相关的部分代码才是用汇编写的, uC/OS-III 结构简洁,可读性很强!
uC/OS-III 任务管理
① uC/OS-III 创建任务。
创建任务就是将任务控制块、任务堆栈、任务代码等联系在一起,并且初始化任务控制块的相应字段。在 uC/OS-III 中通过函数 OSTaskCreate() 来创建任务。
② uC/OS-III 任务删除。
OSTaskDel() 函数用来删除任务,当一个任务不需要运行的话,我们就可以将其删除掉,删除任务不是说删除任务代码,而是 uC/OS-III 不再管理这个任务。
③ uC/OS-III 任务挂起。
有时候有些任务因为某些原因需要暂停运行,但是以后还要运行,因此就不能删除掉任务,这里可以使用 OSTaskSuspend() 函数挂起这个任务,以后再恢复运行。
④ uC/OS-III 任务恢复。
OSTaskResume() 函数用来恢复被 OSTaskSuspend() 函数挂起的任务, OSTaskResume() 函数是唯一能恢复被挂起任务的函数。
⑤ uC/OS-III 时钟片轮转调度。
uC/OS-III 是支持多个任务拥有同一个优先级的,这些任务采用时间片轮转调度方法进行任务调度。在 os_cfg.h 文件中有个宏 OS_CFG_SCHED_ROUND_ROBIN_EN,使用时间片轮转调度就需要将 OS_CFG_SCHED_ROUND_ROBIN_EN 定义为 1 ,这样 uC/OS-III 中有关时间片轮转调度的代码才会被编译,否则不能使用时间片轮转调度。
2 准备 uC/OS-III 源码
官网下载:http://micrium.com/downloadcenter/
官网下载比较麻烦,这里提供网盘链接,可直接下载。
百度网盘下载
链接:https://pan.baidu.com/s/1bz15YwXgSfqO1cnelcAcZA
提取码:luha
3 准备项目文件
新建文件夹
下载好 uC/OS-III 源码文件之后,在下面所示的文件夹里新建两个文件夹 uC-BSP 和 uC-CONFIG,方便后面使用。
为 uC-BSP 文件夹添加文件
在 uC-BSP 文件夹中新建 bsp.c 和 bsp.h 空文件,等之后再用
为 uC-CONFIG 文件夹添加文件
将“Micrium\Software\EvalBoards\Micrium\uC-Eval-STM32F107\uCOS-III”文件路径里框住的文件(共 8 个)全部复制到刚才新建的 uC-CONFIG 文件夹,app.c 里是 main 函数。
使用 CubeMX 建立 STM32F103 HAL 库工程
这里选择的芯片是 STM32F103C8T6。
配置 SYS
配置引脚
设置 PC13 引脚为 GPIO_Output 来点亮 LED 灯。
配置串口 USART1
命名工程文件并设置
这里我命名为“ uC
”
在 main.c 文件的 while 循环里添加下面代码
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
HAL_Delay(500);
}
- 编译烧录后,可以发现 PC13 引脚的 LED 灯闪烁,说明代码没有问题。
5 为 HAL 库工程移植文件
5.1 为 HAL 工程配置 uCOS 相关文件
- 将 uCOS 相关文件(共 5 个)复制到 HAL 工程的 MDK-ARM 文件夹下。
将 uCOS 相关文件添加到项目
- 打开 keil5 工程,点击
Manage Project Items
添加项目
为上面新建的项目分别添加文件
① 点击 CPU
–> Add Files…
,按照如下方式,选中 4.1 部分中添加的 uC-CPU 中的文件(共 6 个),最后点击 Add
。
依次操作同上,注意细心
记得最后点击 OK
保存关闭
效果如下:
按照如下依次导入文件路径