新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于嵌入式的地铁杂散电流监测装置的设计

基于嵌入式的地铁杂散电流监测装置的设计

作者:时间:2009-05-21来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/152477.htm

可以看到,传统的程序是单任务机制的,各个模块构成一个整体,作为一个任务运行。在实际应用中,这种程序的安全性差,只要一个系统的模块出了错误,整个系统工作就会被打乱,只有利用看门狗进行复位。这对于比较复杂的系统,在实际运行中看门狗就会频繁地发生复位操作。而且由于数据采集和键盘程序的执行频率可能相差很多,这样对系统的定时要求就会很高,传统的程序流程对实时性就难以很好地满足。
3.3.2  ucosII 的系统程序流程
ucosII 的程序流程如图4所示。程序中,每个模块对应一个任务,彼此之间是并行的,但每个模块都对应着一个不同的优先级,由进行调度运行。系统可以通过监控模块对其他模块的工作进行监控,从而减少看门狗的复位次数。而且通过ucosII 内核的任务调度,系统的实时性会提高很多。

3. 4 任务的划分和构成
系统中并行存在的几个任务按优先级从高到低依次是:显示任务、键盘管理任务、输出任务、各路数据数据采集任务和数据处理任务。系统采用静态优先级,这样系统的控制会相对比较简单。
系统中的每个任务包括应用程序、任务堆栈以及任务控制块( TCB) 三部分。任务控制块是一个数据结构,当任务的CPU 使用权被剥夺时,ucosII 用它来保存该任务的状态。当任务重新获得CPU 的使用权时,任务控制块能确保任务从被中断的那一点执行下去。可以通过查询任务控制块的内容从而对任务进行管理。系统中任务的状态有5 种:休眠态、就绪态、运行态、中断服务和等待态。状态之间的转换如图5所示。

休眠态时任务驻留在程序空间中,还没有交给uc/ os2II 管理。当任务一旦建立,就进入就绪态。就绪态中优先级最高的任务转为运行态。如果系统的运行导致就绪态中的一个任务优先级高于运行态的任务优先级,则系统通过调度使运行态任务丧失对CPU 的控制权转为等待态或者就绪态,转而运行就绪态中的那个任务。这样就实现了任务的切换。
每个处于等待态的任务都对应一个等待时间,时间管理函数可将等待时间已过的等待态的任务转为就绪态,这实际上也就是时钟中断的中断服务程序。
3.5 任务的通信和调度
本系统中任务间的通信采用消息队列来完成的。消息队列是uc/ os2II 中的一种通信机制,可以使一个任务或者中断服务子程序向另一任务发送以指针方式定义的变量。为方便易用,采用消息队列,用于数据采集任务、数据处理任务、键盘管理任务、输出任务、显示任务之间的通信。系统通过队列控制块来管理消息队列,每个消息队列对应一个队列控制块。消息的存取基于优先级原则,队列控制块中等待任务列表内优先级任务最高的任务先从消息队列中取消息,系统采用抢占式内核,调度函数总是保证优先级最高的就绪态任务转为运行态。当就绪态的任务抢占CPU 时,系统执行一次中断服务程序。当任务中的消息发送完成以及中断返回时,系统调用调度函数,将任务从等待态转为就绪态,这样就绪态中任务的最高优先级就会发生变化,进而影响到运行态和就绪态间的任务切换。在本系统中,正在运行的任务需要通过消息(调用OSQPEND( ) 函数) 来等待一个事件的发生。假如该事件一直没有出现,调用该函数的任务将被置于等待状态(优先级最低的任务可不需要等待某个消息) 。此时下一个优先级最高的任务将立即获得CPU 控制权。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

基尔霍夫电流相关文章:基尔霍夫电流定律




评论


相关推荐

技术专区

关闭