UCOSIII学习
前言
学了一年单片机,从51到tm4以及stm32,基本都是在while(1)里面“裸奔”。18年暑假的时候突然想玩一下操作系统,就操作了一下。原来有一个官方移植的tm4c1294例程。本来是想改一改移植到tm4c123g上然后用ccs作为开发环境,研究了一天发现micrium官方对于tiva-c系列只提供了IAR和realview开发工具的startup.c。我猜直接把ccs的startup_ccs.c换掉realview的或许可以吧。不过我的首要目的是学单片机上操作系统的原理和使用方法,所以就直接用官方移植的例程上手了。
基于tm4c1294的UCOSIII系统搭建
官方例程下载
1.进入micrium官网
国外网站打开有点慢,等个半分钟到一分钟就行。
2.点击导航栏的Downloads进入下载页面
下拉页面找到根据MCU生产商浏览,找到Texas Instrument。
3.选中tm4c1294进入下载界面
4.直接点击资源这一栏
值得注意的是micrium提供的keil MDK是v4,所以导入到v5会有警告提示,管它呢。反正最后不影响使用就是了。
5.登录账号并下载
注册一个micrium账号,Log in to Download
文件结构解析
文件夹初探
文件夹解压出来如下
第一个EvalBoards就是MCU板子移植的相关代码
我们要找的keil工程文件在EvalBoards->TI->EK-TM4C1294XL->OS3->KeilMDK这条路径下。
在OS3那一层并列一个”BSP”的文件夹,这是micrium写的tm4c1294板子驱动的相关代码。不过我采用的是tiva-ware,这个BSP驱动后续可能只用一部分,不然会重定义然后打架。
剩下三个就是UCOSIII的资源文件
这部分详细介绍参考《嵌入式实时操作系统uCOS-3》(北航出版社)。
uC-CPU
文件结构如下
\uC-CPU
\cpu_core.c(包含适用所有CPU架构的C代码 包含用来测量中断关闭时间的函数)
\cpu_core.h(包含用于测量中断关闭时间的变量定义)
\cpu_def.h(包含uC/CPU模块使用的宏定义)
\ARM-Cortex-M4\RealView
\cpu.h(包含一些数据类型定义)
\cpu_a.asm(汇编语言实现开关中断、计算前导零、使能缓存、建立MPUs、MMU的函数,其中函数可以直接在C代码里调用)
\cpu_c.c(基于特定cpu架构的代码)
uC-LIB
可移植库函数如下
\lib_ascii.c及其头文件(其中函数可以替代大小字母转化和数字字母互化的库函数)
\lib_def.h(定义许多常量)
\lib_math.c及其头文件(其中函数可以替代rand()、srand())
\lib_mem.c及其头文件(其中函数可以替代memclr()、memset()、memcpy()、memcmp())等
lib_str.c及其头文件(其中函数可以以替代strlen()、strcpy()、strcmp())等
uCOS-III
其中与处理器类型无关文件如下
\Source
\os_cfg.app.c(根据os_cfg_app.h中宏定义定义变量和数据)
\os_core.c(包含uCOSIII内核功能模块)
\os_dbg.c(包含内核调试器)
\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_stat.c(包含统计任务代码)
\os_task.c(包含任务的管理代码)
\os_tick.c(包含可管理正在延时和超时等待任务)
\os_time.c(包含延时代码)
\os_tmr.c(包含软件定时器代码)
\os_var.c(包含uCOSIII的全局变量)
\os.h(uCOSIII主要头文件)
\os_type.h(包含数据类型声明)
keil环境配置
在第一次导入工程的时候一般会提示识别到器件为tm4c1294,直接按提示下支持包就行。
器件型号为TM4C1294NCPDT。
我记得只要器件型号对上了,其他配置在这个例程下基本都是配好的。
只需要在魔术棒的C/C++选项卡把Preprocessor Symbols的Define填上 rvmdk PART_TM4C1294NCPDT 就行。
如果出现什么问题,参照以下文档配置keil下的tm4开发环境:
https://wenku.baidu.com/view/6d23b80dbc64783e0912a21614791711cc7979f4.html
tiva-ware联动
tiva-ware是一个ti的软件开发包,里面有bsp板级支持以及tiva-c系列各型号开发板的库函数和例程。
在keil里面使用tiva-ware只需要将tiva-ware包里面针对realview开发工具的driverlib.lib添入工程就行。
顺便在魔术棒的C/C++选项卡里的 Include Paths一栏加入你的tiva-ware包的路径。
第一个UCOSIII工程
下好例程,配好环境,来试试水
软件设计如下:
|
|
下载现象为:任务一运行5次后删掉任务二。所以可以看到本来是两个led几乎同时闪烁,闪烁4次后,有一个led停止闪烁,另一个继续闪烁。
至此,你就在tm4c1294上拥有了一个基于tiva-ware固件库可以跑的uCOSIII。