本科-嵌入式ARM-第7章 电脑自动打铃器设计与实现.ppt_第1页
本科-嵌入式ARM-第7章 电脑自动打铃器设计与实现.ppt_第2页
本科-嵌入式ARM-第7章 电脑自动打铃器设计与实现.ppt_第3页
本科-嵌入式ARM-第7章 电脑自动打铃器设计与实现.ppt_第4页
本科-嵌入式ARM-第7章 电脑自动打铃器设计与实现.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统 胡威武汉科技大学计算机学院 电脑自动打铃器设计与实现 绪论 电脑自动打铃器设计与实现 通过对ARM7TDMI体系结构 LPC2000系列ARM C OS II微小内核分析与程序设计基础的深入学习之后 我们已经对嵌入式系统有了比较清晰的了解 本章将结合一个具体的实例 电脑自动打铃器来阐述嵌入式应用系统的工程设计方法 目录 设计要求 任务设计 硬件设计 程序设计 电脑自动打铃器设计与实现 设计要求 系统功能 系统框图 设计要求 电脑自动打铃器设计与实现 系统功能 具有实时时钟功能 能显示时分秒 年月日星期 采用8位数码管显示 具有键盘输入功能可以设置若干个闹钟 以及闹钟的禁止与使能可设置每个闹钟发生时的输出动作 一共四路输出 可独立设置每路输出的时间和电平状态 设计要求 电脑自动打铃器设计与实现 系统框图 LPC2000系列ARM具有RTC功能 RTC掉电后仍可使用电池继续运行 从而保证了系统掉电后时钟的准确性 ZLG7290是一款键盘和LED驱动芯片 最多支持64个按键和8个共阴极数码管 电脑自动打铃器设计与实现 硬件设计 键盘显示电路 输出控制电路 硬件设计 电脑自动打铃器设计与实现 键盘显示电路 本设计实例基于SmartARM2200A工控开发平台实现 SmartARM2200A工控开发平台提供I2C0接口 可以和PACK板 PanelModuleZYPM7290 连接 组成键盘显示电路 硬件电路及连接方法请参考配套教材 硬件设计 电脑自动打铃器设计与实现 输出控制电路 图示为输出控制模拟电路 在实际应用中 可能需要控制继电器等 电脑自动打铃器设计与实现 任务设计 任务的划分 任务的数据结构设计 任务的优先级设计 多任务之间的同步与互斥 多任务之间的信息传递 任务设计 电脑自动打铃器设计与实现 任务的划分 对一个嵌入式应用系统进行 任务划分 是实时操作系统应用软件设计的关键 任务划分是否合理将直接影响软件设计的质量 以CPU为中心 关键 功能 紧迫 功能 消耗机时 关系密切 相同事件触发 运行周期相同 固定顺序执行 任务划分原则如下 首先 以CPU为中心 将与各种输入 输出设备 或端口 相关的功能分别划分为独立的任务 发现 关键 功能 将其最 关键 部分 剥离 出来 用一个独立任务 或ISR 完成 剩余部分用另外一个任务实现 两者之间通过通信机制沟通 发现 紧迫 功能 将其最 紧迫 部分 剥离 出来 用一个独立的高优先级任务 或ISR 完成 剩余部分用另外一个任务实现 两者之间通过通信机制沟通 将消耗机时较多的数据处理功能划分出来 封装为低优先级任务 对于既 关键 又 紧迫 的功能 按 紧迫 功能处理 将关系密切的若干功能组合成为一个任务 达到功能聚合的效果 将由相同事件触发的若干功能组合成为一个任务 从而免除事件分发机制 将运行周期相同的功能组合成为一个任务 从而免除时间事件分发机制 将若干按固定顺序执行的功能组合成为一个任务 从而免除同步接力通信的麻烦 任务设计 电脑自动打铃器设计与实现 任务的划分 电脑自动打铃器任务划分如下 电脑自动打铃器具有键盘输入功能 用于设置时钟和闹钟 因此需要一个键盘任务 电脑自动打铃器需要有显示功能 用来显示时钟和闹钟 因此需要一个显示任务 电脑自动打铃器需要一个输出控制任务 用来控制闹钟时间到后各路的输出 电脑自动打铃器具有实时时钟功能 需要一个RTC中断 任务设计 电脑自动打铃器设计与实现 任务的优先级设计 人机接口 实时性低 控制接口 实时性高 任务设计 电脑自动打铃器设计与实现 任务的优先级设计 优先级 6 优先级 12 优先级 13 任务设计 电脑自动打铃器设计与实现 任务的数据结构设计 对于一个任务 除了它的代码 任务函数 外 还有相关的信息 为保存这些信息 必须为任务设计对应的若干数据结构 任务需要配备的数据结构分为两类 一类是与操作系统有关的数据结构 另外一类是与操作系统无关的数据结构 任务的数据结构 任务设计 电脑自动打铃器设计与实现 任务的数据结构设计 与操作系统有关的数据结构 一个任务要想在操作系统的管理下工作 必须首先被创建 在 C OS II中 任务的创建函数原型如下 任务设计 电脑自动打铃器设计与实现 任务的数据结构设计 在电脑自动打铃器应用中 我们设计了3个任务 键盘任务 显示任务和输出控制任务 与操作系统有关的数据结构定义如下 defineTASKKEY ID12 定义键盘任务的ID defineTASKKEY PRIOTASKKEY ID 定义键盘任务的优先级 defineTASKKEY STACK SIZE512 定义键盘任务堆栈的大小 defineTASKDISP ID13 定义显示任务的ID defineTASKDISP PRIOTASKDISP ID 定义显示任务的优先级 defineTASKDISP STACK SIZE512 定义显示任务堆栈的大小 defineTASKCTRL ID6 定义控制任务的ID defineTASKCTRL PRIOTASKCTRL ID 定义控制任务的优先级 defineTASKCTRL STACK SIZE512 定义控制任务堆栈的大小 OS STKTaskKeyStk TASKKEY STACK SIZE 定义键盘任务的堆栈OS STKTaskDispStk TASKDISP STACK SIZE 定义显示任务的堆栈OS STKTaskCtrlStk TASKCTRL STACK SIZE 定义控制任务的堆栈voidTaskKey void pdata 键盘任务声明voidTaskDisp void pdata 显示任务声明voidTaskCtrl void pdata 控制任务声明 任务设计 电脑自动打铃器设计与实现 任务的数据结构设计 与操作系统无关的数据结构 电脑自动打铃器具有时钟和闹钟功能 那么我们首先就要构造这两个数据结构 定义如下 时钟结构定义structtime unsignedcharucHour 时unsignedcharucMin 分unsignedcharucSec 秒unsignedcharucWeek 星期unsignedshortusYear 年unsignedcharucMon 月unsignedcharucDay 日 typedefstructtimeTIME typedefTIME PTIME 闹钟结构定义structalarm unsignedcharucHour 时unsignedcharucMin 分unsignedcharucSec 秒unsignedcharucEnable 闹钟使能控制struct unsignedshortusLevel 输出电平控制unsignedshortusTime 输出时间控制 c 4 4路输出控制 typedefstructalarmALARM typedefALARM PALARM 定义时钟和闹钟全局变量 defineMAX ALARM4 最大闹钟个数TIMEGtimeCurrentTime 时钟全局变量ALARMGalarmRingTime MAX ALARM 闹钟全局变量 任务设计 电脑自动打铃器设计与实现 多任务之间的同步与互斥 为了说明问题 我们在这里将键盘任务拆分成为两个任务 一个是键盘扫描任务 另一个是键盘处理任务 二者之间使用消息邮箱进行同步 行为同步 发送键值消息 接收键值消息 键盘扫描任务扫描到按键 就向消息邮箱发送键值消息 键盘处理任务应及时处理键值消息 二者之间是同步接力的关系 任务设计 电脑自动打铃器设计与实现 多任务之间的同步与互斥 资源互斥 在电脑自动打铃器的设计中 ZLG7290是通过I2C总线与LPC2000连接的 I2C总线是键盘任务和显示任务的共享资源 必须遵循资源互斥的原则进行访问 二者之间使用信号量进行资源互斥 申请I2C资源 释放I2C资源 申请I2C资源 释放I2C资源 任务设计 电脑自动打铃器设计与实现 多任务之间的信息传递 全局变量 在任务的数据结构设计中 我们设计了时钟和闹钟两个数据结构 并定义了时钟和闹钟两个全局变量 键盘任务 显示任务和RTC中断通过它们传递信息 任务设计 电脑自动打铃器设计与实现 多任务之间的信息传递 消息邮箱 RTC中断检测闹钟 闹钟到就向输出控制任务发送控制信息 在本设计实例中使用消息邮箱 发送控制消息 接收控制消息 人机界面设计 键盘任务 主函数 显示任务 RTC中断 输出控制任务 电脑自动打铃器设计与实现 程序设计 程序设计 电脑自动打铃器设计与实现 人机界面设计 对于一个具有人机界面的应用系统来说 首先应该考虑的是人机界面如何设计 8位数码管显示力度有限 只能通过按键分屏显示 显示界面定义如下 时钟模式 12时59分59秒星期一 程序设计 电脑自动打铃器设计与实现 人机界面设计 对于一个具有人机界面的应用系统来说 首先应该考虑的是人机界面如何设计 8位数码管显示力度有限 只能通过按键分屏显示 显示界面定义如下 时钟模式 2007年12月12日 程序设计 电脑自动打铃器设计与实现 人机界面设计 对于一个具有人机界面的应用系统来说 首先应该考虑的是人机界面如何设计 8位数码管显示力度有限 只能通过按键分屏显示 显示界面定义如下 闹钟模式 A表示闹钟 0表示第一个闹钟 闹钟时间08 30 00 程序设计 电脑自动打铃器设计与实现 人机界面设计 对于一个具有人机界面的应用系统来说 首先应该考虑的是人机界面如何设计 8位数码管显示力度有限 只能通过按键分屏显示 显示界面定义如下 闹钟模式 闹钟使能控制 E使能 d禁能 从左至右 第一个是总开关 接着是星期6 0 分别对应星期日 星期一 的开关 程序设计 电脑自动打铃器设计与实现 人机界面设计 对于一个具有人机界面的应用系统来说 首先应该考虑的是人机界面如何设计 8位数码管显示力度有限 只能通过按键分屏显示 显示界面定义如下 闹钟模式 C表示通道 0表示第一个通道 每个闹钟有4个通道 H L表示输出高低电平控制 接着是输出时间控制 最大为9999秒 程序设计 电脑自动打铃器设计与实现 人机界面设计 根据上述分析 电脑自动打铃器具有时钟和闹钟模式 时钟和闹钟模式都分别有不同的显示内容 闹钟模式还有若干不同的闹钟 为了修改时钟和闹钟的设置 还需要一个光标闪烁来提示用户进行修改 为此定义了如下全局变量 unsignedintGuiMode 0 模式 时钟和闹钟模式 unsignedintGuiCursor 8 光标 闪烁位置提示 unsignedintGuiIndex 0 索引 不同的闹钟 unsignedintGuiItem 0 条目 时钟或闹钟的不同内容 按键的处理比较灵活 可自行设计 程序设计 电脑自动打铃器设计与实现 主函数 在程序设计的讲解中 首先讲一下主函数 在主函数中 进行了操作系统的初始化 创建了一个键盘任务 最后 启动多任务操作系统 程序如下所示 intmain void OSInit 初始化uC OS II创建键盘任务 代码可参考配套教材OSStart 启动多任务操作系统return 0 程序设计 电脑自动打铃器设计与实现 键盘任务 键盘任务首先进行目标板的初始化 主要完成系统时钟中断的设置 然后初始化I2C0总线接口并设置中断 然后创建消息邮箱GmboxRingCtrl 用于闹钟触发输出控制任务 接着初始化RTC并设置中断 最后创建了显示任务和输出控制任务 就进入了周期性循环 通过读取ZLG7290获取键值 进行按键处理 键盘任务负责解释按键 设置时钟和闹钟 目标板初始化 I2C0初始化 创建消息邮箱GmboxRingCtrl RTC初始化 创建显示任务和输出控制任务 任务循环 程序设计 电脑自动打铃器设计与实现 显示任务 显示任务负责显示界面的刷新 流程图如下所示 显示任务周期性的输出全局变量的信息 时钟和闹钟 100ms是一个经验值 用户会觉得比较舒服 不会产生 系统死机 的感觉 程序设计 电脑自动打铃器设计与实现 输出控制任务 输出控制任务首先初始化输出控制端口 默认为高电平 然后进入任务循环 从消息邮箱获取一条消息 由于消息邮箱没有消息

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论