基于ucos-ⅱ的ic卡门禁系统设计和实现内容摘要:
内核的功能,而这是 90 年代的嵌入式操作系统内核, 如 VxWorks 和 VRTXsa 才有的技术口 1。 2. 3 uC/ OSIl 的任务 IlC/ OSII 内核提供的基本服务是任务切换。 内核负责为每个任务分配 CPU 时问,并且负责各任务之间的通讯。 一个任务,就是一个简单的程序,该程序可以独享 CPU 控制权。 在实时 应用的过程中,设计者把问题分割成多个任务,并动态的为每个任务赋予一定 的优先级,使每个任务至少能解决一个问题阳 1。 从实现角度来看, uC/ OSII 是一组 C 函数库,应用程序代码与内核函数库 连接在一起,生成一个目标代码。 任务通常是一个无限的循环。 它拥有自己的代 码和堆栈空间 保存该任务的寄存器、返回地址和 I 临时参数 ,一般都是空函数, 不会返回任何值。 任务执行一次后,设置延时参数 OSTimeDLY。 表明在经过 OSTimeDLY 个时钟周期后再次运行,然后任务进行切换,使其他任务运行。 例如: void Task void 参数定义; for ;; 任务执行代码; 第二章嵌入式实时操作系统Ⅱ C/ OS― II OSTimeDLY ;//延时函数:清除任务就绪标志,设置延时的时钟周期。 OSSched ://调用 OSSched 进行任务调度。 2. 4 uC/ OSII 任务的状态与转换 通常情况下,每个任务都处在以下这五种状态之一曲 1。 ●休眠态 休眠态表示该任务驻留在内存中,但并不被多任务内核所调度。 ●就绪态 就绪表示该任务已经准备好,可以运行了,但由于该任务的优先级比 正在运行的任务的优先级低,所以暂时还不能运行。 ??运行态 . 运行态的任务是指该任务掌握了 CPU 的控制权,正在运行中。 . ?? 挂起态 . . 挂起状态也可以叫做等待事件态 WAITING,指该任务在等待某一事件 的发生 ??被中断状态 发生中断时, CPU 提供相应的中断服务, 原来正在运行的任务就进入 了被中断状态。 图 2― 1 表示 pc/ os― II 中一些函数提供的服务,这些函数使任务从一种状 态变到另一种状态。 图 2― 1 任务状态转换 第二章嵌入式实时操作系统 uC/ OSII uc/ os 提供了以下原型函数,对任务进行管理。 建立任务: OSTaskCreate 删除任务: OSTaskDel 请求删除任务: OSTaskDelReq 挂 起任务: OSTaskSuspend 恢复任务: OSTaskResume 堆栈检验: OSTaskStkChk 获得有关任务的信息: OSTaskOuery 2. 5 u Ier C/ OSII 的任务调度 Schedu 任务调度主要是协调任务对计算机系统内资源 如内存、 I/ 0 设备、 CPU 的 争夺使用。 任务调度又称为 CPU 调度,其基本原理是按照某种原则为处于就绪 状态的进程分配 CPU。 由于嵌入式系统中内存和 I/ O 设备一般都和 CPU 同时归 属于某任务,任务调度可分为”剥夺型调度”和”非剥夺型调度”两种基本方式。 所谓”非剥夺型调度”是指:一旦某个进程被调度执行,则该进程一直执行 下去直至该进程结束,或由于某种原因自行放弃 CPU 进入等待状态,才将CPU 重新分配给其他任务。 所谓”剥夺型调度”是指:一 旦就绪状态中出现优先权更高的进程,或者运 行的任务已用满了规定的时间片时,便立即剥夺当前任务的运行 将其放回就绪 状态 ,把 CPU 分配给其他任务口训。 作为实时操作系统, Ilc/ os― II 是采用的可剥夺型实时多任务内核。 可剥 夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。 如果是中断服 务子程序使一个高优先级的任务进入就绪态,到中断服务完成时,内核让此时 优先级最高的任务运行 不一定是那个被中断了的任务 ,如图 22。 任务级系 统响应时间得到了最优化,且是可知的。 Low T 镐 lc Priodty / 鬣溺 i makes the hig TaskT 量 TI 二 prIo 啊蜮删 y“蘸溺 ―ISR 图 22 可剥夺内核 第二章嵌入式实时操作系统 uC/ OS― II IJC/ OSII 调度工作的内容可以分为两部分:最高优先级任务的寻找和任务 切换„ 1。 其最高优先级任务的寻找是通过建立就绪任务表来实现的。 内核将系 统中处于就绪态的任务在就绪表 ReadyList 进行标注,通过就绪表中的两个 个任务 有唯一的优先级,因此任务的优先级也是任务的唯一编号 ID ,可以作 为任务的唯一标识。 |lc/ os― II 中的每一个任务都有独立的堆栈空问,并有一 control 个称为任务控制块 TCB task block 的数据结构,记录任务执行的环 境,包括任务的优先级、任务的堆栈指针、任务的相关事件控制块指针等,其 中第一个成员变量就是保存的任务堆栈指针。 内核可用控制块优先级表 用任务控制快 OS― TCB、就绪表 Ready List 中找 来进行任务调度的。 任务调度程序 OSSched 首先由就绪表 Ready 到当前系统中处于就绪态的优先级最高的任务,然后根据其优先级由控制块优 TASK 先级表 OSTCBPrioTbl 口取得相应任务控制块的地址,由 OSSW 程序进 行运行环境的切换。 将当前运行环境切 换成该任务的运行环境,则该任务由就 绪态转为运行态。 当这个任务运行完毕或因其它原因挂起时,仟务调度程序 OSSched 再次到就绪表 ReadyList 中寻找当前系统中处于就绪态中优先级 最高的任务,转而执行该任务,如此完成任务调度。 若在任务运行时发生中断, 则转向执行中断程序,执行完毕后不是简单的返回中断调用处,而是由 OSIntExit 程序进行任务调度,执行当前系统中优先级最高的就绪态任务。 当系统中所有任务都执行完毕时,任务调度程序 OSSched 就不断执行优先级 、 最低的空闲任务 OSTaskIdle ,等待用户程序的运行。 Task 任务调度器 the Scheduler 实现函数: void OSSched void INT8U Y: 0S― ENTER_CRITICAL : I if OSLockNestingOSIntNesting : 0 胁调度锁,或者处于中断状态禁止调度木/ y: OSUnMapTbl[OSRdyGrp]; /; l:获取准备就绪组里最高优先级的任务木/ if OSPrioHighRdy! OSPrioCur 第二章嵌入式实时操作系统 uC/ OSII /木设置运行任务为最高优先级任务木/ OSCtxSwCtr++: /木执行运行环境切换木/ OS― TASK_SW : OS― EXIT― CRITICAL : 为缩短切换时问, OSSched 全部代码都可以用汇编语言写。 IJC/ OSII任 务调度所花的时间是常数,与应用程序中建立的任务数量无关。 2. 6 uC/ OSII 的时钟中断 2. 6. 1 系统中断 中断是一种硬件机制,用于通知 CPU 有个异步事件发生了。 中断一旦被系 统识别, CPU 则保护现场 CONTEXT ,即部分 或全部 寄存器的值,跳转到专门 的子程序,称为中断服务子程序 ISR。 中断服务子程序对事件进行处理,处理 完成后执行任务调度,开始运行优先级最高的任务Ⅱ刳。 中断使得 CPU 可以在事件发生时再予以处理,而不必让微处理器连续不断 地查询 POLLING 是否有事件发生。 通过两条特殊宏指令:关中断 DisableInterrupt 和开中断 EnableInterrupt ,可以让微处理器不响应 或响应中断。 在门禁系统的设计中,关中断的时间和中断服务的处理时间都设 计的尽可能的短,以避免引起中断丢失。 2. 6. 2 系统时钟节拍 时钟节拍中断是一个非常重要的、特定的周期性中断 时钟中断 ,因为整 个操作系统的活动都受到它的激励。 这个中断可以看作是系统心脏的脉动。 操 作系统通过时钟中断来确定时 间间隔,实现时问的延时及确定任务超时。 中断 之间的时问问隔取决于不同的应用,一般在 10,200Ills 之间。 时钟的节拍式中 断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时 提供等待超时的依据168。 3I。 时钟节拍频率越快,门禁系统的额外开销就越大。 因 此系统定义了 32 位无符号整数 OSTime 来记录系统启动后时钟滴答的数目。 在 多任务系统启动以后再开启时钟节拍器,也就是在调用 OSStart 之后。 u 实现的。 时钟节拍中断服务子程序的伪代码如下: I 第二章嵌入式实时操作系统 uC/ OS― I void OSTickISR v。基于ucos-ⅱ的ic卡门禁系统设计和实现
相关推荐
过程中要考虑完成系统功能需要用到哪些控件、这些控件之间的关系以及它们的相关性和重要性。 在大多数接口设计中,不是所有的接口元素都一样重要。 仔细斟酌是很有必要的,以确保越是重要的元素越要快速地显现给用户。 重要的或者频繁访问的元素应当放在显著的位置上,而不太重要的元素就应当降级到不太显著的位置上。 把控件分成组也很重要,尽量按功能或逻辑关系进行分组。 例如对数据库操作的按钮应当被形象地分成一组
会因素方面的可行性分析 ( 1) 法律方面的可行性 该系统的开发和研制 ,将不会侵犯他人、集体和国家的利益,不会违犯国家政策和法律。 ( 2) 使用方面的可行性 该系统由操作简单,售票工作者稍加培训即可操作,顾客购票操作简单明了,极易上手。 ( 3) 技术可行性 本系统由吾等三人小组设计及验证,所涉及知识均为大学本科阶段所学内容,不懂或者不会的内容可通过自学或请教老师解决。 因此在技术是可行的。
dd()。 打开添加新提醒的窗体 新窗体中,获取年月日时分秒,以及提醒方式,提醒内容的信息,并存于闹钟结构体数组中。 值得说明的是,年月日时分秒都是 int型变量,提醒方式也根据项目序号,返回 int型变量,确定是哪一种方式。 完成后为闹钟编号 +1 当新窗口选择 OK,则将结构体数组中的数据,格式化处理,在主窗口的 ListControl中增加一行。 执行刷新函数。 其中的关键算法是 :
内对换相控 制的次数进行统计来实现。 由于所用的电机转一圈换相 6 次,故设置定时器 T2 定时 ,在此定时时间内换相次数记为 N,则转速即为 100N/min。 流程图如下图 6 示: 图 6 转速测量程序流程图 键盘控制与 液晶显示 图 7 键盘程序流程图 键盘则用于设定给定转速。 其程序流程图如图 7 所示。 液晶显示 主要分为两部分: 说明文 字的显示及 参数 值的显示。
~85176。 C7 = 工业级温度范围, 40176。 C~105176。 C内部代码 A 或者空 (详见产品数据手册 ) 选项 xxx = 已编程的器件代号 (3个数字 )TR = 卷带式包装 2) STM32 系列的最小系统设计和 独立的 A/D 转换器供电和参考电压 最小系统主要包括调试接口 .震荡电路 .引导设置 .复位电路和供电系统。 电路由稳定的电源 VDD供电。 值得注意的是
3)MQ3 气体传感器的特点 (1) 灵敏度高 (2) 快速响应恢复特性 (3) 使用寿命长 (4) 稳定性可靠 (5) 驱动回路简单 (6) 可以抵抗 其他气体 的干扰 (7) 具有信号输出指示 (8) 双路信号输出,并具有信号输出指示 (9) TTL 输出有效信号为低电平 (10) 输出电压范围为 05V 4)MQ3 气体传感器对酒精 气体 浓度的标定 第 6 页 共 31 页 传感器 内部