STM32F4 UCOS 开发手册
ALIENTEK 探索者 UCOSII/III 开发教程
STM32F4 UCOS 开
发手册 V3.0
−ALIENTEKSTM32F4 UCOSII/III 开发教程
1
STM32F4 UCOS 开发手册
ALIENTEK 探索者 UCOSII/III 开发教程
广州市星翼电子科技有限公司
淘宝店铺 1:http://eboard.taobao.com
淘宝店铺 2:http://openedv.taobao.com
技术支持论坛 (开源电子网) :www.openedv.com
官方网站:www.alientek.com
最新资料下载链接:http://www.openedv.com/posts/list/13912.htm
E-mail: 389063473@qq.comQQ: 389063473
咨询电话:020-38271790
传真号码:020-36773971
团队:正点原子团队
正点原子,做最全面、最优秀的嵌入式开发平台软硬件供应商。
友情提示
如果您想及时免费获取“正点原子”最新资料,敬请关注正点原子
微信公众平台,我们将及时给您发布最新消息和重要资料。
关注方法:
(1)微信“扫一扫”,扫描右侧二维码,添加关注
(2)微信添加朋友公众号输入“正点原子”关注
(3)微信添加朋友输入“alientek_stm32”关注
2
STM32F4 UCOS 开发手册
ALIENTEK 探索者 UCOSII/III 开发教程
文档更新说明
版本
版本更新说明
负责人 校审 发布日期
左忠凯 刘军
2014.11.4
初稿:
V1.0
第一章 UCOSII 移植
第二章 Cortex-M3/M4 基础
第三章 移植文件讲解
新增:
第四章 UCOSIII 移植
第五章 UCOSIII 任务管理
第六章 任务相关 API 函数使用
V2.0
第七章 UCOSIII 中断和时间管理
左忠凯 刘军
2014.12.10
第八章 UCOSIII 软件定时器
第九章 UCOSIII 信号量和互斥信号量
第十章 UCOSIII 消息传递
第十一章 事件标志组
修改:
1、修改了第四章中 led0_task 和 led1_task 两
个任务中由于任务堆栈设置小而进入
hardfault 的 bug。
V2.1
2、修改了第十章中关于 OSQPend()函数中参
数 p_msg_size 的解释和例 10-1 的代码。
新增:
V2.2
第十二章 存储管理
调整:
从第七章开始将后面的章节号做了调整。
V3.0
新增:
第七章 UCOSIII 系统内部任务
3
左忠凯 刘军
2015.2.27
左忠凯 刘军
2015.4.24
左忠凯 刘军
2015.5.27
STM32F4 UCOS 开发手册
ALIENTEK 探索者 UCOSII/III 开发教程
版本
版本更新说明
负责人 校审 发布日期
新增:
第十章 UCOSIII 信号量和互斥信号量
第 10.5 节 优先级反转
第 10.6 节 优先级反转实验
第 10.7 节 互斥信号量
V3.0
第 10.8 节 互斥信号量实验
第 10.9 节 任务内嵌信号量
左忠凯 刘军
2015.5.27
第 10.10 节 任务内嵌信号量实验
第十一章 UCOSIII 消息传递
第 11.4 节 任务内建消息队列
第 11.5 节 任务内建消息队列实验
第十三章 同时等待多个内核对象
4
目录
STM32F4 UCOS 开发手册
ALIENTEK 探索者 UCOSII/III 开发教程
UCOS 开发手册 ............................................................................................................................... 1
第一章 UCOSII 移植 ................................................................................................................... 11
1.1 移植准备工作 .................................................................................................... 12
1.2 UCOS II 移植 ...................................................................................................... 13
1.3 软件设计 ............................................................................................................. 18
1.4 下载验证 ............................................................................................................. 21
第二章 Cortex-M3/M4 基础 ......................................................................................................... 23
2.1Cortex-M3/M4 通用寄存器 ................................................................................. 24
2.2 操作模式和特权级别 ......................................................................................... 28
2.3 FPU 单元 ............................................................................................................. 29
2.3.1 FPU 寄存器 ............................................................................................... 29
2.3.2 Lazy Stacking ............................................................................................ 30
2.4 堆栈 ..................................................................................................................... 31
2.4.1 Cortex-M3/M4 堆栈操作 .......................................................................... 31
2.4.2 双堆栈机制 .............................................................................................. 31
2.4.3 Stack frames ............................................................................................... 32
2.5 SVC 和 PendSV 异常 ........................................................................................ 35
2.5.1 SVC 异常 ................................................................................................... 35
2.5.2 PendSV 异常 ............................................................................................. 36
第三章移植文件讲解 ..................................................................................................................... 38
3.1 滴答定时器 SysTick .......................................................................................... 39
3.2 os_cpu_a.asm 文件详解 ...................................................................................... 40
3.3 os_cpu.h 文件详解 .............................................................................................. 43
3.4 os_cpu_c.c 文件详解 .......................................................................................... 44
第四章 UCOSIII 移植 .................................................................................................................. 47
4.1 UCOSIII 简介 ..................................................................................................... 48
4.2 移植准备工作 ..................................................................................................... 50
4.2.1 准备基础工程 .......................................................................................... 50
5
STM32F4 UCOS 开发手册
ALIENTEK 探索者 UCOSII/III 开发教程
4.2.2 UCOSIII 源码 ............................................................................................ 50
4.3 UCOS III 移植 .................................................................................................... 56
4.3.1 向工程中添加相应的文件 ...................................................................... 56
4.3.2 修改 bsp.c 和 bsp.h 文件 .......................................................................... 59
4.3.3 修改 os_cpu_a.asm 文件 .......................................................................... 62
4.3.4 修改 os_cpu_c.c 文件 ............................................................................... 62
4.3.5 修改 os_cfg_app.h .................................................................................... 65
4.3.6 修改 SYSTEM 文件夹 ............................................................................. 66
4.4 软件设计 ............................................................................................................. 66
4.5 下载验证 ............................................................................................................. 71
第五章 UCOSIII 任务管理 .......................................................................................................... 72
5.1 UCOSIII 启动和初始化 ..................................................................................... 73
5.2 任务状态 ............................................................................................................ 74
5.3 任务控制块 ........................................................................................................ 75
5.4 任务堆栈 ............................................................................................................ 77
5.5 任务就绪表 ........................................................................................................ 78
5.5.1 优先级位映射表 ....................................................................................... 78
5.5.2 就绪任务列表 ........................................................................................... 80
5.6 任务调度和切换 ................................................................................................ 81
5.6.1 可剥夺型调度 .......................................................................................... 81
5.6.2 时间片轮转调度 ...................................................................................... 84
第六章 任务相关 API 函数使用 .................................................................................................. 88
6.1 任务创建和删除实验 ........................................................................................ 89
6.1.1 OSTaskCreate()函数 .................................................................................. 89
6.1.2 OSTaskDel()函数 ...................................................................................... 90
6.1.3 实验程序设计 .......................................................................................... 90
6.1.4 程序运行结果分析 .................................................................................. 94
6.2 任务挂起和恢复实验 ........................................................................................ 96
6.2.1 OSTaskSuspend()函数 ............................................................................... 96
6.2.2 OSTaskResume()函数 ............................................................................... 96
6.2.3 实验程序设计 .......................................................................................... 96
6.2.4 程序运行结果分析 .................................................................................. 97
6
STM32F4 UCOS 开发手册
ALIENTEK 探索者 UCOSII/III 开发教程
6.3 时间片轮转调度实验 ........................................................................................ 99
6.3.1 OSSchedRoundRobinCfg()函数 ............................................................... 99
6.3.2 OSSchedRoundRobinYield()函数 ........................................................... 100
6.3.3 实验程序设计 ......................................................................................... 100
6.3.4 实验程序运行结果 ................................................................................. 103
第七章 UCOSIII 系统内部任务 ................................................................................................ 105
7.1 空闲任务 .......................................................................................................... 106
7.2 时钟节拍任务 .................................................................................................. 107
7.3 统计任务 .......................................................................................................... 110
7.4 定时任务 ........................................................................................................... 111
7.5 中断服务管理任务 ............................................................................................ 111
7.6 钩子函数 ........................................................................................................... 112
7.6.1 空闲任务钩子函数 ................................................................................ 112
7.6.2 实验程序设计 ........................................................................................ 113
7.6.3 实验程序运行结果 ................................................................................ 113
7.6.4 其他任务钩子函数 ................................................................................ 114
第八章 UCOSIII 中断和时间管理 ............................................................................................ 115
8.1 中断管理 .......................................................................................................... 116
8.1.1 UCOSIII 中断处理过程 .......................................................................... 116
8.1.2 直接发布和延迟发布 ............................................................................ 117
8.1.3 OSTimeTick()函数 .................................................................................. 119
8.1.4 临界段代码保护 .................................................................................... 120
8.2 时间管理 .......................................................................................................... 121
8.2.1 OSTimeDly()函数 ................................................................................... 121
8.2.2 OSTimeDlyHMSM()函数 ....................................................................... 122
8.2.3 其他有关时间函数 ................................................................................ 122
第九章 UCOSIII 软件定时器 .................................................................................................... 123
9.1 定时器工作模式 .............................................................................................. 124
9.1.1 创建一个定时器 ..................................................................................... 124
9.1.2 单次定时器 ............................................................................................. 124
9.1.3 周期定时器(无初始化延迟) ................................................................... 125
7
STM32F4 UCOS 开发手册
ALIENTEK 探索者 UCOSII/III 开发教程
9.1.4 周期定时器(有初始化延迟) ................................................................... 126
9.2 UCOSIII 定时器实验 ....................................................................................... 127
9.2.1 实验程序设计 ........................................................................................ 127
9.2.2 实验程序运行结果 ................................................................................ 131
第十章 UCOSIII 信号量和互斥信号量 ..................................................................................... 134
10.1 信号量 ............................................................................................................. 135
10.1.1 创建信号量 ........................................................................................... 135
10.1.2 请求信号量 ........................................................................................... 136
10.1.3 发送信号量 ........................................................................................... 136
10.2 直接访问共享资源区实验 ............................................................................ 136
10.2.1 实验程序设计 ...................................................................................... 137
10.2.2 实验程序运行结果 .............................................................................. 138
10.3 使用信号量访问共享资源区实验 ................................................................ 139
10.3.1 实验程序设计 ...................................................................................... 139
10.532 实验程序运行结果 ............................................................................. 140
10.4 任务同步实验 ................................................................................................ 141
10.4.1 实验程序设计 ...................................................................................... 142
10.4.2 实验程序运行结果 .............................................................................. 143
10.5 优先级反转 .................................................................................................... 144
10.6 优先级反转实验 ............................................................................................ 145
10.6.1 实验程序设计 ...................................................................................... 145
10.6.2 实验程序运行结果 .............................................................................. 148
10.7 互斥信号量 .................................................................................................... 150
10.7.1 创建互斥型信号量 ............................................................................... 151
10.7.2 请求互斥型信号量 ............................................................................... 152
10.7.3 发送互斥信号量 ................................................................................... 152
10.8 互斥信号量实验 ............................................................................................ 153
10.8.1 实验程序设计 ...................................................................................... 153
10.8.2 实验程序运行结果 .............................................................................. 155
10.9 任务内嵌信号量 ............................................................................................ 157
10.9.1 等待任务信号量 .................................................................................. 157
10.9.2 发布任务信号量 .................................................................................. 157
10.10 任务内嵌信号量实验 .................................................................................. 158
8