汇编语言多任务调度编程技术_张小鸣.pdf
电脑纵横汇编语言多任务调度编程技术江苏石油化工学院计算机系(常州 213016)张小鸣 毕美华 摘 要 文章通过实例介绍在单任务汇编语言开发环境中,加入多任务调度设计思想,使复杂多分支汇编程序编写和维护性变得非常方便,实现方法简单易行。关键词 汇编语言 单片机 任务调度 中断 事件触发1 汇编语言单任务机制编程特点8086 汇编语言、MCS51/96 汇编语言、DSP 汇编语言等程序设计方法是建立在单任务机制基础上的,具有易掌握、易模拟化、易 I/O 控制、代码短等优点,特别适合编写 I/O 中断处理程序、较简单数据处理算法、低速异步串行通信程序等,但是当中断源超过 3 个以上时,就暴露出一些问题。第一,当多个中断源同时申请中断或在 CPU 响应一个中断期间发生另外几个中断请求,可能造成有些中断请求不响应;第二,用户很难确定中断源的轻重缓急,当优先级设置不当或高优先级中断服务程序时间太长,造成优先级较低中断得不到进一步服务;第三,既使 CPU 均能响应各中断源要求,可扩充性和可稳定性也较脆弱,一旦增加中断模块,原各模块之间的平衡被打破,需要重新调试,确定各模块之间的优先级和相互协调关系。由此可见,只有从机制上进行改制,引入多任务机制编程原理,才能克服上述问题,编写经济实用的复杂程序。2 多任务机制的核心思想正如 Visual Basic 等面向对象的程序设计一样,在结构化程序设计的基础上,增加事件驱动机制和消息排队技术,使不同级中断模拟按照优先级排队,同级多中断源按事件触发次序排队,CPU 按中断优先级处理中断响应,对于同级多中断源,按 FIFO 方式依次处理,并赋予每个排队的中断源被处理/时间片0,保证 CPU 均能响应任何中断请求,不丢失服务事件。事件触发标志寄存器用来记录每个中断是否发生,1 标志位表示发生,CPU 尚未处理消息,只有处理完毕,才清除。事件驱动机制应用于汇编程序与面向对象程序设计有所不同,汇编程序中事件指中断,不论内中断或外中断,CPU 均要响应,但是在中断服务程序中,立即触发另一个中断或处理时间很长,就可能丢失对低优先级中断的响应,或与另一个即将发生的同级中断产生矛盾。为避免这种情况发生,作为触发事件的中断服务程序不再触发另一个中断(比如发送中断,A/D 转换中断等),只进行事件标志登录和消息(待处理数据)指针排队,使事件触发型中断的处理时间较短,将消息的进一步处理交给任务调度程序按优先级排队依次处理。任务调度程序把各中断模块看成子任务,周期性(定时器定时)检查队列是否空,不空,用队列头指针(任务指针)取出消息块首址给任务程序进行处理。对于按 FIFO 结构排队的消息队列,每处理完一个消息块,立即处理下一个消息块,使每个任务都能按执行频率要求得到及时处理。3 多任务机制设计技术首先,设计一个队列 RAM 缓冲器,每个元素占用 2个字节,存放消息块首址,通常用DW 伪指令创建。这个队列元素按任务优先级排队,值得注意的是,对同级多中断源(即公用一个中断向量)创建一个子队列,具有 FIFO 属性。其次,设计一个任务指针,初始化指向队列首址,再设计一个头指针和尾指针初始化均指向 FIFO子队列首址。任务指针和头指针用于读取消息块首址,尾指针用于存放事件触发产生的待处理消息块首址。接着,设计一个事件标志寄存器,初始化清零。再设计一个同级多中断源事件计数器,初始化清零。每当发生一次中断,事件计数器加 1,尾指针存放待40(744)上海欣方智能系统公司(021)3605 4510 6300 5电子技术62001 年第 12 期处理消息块首址后加 2;CPU 处理完一个消息,头指针加 2,事件计数器减 1,当减为 0,头指针和尾指针重新初始化。4 设计实例锅炉仿真仪是模拟锅炉操作过程的训练装置,主要有单片机控制器,操作面板,模拟显示屏,PC 等组成。PC 运行锅炉仿真数学模型,通过 RS232C 传送锅炉运行信息给单片机控制器,后者控制操作面板按钮指示灯,模拟电压表以及报警指示灯的刷新显示,并且定时扫描操作面板的设备开停按键,阀门开度按键,调节阀调节按键,接收训练者模拟锅炉操作的按键序列,发送给 PC 评判,若操作违反规程,PC 传送信息携带有效报警开关量,通过单片机控制器点亮模拟显示屏上对应的报警灯,指示操作有误;刷新因错误操作引发的按钮指示灯和模拟电压表状态,指示错在哪里。根据设计要求,每 10ms 定时中断扫描 8279 传感器矩阵构成 28 个设备开停按键,8255 并口构成的 36 个阀门开度按键和 10 个阀门开度按键。每当按下一个按键,产生 3 字节的键盘消息块发送给主机:02H(字节长度),键号,键值。通信协议要求,单片机控制器每隔 500ms 发送2字节刷新请求命令给主机 01H,0FEH。主机收不到刷新请求命令,不会传送锅炉运行信息。开始,用单任务机制编程,500ms 定时发送与仅按一个键的发送的程序容易实现,只要设置一个按键标志位,在 500ms定时发送期间或随后限定最长超时机构定时 400ms 的接收 PC 传输数据期间,键盘消息块暂不发送,否则立即发送。如果发生一个以上的按键序列,就要设置一系列的按键标志位,判标志转移分支程序很多,结构不清晰,程序流程无章,阅读性变差,维护困难。然后,采用多任务机制编程,设计 2 级多任务调度程序。第一级管理 500ms 定时发送模块、接收模块、按键发送模块;第二级管理 10ms 定时按键序列多任务,程序结构如图 1 所示。500ms 定时发送中断发生后,才有可能产生接收中断,这两个中断公用一个中断向量,优先级高于按键扫描电路公用一个定时中断向量。按键消息块首址按照按键按下先后顺序存入 FIFO 队列,先按下的任务调度时先发送。由此可画出上述多任务消息队列结构如图 2所示。FIFO 队列是个向下开口的 RAM 缓冲区,可容纳最长按键序列消息块排队。图 1 程序框图图 2 队列结构 第一级任务调度设计一个发送/接收标志寄存器 TXRXF,D0=1 表示发送消息正在处理;D1=1表示接收消息正在处理,初始化全清零。由于 500ms 定时发送中断和按键消息发送中断公用一个串行中断向量,故设一个发送标志位SENDF,为 0 表示 500ms 定时发送;为 1 表示按键消息发送。第二级任务调度设计一个按键计数器,每按一个键加 1,对应按键消息块发送后减 1。上述 3 个任务的触发频率并不高,按键扫描频率最高 10ms,因此制定调度程序分配时间片最短时间为 10ms,最长为 1s(500ms 定时中断发生时,按键消息队列尚未处理完,则必须取消 500ms 定时触发发送事件,等下一个 500ms 定时触发再发送)。3 个任务模块占用定时时间的分配表如表 1 所列。表 1 模块占用时间分配表序号模块名定时时间典型值1500ms 发送模块500ms2接收模拟 400ms(400ms 超时重发)3按键模块10ms 串行中断程序调度主要完成串行接收结束(包括 400ms 定时超时重发导致的串行接收结束,比如主机故障,传输线故障等,在 500ms 定时发送后,收不到串行数据或只收到部分数据)退出中断服务程5电子技术62001 年第 12 期 上海西门子通信电源公司 (021)5854 3080 207(745)41序之前,访问按键计数器,若不为 0,立即用当前头指针取出按键消息块发送。10ms 定时 中断调 度程 序主 要完成 先检 查500ms 发送中断是否正在进行,若不进行,再检查按键计数器是否不为零,是立即发送按键消息块。按上述方案编写的多任务调度程序结构清晰,调试周期短,成功率高,很快解决单任务机制下出现的 500ms 定时发送模拟和按键序列发送模块之间发生冲突悬而未决的问题。实际证明,在汇编语言中使用事件驱动机制、消息队列、多任务机制等高级语言中的程序设计思想,编写较复杂的监控程序,实时采集控制程序等,能起到事半功倍的效果,而且阅读性、维护性、扩充性、灵活性都明显提高,由于实现简单,并不需要用户花很大力气先编写一个小型实时操作系统(RTOS),因此值得推广应用。器件应用X25043/45 的特性及其在抄表系统中的应用山东大学电子工程系(济南 250100)孙志行 宋玉炎 何道刚 崔 强 摘 要 X25043/45 是一种可编程看门狗电路,它具有看门狗定时器、电压监控和片内 EEPROM三种常用功能,并且体积小、性能好,应用领域广泛。文章给出了 X25043/45 的引脚功能,阐述了其基本工作原理和软件设计方法,并介绍了在抄表系统中典型的应用。关键词 看门狗电路 X25043/45 抄表系统 单片机 中断1 概述在智能控制或数据采集系统中,看门狗电路是不可缺少的。时至今日,看门狗电路已经有许多现成的集成芯片,在设计电路时可以随意选择。但是,在电路高度集成化的今天,系统的小型化、多功能化已成为发展的必然趋势,单纯的看门狗电路芯片已不能满足系统设计的要求。X25043/45 把三种常用的功能:看门狗定时器,电压监控和 EEPROM 组合在单个封装之内。这种组合降低了系统成本,并减少了对电路板空间的要求。下面简单介绍 X25043/45 的功能。X25043/45 中的看门狗定时器对微控制器提供了独立的保护系统。当系统故障时,在可选的超时周期(timeout interval)之后将以RESET/RESET 信号作出响应。超时周期可通过编程从三个预置的值中选择,一旦选定,即使在电源周期变化之后,此周期也不会改变;X25043/45 中的低 Vcc 检测电路可以保护系统,使之免受电压状况的影响,当 Vcc 降到最小 Vcc 转换点以下时,系统复位,复位状态一直维持到 Vcc 返回并确保稳定为止;X25043/45 的存储器部分是 CMOS 的 4096 位串行 EEPROM,在内部按照 512 8 的形式组织,其突出特点是具有允许简单的三线总线工作的串行外设接口(serial per-pheral interface,SPI)和软件协议。2 X25043/45 芯片介绍X25043/45 采用 了 Xicor 公司专有 的 DirectWriteTM晶片,提供最小为 100 000 周期/字节的使用期限(endurance)和最小为 100 年的数据保存期。总的概括起来,X25043/45 的主要特点如下:(1)可编程的看门狗定时器;(2)低 Vcc 检测,直到 Vcc 为 1V 复位信号有效;(3)512 8 位的串行 EEPROM 可按 4 字节页的方式进行操作;(4)1MHz的时钟速率;(5)低功耗 CMOS 电路,仅需 10L A 的备用电流,工作电流也仅为 3mA;(6)电源电压容限范围是 2.7 5.5V;42(746)上海欣方智能系统公司(021)3605 4510 6300 5电子技术62001 年第 12 期