




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业论文 设计 本科毕业论文 设计 论论文文题题目目 基于基于 STM32 的嵌入式操作系统的嵌入式操作系统 程序设计及实现程序设计及实现 姓姓 名名 郝宇郝宇 学学 号号 093001020144 班班 级级 01 班班 年年 级级 2009 级级 专专 业业 电子信息工程电子信息工程 学学 院院 信息工程学院信息工程学院 指指导导教教师师 丁光哲丁光哲 讲师讲师 完成完成时间时间 2013 年年 5 月月 20 日日 武昌工学院毕业论文 设计 专用稿纸 作者声明作者声明 本毕业论文 设计 是在导师的指导下由本人独立撰写完成 的 没有剽窃 抄袭 造假等违反道德 学术规范和其他侵权行 为 对本论文 设计 的研究做出重要贡献的个人和集体 均已 在文中以明确方式标明 因本毕业论文 设计 引起的法律结果 完全由本人承担 毕业论文 设计 成果归武昌工学院所有 特此声明 作者专业 电子信息工程 作者学号 093001020144 作者签名 年年 月月 日日 武昌工学院毕业论文 设计 专用稿纸 基于基于 STM32STM32 的嵌入式操作系统的嵌入式操作系统 程序设计及实现程序设计及实现 郝宇郝宇 The Design and Implementation of embedded operating system program based on STM32 Hao Yu 2013 年年 5 月月 20 日日 武昌工学院毕业论文 设计 专用稿纸 1 摘摘 要要 随着科学技术不断的进步 工业生产越来越先进复杂 操作系统 C OS II 是高效 稳定 可靠 节能的系统 广泛应用安防 消费电子中 而基于 Cortex M3 架构下的 STM32 是一款性价比优越新型微处理器 将 C OS II移植 到STM32 上能够发挥其高效的性能 从而投入社会生产 制造出很多有用又实 惠的电子产品 为我们的生活带来便利 本文主要的研究内容是 C OS II 操作系统理论分析 移植方法 应用程序 设计及调试仿真实现 首先 对 C OS II 的理论分析 研究其实际应用及系统 结构 其次 分析 STM32 硬件平台及 C OS II 的移植需求 最后 在 C OS II 上开发 LCD LED 按键 KEY 等应用程序 并对多任务系统调试分析 主 要研究结论如下 1 C OS II 操作系统主要分为任务管理 内存管理和时间管理三大部分 其间通信是通过消息队列和消邮箱 2 C OS II 移植主要在 OS CPU H OS CPU C C OS CPU A ASM 三 个文件中 涉及到数据类型 堆栈 中断定义和任务切换等 3 应用程序设计优先级分配要合理 硬件平台初始化模块化处理 关键词 关键词 嵌入式系统 C OS II 移植 武昌工学院毕业论文 设计 专用稿纸 2 Abstract With the progress of science and technology constantly advanced industrial production to more complex the operating system C OS II is efficient stable reliable energy saving system widely used in the security and consumer electronics And based on the STM32 architecture Cortex M3 framework is a superior cost effective new microprocessor C OS II transplantation to STM32 can play its efficient performance thus in social production and create a lot of useful and affordable electronic product bring convenience to our lives This article main research content is C OS II operating system theory analysis method of transplantation application design and debugging of the simulation implementation First of all the theoretical analysis of C OS II research the actual application and system structure Second analysis of STM32 hardware platform and the demand C OS II transplantation Finally on the C OS II development of LCD LED button KEY applications and analysis of multitasking system debugging Main research conclusion is as follows 1 C OS II operating system consists of three major task management memory management and time management in which communication is through the message queue and email 2 C OS II transplantation mainly in OS CPU C C OS CPU A ASM file OS CPU H three involves the data type definition and task switching etc stack interrupt 3 The application design to the allocation of priorities initialize the modular processing hardware platform Key words embedded system C OS II transplant 武昌工学院毕业论文 设计 专用稿纸 1 目目 录录 1 概概 述述 1 1 1 研究的目的及意义 1 1 2 国内外研究状况综述 1 1 3 研究的主要内容 2 2 C OS IIC OS II 的理论介绍的理论介绍 3 2 1 C OS II 各模块的基本功能 3 2 2 STM32 上移植方法 7 3 LCDLCD 屏程序设计及调试屏程序设计及调试 12 3 1 工具概述 12 3 2 硬件结构 13 3 3 C 程序设计 15 3 4 调试 16 结结 语语 18 主要参考文献主要参考文献 19 附附 录录 20 附录 1 主程序代码 20 武昌工学院毕业论文 设计 专用稿纸 1 1 概概 述述 1 1 研研究究的的目目的的及及意意义义 C OS II是由美国工程师Jean Labrosse编写的嵌入式多任务的实时操作系统 包括实时内核 任务管理 时钟管理 任务间通信同步 信号量 邮箱 消息队 列 和内存管理 除了有上面的优点外 C OS II它具有别的操作系统没有的优 点 具体如下 1 源代码开放 C OS II的源代码可以免费获取 且标有清晰的注释 可读性好 2 可移植性好 C OS II的源代码90 以上是用C语言编写的 可以很 容易地把它移植到各类8位 16位和32位处理器上 3 稳定性高 C OS II已得到FAA的标准认证 且目前已有上百个商业 应用实例 其稳定性和可靠性是经过实践验证的 因此 C OS II广泛的应用于控制系统中 如在衍射仪高压控制系统中使 用 C OS II操作系统是一种很好的选择 控制系统是一个复杂的系统 它需要 多个系统协同工作 传统的系统开发我们往往使用前后台的方式 但是这种开 发方式在任务较简单的开发中比较适用 对于任务比较复杂的系统往往力不从 心 对于任务较多而且复杂的情况我们就要引入实时操作系统RTOS RTOS体现了一种新的应用程序设计思想和开放的框架 用户在编写程序时 可以分别编写各个任务 不必同时将所有任务运行的各种可能情况记在心中 大大减小了程序编写的工作量 而且减小了出错的可能 保证最终程序具有高 可靠性 从而降低程序的复杂度和开发周期 由于控制系统功能较复杂 诸多 的功能可以划分成许多不同的模块 模块之间既彼此联系又相对独立 可以当 作不同的任务来进行处理 所以 使用实时操作系统 将不同的功能划分成不 同的任务进行处理使得设计大大简化 1 2 国国内内外外研研究究状状况况综综述述 嵌入式系统是继IT网络技术之后 又一个新的技术发展方向 中国单片机 二十年论坛总结出 我国嵌入式起步较早 但总体来说发展缓慢 和国外的开 发应用具有很大的差距 造成这一局面的原因是多方面的 在国内嵌入式系统 开发方面 多是一些低层次的应用 停留在以前老的技术基础之上 例如 经 典51系列单片机在上世纪我国的工业信息化改造过程中发挥了重要的作用 渗 透到生产生活的各个方面 与此同时在大学电类相关的工科单片机教学中 依 然是经典的51 微机原理依然是8086 88 这显然体现不了最新的技术特征 造 成了大学教育与实际社会需要的脱节 国外的大部分高校和国内的极少数大学 相继开设嵌入式微处理器设计等相关的前沿性的课程 可见基于STM32技术将 是未来微控制开发的主流方向 由于 C OS II系统具有体积小 性能强 功耗 武昌工学院毕业论文 设计 专用稿纸 2 低 可靠性高以及面向行业应用的突出特征 目前已经被广泛的应用于军事国 防 消费电子 网络通信 工业控制等各个领域 今天嵌入式系统带来的工业年产值已超过了1万亿美元 1997年来自美国嵌 入式系统大会 Embedded System Conference 的报告指出 未来5年仅基于嵌入式 计算机系统的全数字电视产品 就将在美国产生一个每年1500亿美元的新市场 美国汽车大王福特公司的高级经理也曾宣称 福特出售的 计算能力 已超 过了IBM 由此可以想见嵌入式计算机工业的规模和广度 1998年11月在美 国加州举行的嵌入式系统大会上 基于RTOS的Embedded Internet成为一个技术 新热点 在国内 维纳斯计划 和 女娲计划 一度闹得沸沸扬扬 机顶盒 信息加电这两年更成了IT热点 而实际上这些都是嵌入式系统在特定环境下的 一个特定应用 据调查 目前国际上已有两百多种嵌入式操作系统 而各种各 样的开发工具 应用于嵌入式开发的仪器设备更是不可胜数 在国内 虽然嵌 入式应用 开发很广 但该领域却几乎还是空白 只有三两家公司和极少数人 员在从事这方面工作 由此可见 嵌入式系统技术发展的空间真是无比广大 1 3 研研究究的的主主要要内内容容 本文是在基于 32 位的 ARM 微处理器 STM32 和嵌入式实时操作系统 C OS II 上进行嵌入式操作系统的移植和功能实现 通过将嵌入式实时操作系 统 C OS II 移植到 STM32 微处理器上 并对其进行软件功能的扩展和硬件扩 展 实现了一个基本完整的嵌入式实时操作系统 建立了基于嵌入式 ARM 处 理器的应用软件体系 将 C OS II 移植到 STM32 建立了嵌入式操作系统研究 及 C OS II 下的开发环境体系 包括 C OS II 系统配置 C OS II 下的移植 启动 测试和功能实现等 完成了基于 STM32 的 C OS II 的应用设计 本文主要分为 4 章 章节安排如下 1 绪论 主要介绍了开题的背景和研究意义 以及 C OS II 的国内外 研究现状 2 C OS II 的理论介绍 主要介绍 C OS II 各模块的基本功能和在 STM32 上移植方法 3 硬件平台介绍及 LCD 屏程序设计及调试 多任务的建立并实现基本 功能 4 结语 主要介绍本论文中的优点和不足之处 武昌工学院毕业论文 设计 专用稿纸 3 2 C OS II 的理论介绍的理论介绍 2 1 C OS II 各模块的基本功能各模块的基本功能 2 1 1 C OS II 内核结构内核结构 1 C OS II 是以源代码形式提供的实时操作系统内核 其包含的文件结 构如图 2 1 所示 基于 C OS II操作系统进行应用时 设计时的主要任务是将系统合理划分 成多个任务 并由RTOS进行调度 任务之间使用 C OS II提供的系统服务进行 应用软件应用软件 用户代码 用户代码 C OS II 内核文件内核文件 与处理器类型无关的代码与处理器类型无关的代码 OS CORE C OS TASK C OS FLAG C OS TIME C OS MBOX C COS II C OS MEM C COS II H OS MUTEX C OS SEM C OS Q C C OS II 配置文件配置文件 与应用程序有关与应用程序有关 OS CFG H INCLUDES H 移植移植 C OS II 与处理器类型有关的代码 与处理器类型有关的代码 OS CPU H OS CPU C C OS CPU A ASM CPU 定时器定时器 图图 2 1 C OS II 内核结内核结 构构 软 件 硬 件 武昌工学院毕业论文 设计 专用稿纸 4 通信 以配合实现应用系统的功能 与前后台系统一样 基于 C OS II的多任 务系统也有一个main主函数 main函数由编译器所带的C启动程序调用 在 main主函数中主要实现 C OS II的初始化OSInit 任务创建 一些任务通信方 法的创建 C OS II的多任务启动OSStart 等常规操作 另外 还有一些应用程 序相关的初始化操作 例如 硬件初始化 数据结构初始化等 2 OSInit 初始化 C OS II所有的变量和数据结构 并建立空闲任务 OS TaskIdle 这个任务总是处于就绪态 2 1 2 C OS II 内核体系结构图内核体系结构图 C OS II内核主要对用户任务进行调度和管理 并为任务间共享资源提供 服务 包含的模块有任务管理 任务调度 任务间通信 时间管理 内核初始 化等 C OS II内核体系结构如图2 2所示 图图 2 2 内核结构图内核结构图 2 1 3 任务状态及其转换关系任务状态及其转换关系 在多任务系统中 任务是设计者实现应用系统的基本形式 也是 C OS II 系统进行调度的基本单元 任务可以是一个无限的循环 也可以在一次执行后 被操作系统删除 任务函数和任何C函数一样 具有一个返回类型和一个参数 但是它决不返回 任务控制块 TCB 是一个数据结构OS TCB 一旦一个任务创建 就有 一个和它关联的TCB被赋值 当任务的CPU使用权被剥夺时 它用来保存该任 务的状态 这样 当任务重新获得CPU使用权时 可以从TCB中获取任务切换 前的信息 准确的继续运行 武昌工学院毕业论文 设计 专用稿纸 5 2 1 4 任务调度器任务调度器 C OS II总是运行进入就绪态的优先级最高的任务 任务调度器的功能是 在就绪表中查找最高优先级的任务 然后进行必要的任务切换 运行该任务 C OS II的任务调度有两种情况 任务级的任务调度由OS Sched 完成 中断 级的任务调度由OSIntExt 完成 这两种任务调度情况调用的任务切换函数不同 任务级的任务调度OS Sched 调用了任务切换函数 OS TASK SW 而中断级 的调度OSIntExt 调用了任务切换函数OSIntCtxSw 任务级的任务调度是由于有更高优先级的任务进入就绪态 当前的任务的 CPU使用权被剥夺 发生了任务到任务的切换 中断级的调度是指当前运行的 任务被中断打断 由于ISR运行过程中有更高优先级的任务被激活进入就绪态 而中断返回前ISR调用OSIntExt 函数 该函数查找就绪表发现有必要进行任务 切换 从而被中断的任务进入等待状态 运行被激活的高优先级的任务 1 任务切换 任务切换有两种 OS TASK SW 和OSIntCtxSw 任务级的任务切换 OS TASK SW 是宏调用 通过软中断指令来实现CPU寄存器内容切换 例如 define OS TASK SW asm int 32 任务级的任务切换过程 保存当前运行的任务的CPU寄存器值到该任务 的堆栈 如 堆栈指针 程序计数器 状态寄存器等 将要运行的高优先级 的任务的寄存器值从堆栈恢复到CPU寄存器 进行TCB的切换 并运行任务 中断级的任务切换OSIntCtxSw 是在OSIntExt 中调用的 我们一般在用户 ISR中调用OSIntExt 以实现中断返回前的任务调度 由于ISR已经将CPU寄存器 的值存入被中断的任务的堆栈中 所以OSIntCtxSw 的实现和OS TASK SW 不一样 具体参见移植文档 2 就绪表 每个就绪的任务都放在就绪表中 就绪表有两个变量 OSRdyGrp和 OSRdyTbl OSRdyGrp中 将任务按优先级分组 八个为一组 OSRdyGrp的 每一位代表每组任务是否有进入就绪态的任务 在就绪表中查找优先级最高的任务不需要扫描整个OSRdyTbl 只要查优 先级判定表OSUnMapTbl OSUnMapTbl 是常量表 所以查找优先级最高的 任务的执行时间为常量 和就绪表的任务数无关 2 1 5 中断服务中断服务 在用户的ISR中可以调用OSIntEnter 和OSIntExit 通知 C OS II发生了中断 这样可以实现ISR返回前的任务调度 2 1 6 时钟节拍时钟节拍 C OS II要求用户提供一个周期性的时钟源 来实现时间的延迟和超时功 武昌工学院毕业论文 设计 专用稿纸 6 能 时钟节拍应该每秒发生10 100次 秒 时钟节拍率越高 系统的额外负荷就 越重 应该在多任务系统启动后 也就是调用OSStart 后再开启时钟节拍器 系 统设计者可以在第1个开始运行的任务中调用时钟节拍启动函数 假设用定时器 TA0作为时钟中断源 那么 在移植过程中实现了函数init timer ta0 此函数 用来初始化定时器TA0 并将其打开 C OS II中的时钟节拍服务是在ISR中调 用OSTimeTick 实现的 OSTimeTick 跟踪所有任务的定时器以及超时时限 2 1 7 C OS II 的初始化和启动的初始化和启动 调用 C OS II的服务之前要先调用系统初始化函数OSInit OSInit 初始化 C OS II所有的变量和数据结构 并建立空闲任务 C OS II初始化任务控制块 事件控制块 消息队列缓冲 标志控制块等数据结构的空缓冲区 多任务的启动是通过调用OSStart 实现的 启动之前要至少创建一个任务 OSStart 调用就绪任务启动函数OSStartHighRdy 其功能是将任务栈的值恢复 到CPU寄存器 并执行中断返回指令 强制执行该任务代码 2 1 8 内存管理内存管理 在ANSI C中是使用malloc和free两个函数来动态分配和释放内存 但在嵌入 式实时系统中 多次这样的操作会导致内存碎片 且由于内存管理算法的原因 malloc和free的执行时间也是不确定 C OS II中把连续的大块内存按分区管理 每个分区中包含整数个大小相同的内存块 但不同分区之间的内存块大小可以 不同 用户需要动态分配内存时 系统选择一个适当的分区 按块来分配内存 释放内存时将该块放回它以前所属的分区 这样能有效解决碎片问题 同时执 行时间也是固定的 2 1 9 任务管理任务管理 C OS II中最多可以支持64个任务 分别对应优先级0 63 其中0为最高 优先级 63为最低级 系统保留了4个最高优先级的任务和4个最低优先级的任 务 所有用户可以使用的任务数有56个 C OS II提供了任务管理的各种函数 调用 包括创建任务 删除任务 改变任务的优先级 任务挂起和恢复等 系 统初始化时会自动产生两个任务 一个是空闲任务 它的优先级最低 该任务 仅给一个整型变量做累加运算 另一个是统计任务 它的优先级为次低 该任 务负责统计当前CPU的利用率 2 1 10 C OS II 任务间通信方式任务间通信方式 1 信号量 信号量由两部分组成 一部分是16位的无符号整型信号量的计数值 另一 部分是由等待该信号量的任务组成的等待任务表 信号量用于对共享资源的访 问 用钥匙符号 符号旁数字代表可用资源数 对于二值信号量该值为1 信号 量还可用于表示某事件的发生 用旗帜符号表示 符号旁数字代表事件已经发 武昌工学院毕业论文 设计 专用稿纸 7 生的次数 互斥型信号量用于处理共享资源 2 消息邮箱 一种通信机制 可以使一个任务或者中断服务子程序向另一个任务发送一 个指针型的变量 通常该指针指向一个包含了消息的特定数据结构 3 消息队列 另一种通信机制 允许一个任务或者中断服务子程序向另一个任务发送以 指针方式定义的变量或其它任务 因具体应用不同 每个指针指向的包含了消 息的数据结构的变量类型也有所不同 2 2 STM32 上移植方法上移植方法 2 2 1 平台需求平台需求 C OS II的正常运行需要处理器平台满足以下要求 1 处理器的C编译器能产生可重入代码 2 用C语言就可以打开和关闭中断 3 处理器支持中断 并且能产生定时中断 通常在10至100Hz之间 4 处理器支持能够容纳一定量数据 可能是几千字节 的硬件堆栈 5 处理器有将堆栈指针和其它CPU寄存器读出和存储到堆栈或内存中的 指令 2 2 2 移植方法移植方法 1 内核头文件 OS CPU H 在OS CP U H 中 主要声明了一些与微处理器相关的常量 宏和typedef 定义与处理器无关的数据类型 typede f unsigned char BOOLEAN typedef unsigned char INT8U typedef signed char NT8S typedef unsigned short INT16U typedef signed short INT16S typedef unsigned int INT32U typedef signed int NT32S typedef float FP32 typedef double FP64 typedef unsigned int OS STK typedef unsigned int OS CPU SR 在STM32处理器及keil MDK 或者IAR 编译环境中可以通过查手册得知 short类型是16位而int类型是32位 这对于Cortex M3内核是一致的 故这部分代 码无需修改 尽管 C OS II定义了float 类型和double 类型 但为了方便移植它 们在 C OS II源代码中并未使用 为了方便使用堆栈 C OS II定义了一个堆栈 数据类型 在Cortex M3 中寄存器为32位 故定义堆栈的长度也为32位 武昌工学院毕业论文 设计 专用稿纸 8 Cortex M3 状态寄存器为32位 定义OS CPU SR主要是为了在进出临界代码段 保存状态寄存器 2 临界代码段 C OS II为了保证某段代码的完整执行 需要临时的关闭中断 在这 段代码执行完成之后再打开中断 这样的代码段称作临界代码段 C OS II通 过定义两个宏OS ENTER CRITICAL 和OS EXIT CRITICAL 来分别实现中 断的关闭和打开 一般来说 采用方法3来实现这两个宏 这两个宏分别定义如 下 define OS CRITICAL METHOD 3 define OS ENTER CRITICAL cpu sr OS CPU SR Save define OS EXIT CRITICAL OS CPU SR Restore cpu sr 函数OS CPU SR Save 和OS CPU SR Restore cpu sr 在OS CPU A ASM 中定义 同时得注意 在使用这两个宏之前 必须定义OS CPU SR cpu sr 否则编译时将出错 3 栈的增长方向 尽管 C OS II支持两种方向生长的栈 但对于以Cortex M3为内核的STM32 微处理器来说 它支持向下增长的满栈 故需要定义栈增长方向宏为1 即定义 成如下形式 define OS STK GROWTH 1 4 任务级任务切换 任务级任务切换调用宏OS TASK SW 来实现 因为这个宏也是与处理器 相关的 因此这个宏在OS CPU A ASM中描述 5 其他函数声明 在OS CPU H中 还声明了以下几个函数 这几个函数均在 OS CPU A ASM中实现 void OSCtxSw void void OSIntCtxSw void void OSStartHighRdy void void OS CPU PendSVHandler void 6 与处理器相关的汇编代码 OS CPU A ASM 在OS CP U A ASM中实现的是下面五个与处理器相关的函数 OS CPU SR Save OS CPU SR Restore OSStartHighRdy OSCtxSw OSIntCtxSw 2 3 3 函数实现函数实现 武昌工学院毕业论文 设计 专用稿纸 9 1 关中断函数 OS CPU SR Save 即先保存当前的状态寄存器然后关中断 故关中断实现代码如下 OS CPU SR Save MRS R0 PRIMASK CPSID I BX LR 这也是宏OS ENTER CRITICAL 的最终实现 2 恢复中断函数 OS CPU SR Restore 这是宏OS EXIT CRITICAL 的最终实现 也就是将状态寄存器的内容从 R0中恢复 然后跳转回去 此函数完成的将中断状态恢复到关中断前的状态 其代码如下 OS CPU SR Restore MSR PRIMASK R0 BX LR Cortex M3处理器有单独的指令来打开或者关闭中断 所以这两个函数实现 起来很简单 3 启动最高优先级任务运行 OSStartHighRdy OSStart 调用OSStartHighRdy 来启动最高优先级任务的运行 从而启动整 个系统 OSStartHighRdy 主要完成以下几项工作 为任务切换设置PendSV的优先级 为第一次任务切换设置栈指针为0 设置OSRunning TRUE 以表明系统正在运行 触发一次PendSV 打开中断等待第一次任务的切换 4 任务级和中断级任务切换 因为Cortex M3进入异常自动保存寄存器R3 R0 R12 LR PC和xPSR这种 的特殊机制 这两个函数都是触发一次PendSV来实现任务的切换 首先是微处 理器自动保存上面提到的寄存器 然后把当前的堆栈指针保存到任务的栈中 将要切换的任务的优先级和任务控制块的指针赋值给运行时的最高优先级指针 和运行时的任务控制块指针 最后再把要运行的任务的堆栈指针赋值给微处理 器的堆栈指针 这样就可以退出中断服务程序了 中断服务程序退出的时候将 自动出栈R3 R0 R12 LR PC和xPSR 具体的PendSV服务程序的伪代码如下 OS CPU PendSVHandler 进入异常 处理器自动保存R3 R0 R12 LR PC和xPSR if PSP NULL 判断不是开始第一次任务 武昌工学院毕业论文 设计 专用稿纸 10 保存R4 R11到任务的堆栈 OSTCBCur OSTCBStkPtr SP 保存堆栈的指针到任务控制块 OSTaskSwHook 实现用户扩展功能而定义的钩子 OSPrioCur OSPrioHighRdy 设置运行任务为最高优先级就绪任务 OSTCBCur OSTCBHighRdy 设置运行的任务控制块为最高 就绪任控制块务 PSP OSTCBHighRdy OSTCBStkPtr 将要切换的任务堆栈指 针赋给微处理器的堆栈指 针从而实现切换 从堆栈中恢复 R4 R11 从异常中返回 退出异常 处理器自动恢复R3 R0 R12 LR PC和xPSR 这样很容易写出PendSV中断服务程序的代码了 5 与CPU 相关的C 函数和钩子函数 OS CPU C C 这个文件中包含10个函数 具体如下 OSInitHookBegin OSInitHookEnd OSTaskCreateHook OSTaskDelHook OSTaskIdleHook OSTaskStatHook OSTaskStkInit OSTaskSwHook OSTCBInitHook OSTimeTickHook 这10个函数有9个是为了扩展用户功能而定义的钩子函数 这些钩子函数可 以都为空函数 也可以加上一些用户需要的扩展功能 另外一个不是钩子函数 它是OSTaskStkInit 这个函数的功能是当一个任务被创建时 它完成这个任务 堆栈的初始化 这个函数首先将用户为任务分配的堆栈顶地址赋值给一个栈指 针变量 然后再通过这个栈指针向任务的栈空间写入初值 这个初值无关紧要 为0就可以了 这个函数的代码时下如下 OS STK OSTaskStkInit void task void pd void p arg OS STK ptos INT16U opt OS STK stk void opt 防止编译器报错 stk ptos 将栈顶地址赋值给栈指针变量 武昌工学院毕业论文 设计 专用稿纸 11 以进入异常的顺序来给栈赋初值 stk INT32U 0 x00000000L xPSR stk INT32U task Entry Point stk INT32U 0 x00000000L R14 LR stk INT32U 0 x00000000L R12 stk INT32U 0 x00000000L R3 stk INT32U 0 x00000000L R2 stk INT32U 0 x00000000L R1 stk INT32U p arg R0 传递的参数 剩下的寄存器初始化 stk INT32U 0 x00000000L R11 stk INT32U 0 x00000000L R10 stk INT32U 0 x00000000L R9 stk INT32U 0 x00000000L R8 stk INT32U 0 x00000000L R7 stk INT32U 0 x00000000L R6 stk INT32U 0 x00000000L R5 stk INT32U 0 x00000000L R4 return stk 其他的钩子函数都为空函数 这样 整个移植的代码就介绍完了 整个移 植的过程非常容易 剩下的工作就是编写用户任务 并在开发板上验证 以此 来验证该移植方案是可行的和成功的 武昌工学院毕业论文 设计 专用稿纸 12 3 LCD 屏程序设计及调试屏程序设计及调试 3 1 工具概述工具概述 RVMDK 源自德国的 KEIL 公司 是 RealView MDK 的简称 RealView MDK 集成了业内最领先的技术 支持 ARM7 ARM9 和 Cortex M3 核处理器 自动配置启动代码 集成 Flash 烧写模块 强大的 Simulation 设备模块 性能分 析等功能 3 1 1 keil4 工程建立以及仿真方法工程建立以及仿真方法 1 新建工程 打开 MDK 软件 选择 Project New uVision Project 菜单项 新建一个文件 夹名为 毕业设计 保存 则弹出器件选择对话框 这里选择 STM32F103RB 单击 OK 按钮 则弹出一个对话框加载启动文件到工程中 打开 毕业设计 文件夹 在里面添加子文件夹 2 添加系统文件与工程管理 回到 毕业设计 文件夹中 把系统 SYSTEM 文件夹 delay sys usart 文件夹 复制过来 再建立 main 和 hardware 文件夹用于主函数和各外设资源函数 回 到工程中 点击 manage components 添加工程中的文件 进行分类管理工程 3 最后新建 main 文件 在编辑区写代码 3 1 2 硬件平台绍硬件平台绍 ALIENTEK MiniSTM32 选择的是 STM32F103RBT6 作为 MCU STM32F103 的型号众多 作为一款低端开发板 选择 STM32F103RBT6 是最佳的选择 128K FLASH 20K SRAM 2 个 SPI 3 个串 口 1 个 USB 1 个 CAN 2 个 12 位的 ADC RTC 51 个可用 IO 脚 这样的配置无论放到那里都是很不错的了 更重要的是其价格 18 元左右的零售价 相对其他芯片配置及价格 所以我们选择了它作为我们的主 芯片 BOOT1 用于设置 STM32 的启动方式 其对应启动模式如表 3 1 所示 表表 3 1 BOOT0 BOOT1 启动模式表启动模式表 BOOT0BOOT1启动模式说明 0X用户闪存存储器用户闪存存储器 也就是 FLASH 启动 10系统存储器系统存储器启动 用于串口下载 11SRAM 启动SRAM 启动 用于在 SRAM 中调试代码 按照表 3 1 一般情况下如果我们想用用串口下载代码 则必须配置 BOOT0 为 1 BOOT1 为 0 而如果想让 STM32 一按复位键就开始跑代码 则 需要配置 BOOT0 为 0 BOOT1 随便设置都可以 ALIENTEK 这款开发板专门 设计了一键下载电路 通过串口的 DTR 和 RTS 信号 来自动配置 BOOT0 和 武昌工学院毕业论文 设计 专用稿纸 13 BOOT1 因此不需要用户来手动切换他们的状态 直接串口下载和软件自动控 制 可以非常方便的下载代码 P3 和 P1 分别用于 PORTA 和 PORTB 的 IO 口引出 其中 P2 还有部分用 于 PORTC 口的引出 PORTA 和 PORTB 都是按顺序排列的 这样设计的目的 是为了让大家更方便地与外部设备连接 P2 连接了 DS18B20 的数据口以及红 外传感器的数据线 它们分别对应着 PA0 和 PA1 只需要 19 通过跳线帽将 P2 和 P3 连接起来就可以使用了 这里不直接连在一起的原因有二 1 防止红外 传感器和 DS18B20 对这两个 IO 口作为其他功能使用的时候的影响 2 DS18B20 和红外传感器还可以用来给其他板子提供输入 等于我们的板子 为别的板子提供了红外接口和温度传感器 在调试的时候 还是蛮有用的 P4 口连接了 PL2303 的串口输出 对应着 STM32 的串口 1 PA9 PA10 在使用 的时候 也是通过跳线帽将这两处连接起来 这样设计有 2 个好处 1 使得 PA9 和 PA10 用作其他用途 使用的时候 不受到 PL2303 的影响 2 USB 转串口可以用作他用 并不 仅限在这个板上的 STM32 使用 也可以连接到其他板子上 这样 ALIENEK MiniSTM32 就相当于一个 USB 串口 P5 口是另外一个 IO 引出排阵 将 PORTC 和 PORTD 等的剩余 IO 口从这里引出 在此部分原理图中 我们还可以看到 STM32F103RBT6 的各个 IO 口与外 设的连接关系 这些将在后面给大家介绍 这里 STM32 的 VBAT 采用 CR1220 纽扣电池和 VCC3 3 混合供电的方式 在有外部电源 VCC3 3 的时 候 CR1220 不给 VBAT 供电 而在外部电源断开的时候 则由 CR1220 给 VBAT 供电 这样 VBAT 总是有电的 以保证 RTC 的走时以及后备寄存器的 内容不丢失 3 2 硬件结构硬件结构 3 2 1 STM32 最小系统最小系统 STM32F103 最小系统包括电源电路 复位电路 时钟电路 主芯片和下载 接口 STM32F103 使用 3 3V 供电 且引脚接有滤波电容 保证芯片工作稳定 复位电路使用的低电平复位 该电路上电可以复位 按键按下时也可以复位 时钟电路使用 8MHZ晶振 和 22pF 电容助振 武昌工学院毕业论文 设计 专用稿纸 14 图图 3 1 最小系统最小系统 3 2 2 LCD 接口接口 显示电路使用的是 2 4 寸的 TFT 液晶显示器 该显示器有 16 位的数据口和 5 位的控制端口 图图 3 2 液晶显示液晶显示 3 2 3 LED 接口接口 输入单元和指示部分 直接引到 STM32F103 的 IO 口 图图 3 3 按键和按键和 LED 灯灯 武昌工学院毕业论文 设计 专用稿纸 15 3 2 4 红处接收电路红处接收电路 HS0038 用于显度的采集 其通信是单总线式 直接与 STM32F103 相连 图图 3 4 红处接收单元红处接收单元 3 3 C 程序设计程序设计 在 C OS II里面创建6个任务 开始任务 LED0 LED1 触摸屏 KEY按 键任务和LCD显示任务 开始任务用于创建其他 LED0 LED1 红处接收 按键和LCD显示 任务 之后挂起 LED0任务用于控制DS0的亮灭 DS0每秒 钟亮800ms LED1任务用于控制DS1的亮灭 DS1亮300ms 灭300ms 依次循 环 触摸屏任务用于手写输入 并立即显示 LCD显示任务用于显示图形 和 接收红外信号信息显示出来 KEY按键任务分别使屏进入校准功能 以及显示 欢迎界面 首先 建立基本的工程后 在该工程源码下面加入 C OS II文件夹 存放 C OS II源码 我们已经将 C OS II源码分为三个文件夹 CORE PORT和 CONFIG 打开工程 新建 C OS II CORE C OS II PORT和 C OS II CONFIG三个分组 分别添加 C OS II三个文件夹下的源码 并将这三个文件夹 加入头文件包含路径 C OS II CORE分组下面是 C OS II的核心源码 我们不需要做任何变动 C OS II PORT分组下面是我们移植 C OS II要修改的3个代码 这个在移 植的时候完成 C OS II CONFIG分组下面是 C OS II的配置部分 主要由用户根据自己 的需要对 C OS II进行裁剪或其他设置 工程框架如下图3 5 其次 对 os cfg h 里面定义 OS TICKS PER SEC 的值为 200 也就是设置 C OS II 的时钟节拍为 5ms 同时设置 OS MAX TASKS 为 10 也就是最多 10 个任务 包括空闲任务和统计任务在内 再次 在 main c 文件中设置任务堆栈大小 设置任务优先级 任务堆栈 创建 5 个任务 如图 3 5 所示 武昌工学院毕业论文 设计 专用稿纸 16 图图 3 5 任务结构任务结构 3 4 调试调试 3 4 1 设置编译环境设置编译环境 1 打开 project 菜单 选择 Options for Target 毕业设计 对话框 如图 3 6 在 target 中 将晶振选为 8MHz 在 output 中 将 Creat HEX File 复选框选 中 为调试方便 将产生调试中间信息的复选框也选中 图图 3 6 编译环境窗口编译环境窗口 武昌工学院毕业论文 设计 专用稿纸 17 2 在 C C 中 将各分文件的路径加入如图 3 7 图图 3 7 路径添加路径添加 3 在 Debug 中 将 Use 选中并设置为 Cortex M R J LINK J Trace 设为 JINK 连接实物仿真了 4 在 Utilities 中 设置如图 3 8 并打开 Settings 设置 FLASH 为 256KB 图图 3 8 Utilities 3 4 2 调试结果调试结果 编译程序 排出 error 和 warning 如图 3 9 得到正确的程序 下载程序到 开发板上 得到了预期结果 图图 3 9 编译结果编译结果 将程序下载到开发板上 并观察现象 LED 小灯按程序要求正常运行 红 外接收器正确显示数值 按键 KEY0 可实现进入校准功能 KEY1 可以显示欢 迎界面 KEY2 可以清除 说明程序正确 现象如图 3 10 图图 3 10 实物现象实物现象 武昌工学院毕业论文 设计 专用稿纸 18 结结 语语 本文完成基于 32 位 ARMv7 微处理器 Cortex M3 和嵌入式实时操作系统 C OS II 的嵌入式操作系统的移植和功能的实现 经过几个月的深入学习 了 解了嵌入式操作系统 C OS II 的性能 特点 结构和基本运行原理 以及通过 实验调试的方法完成对 C OS II 时间管理函数 任务管理函数的灵活应用 认 真掌握 Cortex M3 的硬件结构和指令系统 并在 ALIENTEK MiniSTM32 开发 板上调试串口 TFT 彩屏以及 ADC 实验 本文将嵌入式实时操作系统 C OS II 移植到 Cortex 微处理器上 并对其进行系统测试和系统功能实现 实现了一 个基本完整的嵌入式实时操作系统 该系统一方面实现了单个 IO 口和多人 IO 口的组合输入输出控制 采用模块化设计思想 具有代表性 另一方面 它又 是一个相对完整的系统 可以应用于工业控制的各个显示终端 完成指示功能 由于实时操作系统内核 C OS II 是为嵌入式应用编写的通用软件 所以不得不 强调处理器的通用性和功能的全面性 在实际应用中可以根据需要裁减和优化 其次 本文所调度的任务较简单 主要是为了说明方法 在程序调试过程中 由于对 STM32RTB6 内核学习还不是很透彻 出现了 警告 一直困扰 任务中加入更多任务时老出错 程序不能正常运行 但通不 断学习 查阅资料得以解决 本人认真进行了课题的研究并完成了本论文 由于作者水平有限 论文中 可能仍有错误和不足之处 敬请大家批评指正 最后 感谢指导老师的关怀和细心的指导 感谢同学们的帮助 谢谢你们 的支持 武昌工学院毕业论文 设计 专用稿纸 19 主要参考文献主要参考文献 1 意法半导体 STM32中文参考手册 第10版 意法半导体 中国 投资公司 2010 2 刘军 例说 STM32 北京 北京航空航天大学出版社 2011 3 宋岩 译 Joseph Yiu Cortex M3 权威指南 北京 北京航空航天大学出版社 2009 4 刘荣 圈圈教你玩 USB 北京 北京航空航天大学出版社 2009 5 杜春雷 ARM 体系结构与编程 北京 清华大学出版社 2003 6 李宁 ARM 开发工具 Real View MDK 使用入门 北京 北京航空航天大学出 版社 2008 7 俞建新 嵌入式系统基础教程 北京 机械工业出版社 2008 8 李宁 基于 MDK 的 STM32 处理器开发应用 北京 北京航空航天大学出版社 2008 9 王永虹 STM32 系列 ARM Cortex M3 微控制器原理与实践 北京 北京航空航天 大学出版社 2008
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国小便自闭冲洗阀行业投资前景及策略咨询报告
- 2025至2030年中国型纸页成型器行业投资前景及策略咨询报告
- 2025至2030年中国单向阀球行业投资前景及策略咨询报告
- 2025至2030年中国偏八斗移门柜行业投资前景及策略咨询报告
- 闭环式用药管理制度
- 防冲撞设施管理制度
- 非招标采购管理制度
- 项目路进度管理制度
- 餐厅危险品管理制度
- 餐饮2公司管理制度
- DBJD25-67-2019甘肃省建筑与装饰工程预算定额地区基价不含税中册
- 餐饮服务员培训全流程解析
- 《成人高血压合并2型糖尿病和血脂异常基层防治中国专家共识(2024年版)》解读
- 工业互联网驱动的军工企业智能化改造路径研究-洞察阐释
- 《小学交通安全教育》课件
- 江西省2025年初中学业水平考试样卷(四)数学模拟试题 (含部分答案)
- 2024北京西城区五年级(下)期末英语试题及答案
- 2025届广东省东莞市东华中学初三联合考试数学试题试卷含解析
- 非人灵长类动物实验的现状、伦理问题及审查要点
- 数字人合同协议
- 小青瓦仿古屋面施工方案
评论
0/150
提交评论