没有合适的资源?快使用搜索试试~ 我知道了~
UCOSIII移植步骤.pdf
需积分: 12 15 下载量 165 浏览量
2020-09-14
14:57:07
上传
评论
收藏 1.11MB PDF 举报
温馨提示


试读
20页
UCOSIII移植步骤 首先准备移植所需的基础工程,我们就拿我们的基础工程LED灯实验 我们移植 UCOSIII 肯定需要 UCOSIII 源码了,这里我们需要两个文件:一个是 UCOSIII 的源码,一个是 Micrium 官方在 STM32F4xx 上移植好的工程文件。。
资源推荐
资源详情
资源评论











1.移植准备:首先准备移植所需的基础工程,我们就拿我们的基础工程 LED 灯实验。
2.UCOSIII 源码:我们移植 UCOSIII 肯定需要 UCOSIII 源码了,这里我们需要两个文件:一
个是 UCOSIII 的源码,一个是 Micrium 官方在 STM32F4xx 上移植好的工程文件。
需要注意一下两点!!!!
1、从图 4.2.2 可以看出 Micrium 官方是在 STM32F429 上移植的,并且 UCOSIII 的版
本是 3.04。从第一章 UCOSII 的移植教程中我们可以看出有一些中间文件需要我们来实现。
UCOSIII 移植也是一样的,既然 Micrium 已经在 STM32F4 上移植好了 UCOSIII,那么为了
方便,这些中间文件我们就直接使用 Micrium 已经编写好的,Micrium 官方虽然是在
STM32F429 上移植的,但是完全可以应用在 STM32F407 上!
2、我们在移植的过程中会将 Micrium 官方使用的 3.04 版本的 UCOSIII 用 3.03 版本
替 换 掉 。 我 在 移 植 3.04 版本 UCOSIII 的 时 候 遇 到 了 这 样 一 个 问 题 : 一 旦 调 用
OSStatTaskCPUUsageInit()函数就会进入 hardfault,如果这时选择-O1 或者-O2 优化的话就没
有问题,如果选择-O0 优化的话就会出现这种问题,开发环境使用的 MDK 5.11A,不知是
KEIL 问题还是 UCOSIII 3.04 版本的问题,所以为了保险起见我们使用 3.03 版本的 UCOSIII。
另外,目前 UCOSIII 的资料基本都是基于 UCOSIII 3.03 版本的,所以这也是我们选择 3.03
版本 UCOSIII 的另一个主要原因。如果一定要使用 UCOSIII 3.04 的话,使用 KEIL 时一定要
选择-O1 或者-O2 优化。
我们打开 Micrium 官方移植好的工程,也就是我们下载下来的 UCOSIII 3.04 源码,打开
后如图所示。
在图中有四个文件夹:EvalBoards、uC-CPU、uC-LIB 和 uCOS-III,这四个文件的内容如下:
1 、EvalBoards 文件夹

这个文件里面就是关于 STM32F429 的工程文件,我们是在 STM32F407 上移植的,我们打
开这个文件如图下所示。
在图中红框圈起来的是我们移植时候需要添加到我们的工程中的文件,一共有 8 个文件。
2 、uC-CPU 文件夹
这个文件里面是与 CPU 相关的代码,有下面几个文件:
1) cpu_core.c 文件
该文件包含了适用于所有 CPU 架构的 C 代码。该文件包含了用来测量中断关闭事件
的函数(中断关闭和打开分别由 CPU_CRITICAL_ENTER()和 CPU_CRITICAL_EXIT()两个宏实现),
还包含一个可模仿前导码零计算的函数(以防止 CPU 不提供这样的指令),以及一些其他的
函数。
2) cpu_core.h 文件
包含 cpu_core.c 中函数的原型声明,以及用来测量中断关闭时间变量的定义。
3) cpu_def.h 文件
包含 uC/CPU 模块使用的各种#define 常量。
4) cpu.h 文件
包含了一些类型的定义,使 UCOSIII 和其他模块可与 CPU 架构和编译器字宽度无关。
在该文件中用户能够找到 CPU_INT16U、CPU_INT32U、CPU_FP32 等数据类型的定义。该文
件还指定了 CPU 使用的是大端模式还是小端模式,定义了 UCOSIII 使用的 CPU_STK 数据
类型,定义了 CPU_CRITICAL_ENTER()和 CPU_CRITICAL_EXTI(),还包括一些与 CPU 架构相关
的函数的声明。
5) cpu_a.asm 文件
该文件包含了一些用汇编语言编写的函数,可用来开中断和关中断,计算前导零(如果
CPU 支持这条指令),以及其他一些只能用汇编语言编写的与 CPU 相关的函数,这个文件中
的函数可以从 C 代码中调用。
6) cpu_c.c 文件
包含了一些基于特定 CPU 架构但为了可移植而用 C 语言编写的函数 C 代码,作为一
个普通原则,除非汇编语言能显著提高性能,否则尽量用 C 语言编写函数。

