利用多线程思想实现单片机系统的伪并行处理

发布者:MysticalSoul最新更新时间:2012-03-09 来源: 微计算机信息 关键字:多线程  单片机控制系统  多线程模拟 手机看文章 扫描二维码
随时随地手机看文章

1. 引言 
    随着计算机的不断发展,越来越多的,优秀的编程思想被提出来,并付诸实践。在某些方面已出现了根本性的变革。另一方面,单片机自从80年代诞生以来,便以飞快的速度发展起来,但由于其物理条件的限制,单片机控制系统的编程仍然局限于经验的模式,很少应用那些新提出的高级语言的编程思想。如果将不断发展的编程思想与广泛应用的单片机控制系统结合起来,一定会大大促进单片机控制系统的进一步发展。使其更广泛的应用于各个方面。
    在下面这个具体项目中,实际情况对系统有一些比较苛刻的要求。按照一般的单线程的控制方法已经无法满足实际需求。具体情况如表1(表1所示为生化分析仪的设计中对单片机系统的要求的一部分)


 表1

    表1所示只占了整个系统要求的1/6。下面对表1中的几项内容加以说明。
    对象M1开始动作17操作,即首先步进电机M1(正向)转动查找光电开关信号PS1;查到后执行两次‘过程1‘。过程1:向电机打出30拍。由表1可知该动作从C  段执行到  K段停止;
    对象M2即步进电机M2等对象M1执行完动作17后执行动作23等。对象M3和对象M4 则在开始时同时启动,分别执行各自的动作。各个对象之间有的独立,有的相互关联。
    整个项目需要控制16台步进电机,21个电磁阀,3个泵,1个直流电机,系统要求全部执行时间为6秒钟,系统要求步进电机以其最快的速度 -----40us—60us打拍。如果以单线程的方式编程让一台电机转到位之后,再转其他电机。这样16台电机打一拍就需要640us---960us 已经无法满足系统要求。这就需要使单片机并行控制多台电机运转。这种以并行的方式驱动各个电机同时启动可以在最短的时间将各个电机同时到位。在转动电机的同时还需要检测一些开关量已确定电机的位置。为了实现这个目的。下面提供第一种解决方案(此方案是常用的方案之一,但作者并不推荐这个方案。因为这个方案成本太高。)。
    方案一:  硬件实现。
    我们可以用多个CPU,将各个电机的控制分到不同的CPU中执行,并可将不互相冲突的电机控制过程放到一个CPU中,其结构如图1
 

1cpu实现方案结构图


    如图所示系统中设定一个主CPU,其功能为与计算机通讯,并将计算机下达的指令分发给相应的从CPU,更主要的是主CPU将监控整个并行控制的运作。因为各个控制过程之间有的彼此关联,所以主CPU不仅要控制各个线程的执行,还要兼顾线程之间的通讯。以表1为例,具体作法如下:
      1.开始后,主CPU发给从CPU1一个信号,从CPU启动对象M1进行动作17,并由从CPU向主CPU返回一个信号。主CPU收到信号后,置起标志1。当对象M1进行完动作17后,从CPU向主CPU发出信号,CPU将标志1清掉。
      2.开始后,主CPU发给从M2一个信号,从CPU启动对象M2。从CPU向主CPU不断查询标志1。当标志1被清掉后,从//控制对象2执行动作23。
      3.开始后,主CPU发给从CPU一个信号,从CPU启动对象M3和对象M4。执行动作25,然后开电磁阀6,然后延时1秒,关电磁阀6,执行动作24,然后执行动作26,等////1的动作17完成后,启动步进电机20,执行动作25,等等。
    如上所说, 主CPU设置了多个标志位用以跟踪各个线程的运行情况。并用这些标志位承担了各个相关线程之间的通讯。凡是线程运行到与其他线程相关的地方都会在主CPU 内设置一个标志位以供其它相关线程查询。而那些不相关的线程可以完全独立运行。相关线程除了需检测标志的部分,其他部分也可独立运行。
     这种多CPU控制的作法实现了单片机的并行运作方式。但多CPU的控制方案成本几乎是成倍提高,而且在硬件的基础上实现的多CPU之间的通讯花费时间稍长。并且容易有干扰。
     方案二(作者推荐): 另一种实现的方法是在软件的层面上模拟多cpu的运作。从而实现单片机的伪并行处理.这种实现方法借鉴了计算机实现多线程的编程方法。
     多线程编程编程思想,即:同时给CPU分配了几个任务或线程。当然计算机 CPU实际上不可能同一时间做几件事,而是把时间分到不同的线程,使每个线程都有点进展。如果一个线程无法进行,比如线程要求的键盘输入尚未取得,则转入另一个线程的工作。通常,CPU在线程间的切换非常迅速,使人们感觉好象所有的线程是同时进行的。
