uCOS学习笔记: uCOS移植
一、前言
ucos内核学习结束,就可以开始做UCOS源码的移植,移植第一步,即理清代码的作用,第二步则是在知道各部分源码的作用之后,把ucos各部分代码移植到stm32的kile工程里面,移植完成之后修改工程启动文件与UCOS源码关联,在编译无报错即为成功
二、UCOS-Ⅲ源码介绍
EvalBoards
- uCos-Ⅲ
这里的代码文件主要由用户来配置,移植文件存放于一个APP文件夹中,用于存放任务以及配置信息
- BSP
BSP文件夹下存放的文件是与底层连接的接口文件,源码中自带的是板子LED的接口,移植到KEIL单独设置一个BSP文件夹放置
uC-CPU
注:uC-CPU是和CPU紧密相连的内容,涉及一些关键的配置
- M3(或M4根据型号来)文件夹外的3个文件
- cpu_core.c
文件包含适用于所有CPU架构的代码,即通用代码,一般与移植不是很密切 - cpu_core.h
对其c文件的补充说明 - cpu_def.h
包含与CPU相关的一些宏定义
- M3(或M4根据型号来)内文件
- 三个文件夹对应不同软件:RealView对应Keil软件
- cpu.h
针对不同CPU,让ucos-Ⅲ与cpu架构和编译器字宽无关 - cpu_a.asm、cpu_c.c
放与cpu底层相关的函数,不同的是,一个由c编写一个由汇编编写
uC-LIB
ucos提供的c语言标准库,使用起来更方便,直接调用,全部复制到一个uC-LIB文件夹下
uCos-Ⅲ(重点)
- PORT 下 M3(或M4等等)
三个文件夹移植在不同的编译器里面
RealView为MDK的移植代码
- Source文件夹
- os.h
包含ucos-Ⅲ主要头文件,定义了一些与系统相关的宏定义、常量,声明了一些全局变量、函数原型等 - os_cfg_app.c
根据其头文件来配置具体内容(变量和数组) - os_core.c
内核数据结构管理,uCOS-Ⅲ的核心,任务切换等 - os_dpg.c
uCosⅢ内核调试相关代码 - os_flag.c
事件块管理、事件标志组管理等功能相关代码 - os_int.c
涵盖内核的初始化相关代码 - os_mem.c
系统内存管理相关代码 - os_msg.c
消息处理相关代码 - os_mutex.c
互斥量相关代码 - os_pend_multi.c
在多个消息队列、信号量等待的相关代码 - os_prio.c
内部调用文件,关于任务就绪相关的代码 - os_q.c
消息队列相关代码 - os_sem.c
信号量相关代码 - os_task.c
任务管理的相关代码 - os_tick.c
处理处于延迟、阻塞状态任务的相关代码 - os_time.c
时间管理相关代码,配置阻塞延迟等 - os_tmr.c
软件定时器相关的代码 - os_var.c
uCOS-Ⅲ定义的全局变量 - os_type.h
uCOS-Ⅲ数据类型声明相关的代码
三、源码移植到STM32中
- kile工程文件夹分配
- 寻找一个STM32库函数模板作为基础(这里使用的是野火的模板)
- 创建APP、BSP、uC/CPU、uC/LIB、uC/Scoure、uC/Port文件夹
- 将上面的文件按分类加入文件夹下
APP下加入APP分类的文件,作为用户主要编写的文件
BSP作为板级支持包,提供板载资源的接口
port文件夹下对应放入文件如下
Source下放入uCos系统资源的配置包
Lib下放入需要使用到的lib库
- 加入头文件路径
- 修改汇编源码,编译通过
- ucos文件加入之后,需要修改stm32库函数文件的启动文件,改变pendsv的主体函数入口,进入到上下文切换内,同时改变定时器中断入口,具体修改如下,md、hd文件修改方式一样