注 意 , 上 面 的 cpu.h 、 cpu_a.asm 和 cpu_c.c 这 三 个 文 件 , 是 在 uC-CPU 文 件 夹 中
ARM-Cortex-M4 文件夹下的,我们打开 ARM-Cortex-M4 文件如图下所示。
从图中可以看出一共有三个文件:GNU、IAR、RealView,这三个文件中都有 cpu.h、cpu_a.asm
和 cpu_c.c 这三个文件。我们使用的是 KEIL,所以我们在移植 UCOSIII 的时候选择 RealView
中的文件。在我们接下来的讲解中会看到同样的设计,根据不同的编译平台有不同的处理。
3 、uC-LIB 文件
uC-LIB 是由一些可移植并且与编译器无关的函数组成,UCOS III 不使用 uC-LIB 中的函
数,但是 UCOS III 和 uC-CPU 假定 lib_def.h 是存在的,uC-LIB 包含以下几个文件:
1) lib_ascii.h 和 和 lib_ascii.c 文件
提供 ASCII_ToLower()、ASCII_ToUpper()、ASCII_IsAlpha()和 ASCII_IsDig()等函数,它们可
以分别替代标准库函数 tolower()、toupper()、isalpha()和 isdigit()等。
2) lib_def.h 文件
定义了许多常量,如 RTUE/FALSE、YES/NO、ENABLE/DISABLE,以及各种进制的常量。
但是,该文件中所有#define 常量都以 DEF_ 打 头 , 所 以 上 述 常 量 的 名 字 实 际 上 为
DEF_TRUE/DEF_FALSE、DEF_YES/DEF_NO、DEF_ENABLE/DEF_DISABLE 等。该文件还为常用数
学计算定义了宏。
3) lib_math.h 和 和 lib_math.c 文件
包含了 Math_Rand()、Math_SetRand()等函数的源代码,可用来替代标准库函数 rand()、
srand()。
4) lib_mem.c 和 和 lib_mem.h 文件
包含了 Mem_Clr()、Mem_Set()、Mem_Copy()和 Mem_Cmp()等函数的源代码,可用来
替代标准库函数 memclr()、memset()、memcpy()和 memcmp()等。
5) lib_str.c 和 和 lib_str.h 文件
包含了 Str_Lenr()、Str_Copy()和 Str_Cmp()等函数的源代码,可用于替代标准库函数
srtlen()、strcpy()和 strcmp()等。
6) lib_mem_a.asm 文件
包含了 lib_mem.c 函数的汇编优化版。
4 、uCOS-III 文件
这个文件夹中有两个文件 Ports 和 Sourec,Ports 文件为与 CPU 平台有关的文件,
Source 文件夹里面为 UCOSIII 3.04 的源码,我们打开 Source 文件夹如图所示。

UCOSIII 3.04 和 UCOSIII 3.03 源码的文件都是一样的,不同的是各个文件里面的有些函
数做了修改,UCOSIII 源码各个文件内容如表所示。
剩余19页未读,继续阅读
资源评论


Anan-1110
- 粉丝: 1
- 资源: 2
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- CCHMIRuntime.dll和CCHMITags.dllCCHMIRuntime.dll和CCHMITags.dllCCHM
- 通过C#代码创建IIS应用程序池和网站
- Studentscore.py
- 设备预处理JESD22-A113F
- JESD22A111可焊性
- Nuvoton.NuMicro-DFP.1.3.3.pack
- C51单片机的串口主从机通信在LCD1602液晶屏幕上实时显示电流并监测电压KEIL软件源码+仿真.zip
- GetApkInfo.jar
- Highly Accelerated Temperature and Humidity Stress Test (HAST)
- SPI- dma- normal -主模式
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