多线程编程中有一个很重要的环节:各个线程之间的通讯与控制问题[page]
    在多线程编程中,每个线程都用编码提供线程的行为,用数据供给编码操作。多个线程同时处理同一编码和数据,不同线程可能各有不同的编码和数据。事实上,编码和数据部分是相当独立的,需要时即可向线程提供。因此经常是几个线程使用同一段编码和数据这就会出现下面的情况
     当一个线程在调用数据时,另一个线程可能正在修改这些数据。则前一个线程所调用的数据出现了不确定性。这会影响整个运行结果。为了避免这个问题,多线程编程中,各个线程之间通讯和控制尤为重要。在将多线程的思想向单片机控制系统移植时,这点要非常注意。因为系统多线程运作的实现从其最基本的层面看仍然是单线程的操作;他的实现归根结底是利用了计算机的高速度。它将系统运行的基准时间分成了许多时间片,将各个时间片分给不同的线程,如此一来在一个基准时间内各个线程全都向前行进了一步,然后运行下一个基准时间,周而复始。这样在用户层的角度看来,各个线程是同步进行的。只要速度够块,时间片的划分不会影响用户层面上的应用,这样就可以实现多线程的操作。近年来单片机速度的大幅度提升,这就使多线程思想向单片机控制系统的移植成为可能。
     在整个项目中全部的输入信号共39个;同时并行查询的对象最多时有61个系统要求以步进电机最快的速度打拍。时间约40us---60us,为了保证步进电机打拍的稳定性和灵活性。我选用了DSP内部的一个定时器,定时时间为打拍时间的1/3—1/5。设定为10us中断。这个时间为整个系统运行的基准时间。在这段时间内,系统要查询一遍所有对象并向相应的步进电机打拍。在一些线程中还需要采样多次。换句话说,在这个系统时间内。所有线程都要向前行进一步。
    就像计算机一样,将这个基准时间分为多个时间片。将各个时间片分给不同的线程,在这种情况下,各个线程的执行是间断的。这与用硬件模拟多线程有本质的不同。像这样既要应用各线程执行的间断性,又要保证各线程运行的连续性。这对软件的设计有了很高的要求,这同时也是单片机控制系统用软件模拟多线程方法中的难点之一,为了解决这个问题,可在个线程自带线程进度指示器用来标志线程的运行进度,即用一个变量记载线程的每一步;如图2



图2

    系统设定线程进度指示器用来指引线程的连续运行,同时在一个中断中轮询所有对象。其编程结构大致如下:
时钟中断:
    线程1:
         线程进度标志:
           1:    ;
           2:    ;
           3 ;
       
        线程2:
   线程进度标志:
         1:    ;
         2:    ;
        。。。。。。。。

    用软件模拟多线程还有很多要注意的地方。
    如果选用20兆的DSP来实现控制功能,步进电机最快的打拍速度为40us---60us,则有下面的计算结果,,取1/4,即10us产生一中断,在中断里查询61个对象。20兆DSP单条指令的执行时间大约为50ns在一次中断内可执行的语句数=10us/50ns=200条,如果在分给61个对象,每个对象所分得的指令数仅为3条,已经不够用了,即使选择60兆的DSP,说分指令也只是9条,若以牺牲打拍的灵活性为代价,以60us为已中断。则每个对象所分得的指令数仅为36条勉强够用,如果所控制的对象再多的话,软件编程的灵活性将进一步被压缩,
    下面提出了一种扩展的多线程模拟方法,如图3


图3    

    s1,s2为系统运行的基准时间,M1.1 为第一对象组中第一对象。M1.2 为第一对象组中第二对象。

    这种扩展的多线程模拟方法仍将系统时间化成多个时间片,与上面不同的是有几个线程(对象)组成一个线程组,共享同一个时间片,例如:当系统运行到第一次基准时间的第一个时间片时,由共享时间片的第一个线程占用,当系统运行到第2次基准时间的第1个时间片时,由共享时间片的第2个线程占用,如此类推,这种扩展模式可以灵活的掌控线程与所用时间的比例,但是这是以牺牲运行时间为代价的。

    结论:本文对单片机控制系统的编程思想作出了扩展,将本属于计算机高级语言编程思想的多线程编程移植到单片机控制系统中。这种方法使单片机控制系统可工作于对系统运行速度要求很高的系统中,并且对其他的高级语言编程思想,如对事件句柄的处理等向单片机控制系统移植起了示范作用。

  参考文献
  [1]柳永新主编。Windows c 程序设计入门与提高。清华大学出版社,1999,6。
  [2]李朝青主编。单片机原理及接口技术,1994。

关键字:多线程  单片机控制系统  多线程模拟 引用地址:利用多线程思想实现单片机系统的伪并行处理

上一篇:80C196KC-ADMC401双CPU接口电路设计/其应用
下一篇:基于80C196KB的线阵CCD高速采集系统

推荐阅读最新更新时间:2024-03-16 12:55

基于单片机模拟路灯控制系统设计方案
  本文采用高效节能环保的LED 灯作为光源,利用传感器模块、光控路灯模块、恒流源模块来实现,根据环境、交通等因素,单片机采集光敏电阻或光电开关的信号控制路灯的亮灭,实现了光电和时间控制; 同时具有交通情况检测、故障自动检测与报警等功能,实现了路灯的智能化控制,节省了电力能源和人力资源。    1 系统设计要求方案   1.1 系统设计要求。   设计并制作一套模拟路灯控制系统,路灯布置如图1 所示。要求实现模拟路灯控制系统的时钟功能,设定显示开关灯时间,并能控制支路按时开灯和关灯;根据环境明暗的变化自动控制开灯和关灯; 根据交通情况自动调节亮灯状态; 独立控制每只路灯的开灯和关灯时间; 当路灯出现故障时,支路控
[电源管理]
基于<font color='red'>单片机</font>的<font color='red'>模拟</font>路灯<font color='red'>控制系统</font>设计方案
基于AVR单片机的LED显示屏控制系统的研究
  1 引言   LED 显示屏是八十年代后期在全球迅速发展起来的新型信息传播媒体,是集微电子技术、光电子技术、计算机技术、信息处理技术于一体的大型显示系统。它以其色彩鲜艳、动态范围广、亮度高、寿命长、工作性能稳定而日渐成为显示媒体中的佼佼者,广泛应用于广告、证券、信息传播、新闻发布等方面, 是目前国际上较为先进的宣传显示媒体 .本文提出了一种主从式单片机的LED 显示屏解决方案, 该设计方案利用AVR 单片机自身的FLASH ROM 和RAM,外部无需任何存储电路,电路结构简单。   2 系统的工作原理及总体方案设计   2. 1 AVR 单片机   AVR 单片机是增强型内置FLASH 的RISC(ReducedIns
[电源管理]
基于AVR<font color='red'>单片机</font>的LED显示屏<font color='red'>控制系统</font>的研究
基于单片机的链梯降速控制系统的设计
高层建筑遇险无动力循环链梯逃生装置,对居住于高层建筑的人们遇火逃生十分必要。无动力消防链梯是一种典型的变负载非线性系统,随着负载的增加,发电机绕组中的电流增加,磁场增强,转速加快,链梯的下降速度也增大。系统要求不论负载如何变化,链梯稳定下降的速度必须保持在0.4 m/s~0.5 m/s,为此,本文设计了一种基于单片机的参数自适应模糊PID控制器,根据链梯的实际响应在控制过程中自动调整、修改和完善控制规则与参数,从而使系统的控制性能不断完善,达到最佳的控制效果。 1 系统的主要硬件电路设计 控制系统的硬件主要由传感器、控制器和执行器三大部分组成。传感器作为输入部分,用于测量发电机的转速,将其转换为电信号;控制器的作用是接收传
[单片机]
基于<font color='red'>单片机</font>的链梯降速<font color='red'>控制系统</font>的设计
基于51单片机自动巡线轮式机器人控制系统设计
轮式移动机器人是机器人研究领域的一项重要内容.它集机械、电子、检测技术与智能控制于一体。在各种移动机构中,轮式移动机构最为常见。轮式移动机构之所以得到广泛的应用。主要是因为容易控制其移动速度和移动方向。因此.有必要研制一套完整的轮式机器人系统。并进行相应的运动规划和控制算法研究。笔者设计和开发了基于51型单片机的自动巡线轮式机器人系统。   2 控制系统总体设计   机器人控制系统由主控制电路模块、存储器模块、光电检测模块、电机及舵机驱动模块等部分组成,控制系统的框图如图1所示。 控制系统的框图   3 主控制模块设计   3.1 CPLD设计   在机器人控制系统中.需要控制多个电动机和行程开关.还要进行光电
[单片机]
基于51<font color='red'>单片机</font>自动巡线轮式机器人<font color='red'>控制系统</font>设计
利用AVR单片机设计医用智能型液体点滴速度控制系统
静脉输液是我国目前临床治疗中最主要的一种输液方式,在实践工作中,医护人员一般是靠经验和观察通过转动输液器上的滑轮对滴速进行手动调节的。本系统是一种非接触式全自动的静滴检测和报警控制装置,时刻检测液体的滴速,并且在药液滴完后能够自动地切断液体进行本地和远程报警,以通知医护人员及时更换液体,对提高现代医疗服务系统的效率和质量都有着非常重要的意义。 1. 研究意义 目前,医院静脉输液主要是人工控制,由人监控的静脉输液,无法正确调解药液流速,速度过快由于点滴里有钾元素的成分会造成血管刺激,通常刺激会表现为疼痛。但通常输液快慢要看自身身体情况,但输液还是会对血管和心脏,肾脏有刺激。利用现有的科技设计智能输液系统,即可以控制药液流速、检测
[单片机]
利用AVR<font color='red'>单片机</font>设计医用智能型液体点滴速度<font color='red'>控制系统</font>
PIC16C72单片机的空调控制系统的研制
  热泵式分体壁挂空调以其优越的性能,已越来越被广大家庭所选用,其功能更是日新月异,而对其功能的提高起核心作用的其控制系统。本文介绍一种基于PIC16C72控制的空调控制系统设计方法。   该系统具有制冷、制热、除湿、自动4种工作模式,包括定时、睡眠、风向、智能化霜、应急运转、试运转以及5种可调室内风速等控制功能;在定时开机时,可根据访间温度作智能判断,自动调整定时开机时间,避免开机时太冷或太热;另外,可对设定温度和房间温度两种温度的10个温度值进行同时指示,以及完整的抗干扰和系统保护功能。   本系统硬件简单可靠,软件具有更完善的控制功能和抗干扰能力。系统具有很高的性能价格比。   1 控制器原理   系统CPU根据遥控
[单片机]
PIC16C72<font color='red'>单片机</font>的空调<font color='red'>控制系统</font>的研制
步进电机的单片机控制系统的设计
1 引言 本文主要研究基于8051 单片机的步进电机的驱动器,驱动采用H - 桥驱动电路,使步进电机可在智能化程序控制下完成正转、反转、加减速及细分等各种操作。文中所设计的H - 桥驱动电路可使步进电机具有更高的性能,同时把数字电路与驱动电路隔离开,避免了步进电机运行时所产生的冲击电压和电流干扰单片机。 2 控制系统的硬件设计 步进电机的单片机控制系统硬件原理图如图1所示。 图1 步进电机的单片机控制系统硬件原理图 系统中采用并行控制,用单片机接口线直接去控制步进电机各相驱动线路。键盘作为一个外部中断源,设置了步进电机正转、反转、档次、停止等功能,采用中断和查询相结合的方法来调用中断服务程序,完成对步进电机的最佳控制,显示
[单片机]
步进电机的<font color='red'>单片机</font><font color='red'>控制系统</font>的设计
基于USB和多线程的实时数据采集系统
摘要:说明基于USB技术的实时数据采集系统的硬件、软件实现;重点介绍PDIUSBD12带并行总线的USB接口器件以及基于多线程思想设计应用程序的方法。 关键词:USB PDIUSBD12 多线程 实时数据采集 1 问题的提出 随着信息技术的飞速发展,各种数据的实时采集和处理在现代工业控制中已成为必不可少的。这就为我们的设计提出了两个方面的要求:一方面,要求接口简单灵活且有较高的数据传输率;另一方面,由于数据量通常都较大,要求主机能够对实时数据做出快速响应,并及时进行分析和处理。 传统的外设与主机的通信接口难以满足上述第一个方面的要求。这些接口一般采用PCI部线或RS-232串行总线。PCI总线虽然有很高的传输率(可达132
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved