1200plc组态MODBUS

1200plc的MODBUS组态:

1、CB 1241 RS485,用MODBUS指令不用MODBUS RTU指令。

2、建OB100,在右边指令目录-通信-通信处理器-MODBUS-双击MB_COMM_LOAD,管脚MB_DB暂时空着,

3、建FC1,在右边指令目录-通信-通信处理器-MODBUS-双击MB_MASTER,

4、MB_MASTER块的DB数,填入上述MB_COMM_LOAD块的管脚MB_DB,

5、OB100中例程:

6、FC1中例程:

此为读多功能电表的电压。

经典c编程架构

1. 顺序执行法: 这种方法,这应用程序比较简单,实时性,并行性要求不太高的情况下是不错的方法,程序设计简单,思路比较清晰。但是当应用程序比较复杂的时候,如果没有一个完整的流程图,恐怕别人很难看懂程序的运行状态,而且随着程序功能的增加,编写应用程序的工程师的大脑也开始混乱。即不利于升级维护,也不利于代码优化。本人写个几个比较复杂一点的应用程序,刚开始就是使用此法,最终虽然能够实现功能,但是自己的思维一直处于混乱状态。导致程序一直不能让自己满意。 这种方法大多数人都会采用,而且我们接受的教育也基本都是使用此法。对于我们这些基本没有学习过数据结构,程序架构的单片机工程师来说,无疑很难在应用程序的设计上有一个很大的提高,也导致了不同工程师编写的应用程序很难相互利于和学习。 本人建议,如果喜欢使用此法的网友,如果编写比较复杂的应用程序,一定要先理清头脑,设计好完整的流程图再编写程序,否则后果很严重。当然应该程序本身很简单,此法还是一个非常必须的选择。 下面就写一个顺序执行的程序模型,方面和下面两种方法对比: 代码: /******************************************************************** ****************** * FunctionName : main() * Description : 主函数 * EntryParameter : None * ReturnValue : None

********************************************************************* *****************/ int main(void) { uint8 keyValue; InitSys(); // 初始化 while (1) { TaskDisplayClock(); keyValue = TaskKeySan(); switch (keyValue) { case x: TaskDispStatus(); break; ... default: break; } } } 2. 时间片轮询法 时间片轮询法,在很多书籍中有提到,而且有很多时候都是与操作系统一起出现,也就是说很多时候是操作系统中使用了这一方法。不过我们这里要说的这个时间片轮询法并不是挂在操作系统下,而是在前后台程序中使用此法。也是本贴要详细说明和介绍的方法。

浅谈单片机应用程序架构(原创)

时间片轮询法的架构: 对于单片机程序来说,大家都不陌生,但是真正使用架构,考虑架构的恐怕并不多,随着程序开发的不断增多,本人觉得架构是非常必要的。前不就发帖与大家一起讨论了一下《谈谈怎样架构你的单片机程序》,发现真正使用架构的并不都,而且这类书籍基本没有。 本人经过摸索实验,并总结,大致应用程序的架构有三种: 1. 简单的前后台顺序执行程序,这类写法是大多数人使用的方法,不需用思考程序的具体架构,直接通过执行顺序编写应用程序即可。 2. 时间片轮询法,此方法是介于顺序执行与操作系统之间的一种方法。 3. 操作系统,此法应该是应用程序编写的最高境界。 下面就分别谈谈这三种方法的利弊和适应范围等。。。。。。。。。。。。。 1. 顺序执行法: 这种方法,这应用程序比较简单,实时性,并行性要求不太高的情况下是不错的方法,程序设计简单,思路比较清晰。但是当应用程序比较复杂的时候,如果没有一个完整的流程图,恐怕别人很难看懂程序的运行状态,而且随着程序功能的增加,编写应用程序的工程师的大脑也开始混乱。即不利于升级维护,也不利于代码优化。本人写个几个比较复杂一点的应用程序,刚开始就是使用此法,最终虽然能够实现功能,但是自己的思维一直处于混乱状态。导致程序一直不能让自己满意。 这种方法大多数人都会采用,而且我们接受的教育也基本都是使用此法。对于我们这些基本没有学习过数据结构,程序架构的单片机工程师来说,无疑很难在应用程序的设计上有一个很大的提高,也导致了不同工程师编写的应用程序很难相互利于和学习。 本人建议,如果喜欢使用此法的网友,如果编写比较复杂的应用程序,一定要先理清头脑,设计好完整的流程图再编写程序,否则后果很严重。当然应该程序本身很简单,此法还是一个非常必须的选择。 下面就写一个顺序执行的程序模型,方面和下面两种方法对比: 代码: /****************************************************************************** ******** * FunctionName : main() * Description : 主函数 * EntryParameter : None * ReturnValue : None ******************************************************************************* *******/

采用时间轮询执行的C51程序

采用时间轮询执行的C51程序 来源:单片机及嵌入式系统应用作者:希麦特电子科技彭光红引言: 2002年初,笔者着手写一个IC卡预付费电表的工作程序,该电表使用Philips公司的8位51扩展型单片机87LPC764,要求实现很多功能,包括熄显示、负荷计算与控制、指示闪烁以及电表各种参数的查询等,总之,要使用时间的单元很多。笔者当时使用ASM51完成了这个程序的编写,完成后的程序量是2KB 多一点。后来,由于种种原因,这个程序并没有真正使用,只是作了一些改动之后用在一个老化设备上进行计时与负荷计算。约一年后,笔者又重新改写了这些代码。 1 系统的改进 可以说,这个用ASM51实现的代码是没有什么组织性可言的,要什么功能就加入什么功能,弄得程序的结构非常松散,其实这也是导致笔者最终决定重新改写这些代码的原因。 大家知道,87LPC764有4KB的Flash ROM,而笔者的程序量只有2KB多点,因而第一个想法是改用C 语言作为主要的开发语言,应该不至于导致代码空间不够用。其次,考虑到需要定时功能的模块(或称任务,以下统称任务)较多,有必要对这些任务进行有序的管理。笔者考虑使用时间片轮询方式,即给每个要求时间管理的任务以一个时间间隔,时间间隔一到,即运行其代码,达到合理使用系统定时器资源的目的。就51系统而言,一般至少一个定时器可用来进行时间片的轮询。基于以上的想法,构造了下述数据类型。 typedef unsigned char uInt8 typedef struct { void (*proc)(void); s_count; Op[cnt].proc(); } } }while(1);

电子称

智能称重系统软件设计 摘要 随着微电子技术的应用,市场上使用的传统称重工具已经满足不了人们的要求。为了改变传统称重工具在使用上存在的问题,在本设计中将智能化、自动化、人性化用在了电子秤重的控制系统中。本系统主要由单片机来控制,测量物体重量部分由称重传感器及A/D转 换器组成,加上显示单元,此电子秤俱备了功能多、性能价格比高、功耗低、系统设计简单、使用方便直观、速度快、测量准确、自动化程度高等特点。本系统以AT89C52单片机为主控芯片,外围附以称重电路、显示电路、报警电路、键盘电路等构成智能称重系统电路板,从而实现自动称重系统的各种控制功能。此设计所完成的智能称重系统很大程度上满足了应用需求。 关键词:AT89C52;称重传感器;A/D转换器;LCD显示器第一章前言 第一章:前言 1.1 称重系统的发展与应用 质量是测量领域中的一个重要参数,称重技术自古以来就被人们所重视。公元前,人们为了对货物交换量进行估计,起初采用木材或陶土制作的容器对交换货物进行计量。以后,又采用简单的秤来测定质量。据考证,世界上最古老的计量器具出土于中东和埃及,最古老的衡器和砝码出自于埃及。秤是最普遍、最普及的计量设备,电子秤取代机械秤是科学技术发展的必然规律。低成本、高智能化的电子称重系统无疑具有极其广阔的市场前景。50年代中期电子技术的渗入推动了衡器制造业的发展。60年代初期出现机电结合式电子衡器 以来,经过40多年的不断改进与完善,我国电子衡器从最初的机电结合型发展到现在的全电子型和数字智能型。我国电子衡器的技术装备和检测试验手段基本达到国际90年代中期的水平。电子衡器制造技术及应用得到了新发展。电子称重技术从静态称重向动态称重发展:计量方法从模拟测量向数字测量发展;测量特点从单参数测量向多参数测量发展,特别是对快速称重和动态称重的研究与应用。但就总体而言,我国电子衡器产品的数量和质量与工业发达国家相比还有较大差距,其主要差距是技术与工艺不够先进、工艺装备与测试仪表老化、开发能力不足、产品的品种规格较少、功能不全、稳定性和可靠性较差等很多不足的地.21世纪,电子产品变得越来越丰富,给人们带来了很多很多的方便,其中电子秤成了人们生活中不可缺少的一部分。大大小小的市场电子秤能够完成许多工作,为人们节省了时间,提高了工作效率。随着科技日新月异的发展,在21世纪种类繁多的电子称重系统。通过分析近年来电子称重产品的发展情况及国内外市场的需求,电子称重系统总的发展趋势是小型化、模块化、集成化、智能化;其技术性能趋向是速率高、准确度高、稳定性高、可靠性高;其功能趋向是称重计量的控制信息和非控制信息并重的“智能化”功能;其应用性能趋向于综合性和组合性。 1.2 选题背景与意义 电子称重系统是日常生活中常用的电子衡器,广泛应用于超市、大中型商场、物流配送中心。电子秤在结构和原理上取代了以杠杆平衡为原理的传统机械式称量工具。相比传统的机械式称量工具,电子称重系统有称量精度高、装机体积小、应用范围广、易于操作使用等优点,在外形布局、工作原理、结构和材料上都是全新的计量衡器。电子称重系统的设计首先是通过压力传感器采集到被测物体的重量并将其转换成电压信号。输出电压信号通常很小,需要通过前端信号处理电路进行准确的线性放大。放大后的模拟电压信号经A/D转换电路

单片机实时操作系统RTOS

51单片机实时操作系统 作者:徐少伟日期:2013年12月07日 摘要本文着重介绍了运行在51单片机上基于片轮询式实时操作系统RTOS的构建,讨论了实时操作系统的运行原理和设计思路。关键词:51单片机、片轮询、实时操作系统RTOS 1前言 随着计算机技术的发展,计算机已经被广泛地应用到各个领域中。而在控制领域,人们更多地关心计算机的低成本、小体积、运行的可靠性和控制的灵活性。特备是智能仪表、智能传感器、智能家电、智能办公设备、汽车及军事电子设备等应用系统要求计算机嵌入这些设备中。而作为嵌入式计算机的单片机因其体积小、可靠性高、控制功能强以及非凡的嵌入式应用形态,使得单片机应用技术已经成为电子应用系统设计中最为常用的技术手段。 在工业控制方面,因工业环境对计算机的可靠性和实时性的要求特别高,而诸如51系列的单片机的片上资源比较有限,因此开发并构建一种应用于单片机上的实时多任务操作系统已成为一种迫切的需求。 2实时操作系统设计概述2.1实时多任务操作系统(RTOS)简介 过去一个单片机应用程序所控制的任务和外设不多,采用一个主程序和几个子程序模块的调用,即可满足要求。但随着应用的复杂化,对单片机软件提出了更高的要求。一个控制器系统可

能需要同时控制或监控很多外设,要求有实时响应;有很多处理的任务,各种任务之间有信息的传递。如果仍采用原来的程序设计方法,将会存在两个问题。一是中断可能得不到及时响应,处理时间过长。二是系统任务多,要考虑的各种可能也多,各种资源如调度不当就会发生死锁,降低软件的可靠性,程序编写的任务量成指数增加。 实时操作系统是一段系统启动后首先执行的背景程序,用户的应用程序是运行在RTOS之上的各个任务。RTOS根据各个任务的要求,进行资源(包括存储器、外设等)管理、消息管理、任务调度、异常处理等工作。 实时多任务操作系统,以分时方式运行的多个任务,看上去好像是多个任务“同时”运行。标准的RTOS应具有任务调度、中断处理、事件管理、定时器管理、循环队列管理、资源管理、存储管理、自动掉电管理等功能,基于优先服务方式的RTOS才是真正的实时操作系统。 本文主要讨论了基于时间分片轮询方式,即片轮询方式的多任务操作系统,重点介绍多任务实时操作系统的原理和构建方法,为深入研究真正意义上的实时多任务操作系统RTOS奠定一定的理论和思想基础。 2.2实时多任务操作系统(RTOS)任务切换 在实时操作系统RTOS中,任务的切换方式有三种:协同方式、时间片轮询方式以及抢占优先级方式。 2.2.1协同方式 所谓“协同方式”,是指一个任务在持续运行而不释放资源,其他任务是没有机会获得运行

时间片调度在单片机中的运用

时间片调度在单片机中的运用 单片机在系统中充当CPU的角色,需要同时处理多个事务。如与PC机通用信,将受到的 信息转发给从机,监视数据处理情况等一些繁杂而又重要的事情。如何协调好各个事物,这 就需要在编写程序时采用合适的算法进行处理。一般方法就是在单片机中移植操作系统,由 操作系统来管理各个事物。但由于系统要占用一定的内部资源,这对本身资源非常有限的单 片机俩说是不现实的。所以,很少在单片机中采用操作系统,而是采用时间片轮询调度的方 法进行各任务的管理。时间片轮询调度是一种古老而又简单的算法,广泛的运用于无操作系 统的微处理器中。 在系统中,每个进程被分配一个时间段,称作时间片,   即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束   ,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。 时间片轮询调度中有趣的一点是如何确定时间片的长度。从一个进程切换到另一个进程是需要一定时间的,因为要保存和装入寄存器值及内   存映像等保护现场的工作,更新各种表格和队列等。假如进程切换,有时称为上下文切换,需要的时间为5毫秒,再假设时间片长度设定为   20毫秒,则在做完20毫秒有用的工作之后,CPU将花费5毫秒来进行进程切换。CPU时间的20%被浪费在了管理开销上。进程切换时间一定的情   况下,如果时间片长度设定的越小时,这种浪费更明显。所以,时间片长度与CPU 利用率是一对不可调和的矛盾,必须处理好它们之间的关   系。 为了提高CPU效率,我们可以将时间片长度设得大一些,这时浪费的时间只有就会相对减小。但在一个分时系统中,各个任务对时间片长度   的要求是不一致的。例如在一个系统中,可能要求每秒钟更新一下显示内容,每几十毫秒要扫描一下按键,每几毫秒要检测一下串口缓冲区   等……可见,各个任务对时间的依赖程度是不一样的。如果时间片设得太长,某些对实时性要求高的任务可能得不到执行,使得系统的实时   性变差。总之,时间片的设定应满足对实时性要求最高的那个任务,这样才能确保每个任务都可以及时得到执行而不被错过。

OS调度思想

一、进程(作业)调度算法 1.先来先服务调度算法(FCFS):每次调度是从就绪队列中,选择一个最先进入就绪队列的进程,把处理器分配给该进程,使之得到执行。该进程一旦占有了处理器,它就一直运行下去,直到该进程完成或因发生事件而阻塞,才退出处理器。特点:利于长进程,而不利于短进程。 2.短进程(作业)优先调度算法(SPF):它是从就绪队列中选择一个估计运行时间最短的进程,将处理器分配给该进程,使之占有处理器并执行,直到该进程完成或因发生事件而阻塞,然后退出处理器,再重新调度。 3.时间片轮转调度算法:系统将所有的就绪进程按进入就绪队列的先后次序排列。每次调度时把CPU分配给队首进程,让其执行一个时间片,当时间片用完,由计时器发出时钟中断,调度程序则暂停该进程的执行,使其退出处理器,并将它送到就绪队列的末尾,等待下一轮调度执行。 4.优先数调度算法:它是从就绪队列中选择一个优先权最高的进程,让其获得处理器并执行。 5.响应比高者优先调度算法:它是从就绪队列中选择一个响应比最高的进程,让其获得处理器执行,直到该进程完成或因等待事件而退出处理器为止。特点:既照顾了短进程,又考虑了进程到达的先后次序,也不会使长进程长期得不到服务,因此是一个比较全面考虑的算法,但每次进行调度时,都需要对各个进程计算响应比。所以系统开销很大,比较复杂。 6.多级队列调度算法 基本概念: 作业周转时间(Ti)=完成时间(Tei)-提交时间(Tsi) 作业平均周转时间(T)=周转时间/作业个数 作业带权周转时间(Wi)=周转时间/运行时间 响应比=(等待时间+运行时间)/运行时间 二、存储器连续分配方式中分区分配算法 1.首次适应分配算法(FF):对空闲分区表记录的要求是按地址递增的顺序排列的,每次分配时,总是从第1条记录开始顺序查找空闲分区表,找到第一个能满足作业长度要求的空闲区,分割这个空闲区,一部分分配给作业,另一部分仍为空闲区。 2.循环首次适应算法:每次分配均从上次分配的位置之后开始查找。

浅谈单片机程序架构

浅谈单片机应用程序架构 对于单片机程序来说,大家都不陌生,但是真正使用架构,考虑架构的恐怕并不多,随着程序开发的不断增多,本人觉得架构是非常必要的。前不就发帖与大家一起讨论了一下《谈谈怎样架构你的单片机程序》,发现真正使用架构的并不都,而且这类书籍基本没有。 本人经过摸索实验,并总结,大致应用程序的架构有三种: 1. 简单的前后台顺序执行程序,这类写法是大多数人使用的方法,不需用思考程序的具体架构,直接通过执行顺序编写应用程序即可。 2. 时间片轮询法,此方法是介于顺序执行与操作系统之间的一种方法。 3. 操作系统,此法应该是应用程序编写的最高境界。 下面就分别谈谈这三种方法的利弊和适应范围等。。。。。。。。。。。。。 1. 顺序执行法: 这种方法,这应用程序比较简单,实时性,并行性要求不太高的情况下是不错的方法,程序设计简单,思路比较清晰。但是当应用程序比较复杂的时候,如果没有一个完整的流程图,恐怕别人很难看懂程序的运行状态,而且随着程序功能的增加,编写应用程序的工程师的大脑也开始混乱。即不利于升级维护,也不利于代码优化。本人写个几个比较复杂一点的应用程序,刚开始就是使用此法,最终虽然能够实现功能,但是自己的思维一直处于混乱状态。导致程序一直不能让自己满意。 这种方法大多数人都会采用,而且我们接受的教育也基本都是使用此法。对于我们这些基本没有学习过数据结构,程序架构的单片机工程师来说,无疑很难在应用程序的设计上有一个很大的提高,也导致了不同工程师编写的应用程序很难相互利于和学习。 本人建议,如果喜欢使用此法的网友,如果编写比较复杂的应用程序,一定要先理清头脑,设计好完整的流程图再编写程序,否则后果很严重。当然应该程序本身很简单,此法还是一个非常必须的选择。 下面就写一个顺序执行的程序模型,方面和下面两种方法对比: 复制内容到剪贴板 代码: /****************************************************************************** ******** * FunctionName : main() * Description : 主函数 * EntryParameter : None

谈谈怎样架构你的单片机程序

本人经过摸索实验,并总结,大致应用程序的架构有三种: 1. 简单的前后台顺序执行程序,这类写法是大多数人使用的方法,不需用思考程序的具体架构,直接通过执行顺序编写应用程序即可。 2. 时间片轮询法,此方法是介于顺序执行与操作系统之间的一种方法。 3. 操作系统,此法应该是应用程序编写的最高境界。 下面就分别谈谈这三种方法的利弊和适应范围等。。。。。。。。。。。。。 1. 顺序执行法: 这种方法,这应用程序比较简单,实时性,并行性要求不太高的情况下是不错的方法,程序设计简单,思路比较清晰。但是当应用程序比较复杂的时候,如果没有一个完整的流程图,恐怕别人很难看懂程序的运行状态,而且随着程序功能的增加,编写应用程序的工程师的大脑也开始混乱。即不利于升级维护,也不利于代码优化。本人写个几个比较复杂一点的应用程序,刚开始就是使用此法,最终虽然能够实现功能,但是自己的思维一直处于混乱状态。导致程序一直不能让自己满意。 这种方法大多数人都会采用,而且我们接受的教育也基本都是使用此法。对于我们这些基本没有学习过数据结构,程序架构的单片机工程师来说,无疑很难在应用程序的设计上有一个很大的提高,也导致了不同工程师编写的应用程序很难相互利于和学习。 本人建议,如果喜欢使用此法的网友,如果编写比较复杂的应用程序,一定要先理清头脑,设计好完整的流程图再编写程序,否则后果很严重。当然应用程序本身很简单,此法还是一个非常必须的选择。 下面就写一个顺序执行的程序模型,方面和下面两种方法对比: 复制内容到剪贴板 代码: /*********************************************************************** *************** * FunctionName : main() * Description : 主函数 * EntryParameter : None * ReturnValue : None ************************************************************************ **************/ int main(void) { uint8 keyValue;

自考 12575 嵌入式系统设计

高纲1542 江苏省高等教育自学考试大纲 12575嵌入式系统设计 南京信息工程大学编江苏省高等教育自学考试委员会办公室

Ⅰ课程性质与课程目标 一、课程性质和特点 本课程是一门专业基础选修课,设置该课程的目的是为学习嵌入式系统设计原理及方法,根据应用要求,把相应的计算机直接嵌入到应用系统中,将嵌入式软件的知识体系和工程实践有机结合,使学生掌握嵌入式系统设计的基础理论、开发技术和工具,并具备嵌入式在通信、信息家电、工业控制、移动计算设备、网络设备等领域的设计、开发能力。 二、课程目标 嵌入式系统融合了计算机软/硬件技术、通信技术和半导体微电子技术。通过本课程学习: 1.使学生能够深刻理解嵌入式系统原理及其设计理论和方法; 2.培养嵌入式系统设计能力及素养; 3.让学生了解嵌入式系统设计的最新理论和方法。 三、与相关课程的联系与区别 嵌入式系统技术是目前国内外计算机科学领域最为活跃的研究领域之一,其特点是课程实践性强、内容丰富、涉及面广,紧密结合最新计算机前沿、知识更新快,时代性强。本课程需先修课程:数字逻辑,计算机组成原理、计算机系统结构、汇编语言、微机接口技术。 四、课程的重点和难点 1.LPC1700系列微控制器的性能、结构,系统控制模块; 2.LPC1700构建的硬件系统,包括电源电路,复位电路,输入输出电路,通信接口,存储电路等。 3.uc/os-II操作系统的特点,以及其针对LPC1700微控制器的移植。 Ⅱ考核目标 本大纲在考核目标中,按照识记、领会和简单应用三个层次规定其应达到的能力层次要求。三个能力层次是递升的关系,后者必须建立在前者的基础上。各能力层次的含义是:识记(Ⅰ):要求考生能够识别和记忆本课程中有关概念,并能够根据考核的不同要求,做正确的表述、选择和判断。 领会(Ⅱ):要求考生能够领悟和理解本课程中相关概念、特性,在实际应用中能够做出正确的选择。 简单应用(Ⅲ):要求考生能够根据已知的知识,进行硬件电路的设计以及相关程序的设计。 Ⅲ课程内容与考核要求 第一章LPC1700系列微控制器基础知识 一、学习目的与要求 掌握LPC1700系列微控制器的基础知识以及相关的调试方式。

利用“时间片轮询法”处理串口发送

利用“时间片轮询法”处理串口发送 就地控制器对于三相VBE控制器充当“主机”角色,它通过串口3、4、5要定时、轮流地去查询A、B、C三相VBE控制器的各种状态和参数等。由于需要定时、轮流地查询,所以在本程序中使用了“时间片轮询”这一程序结构。本文将对该程序结构作 一详细说明。 第一步:定义一个枚举类型,该类型说明了有哪些任务和任务的个数,定义如下所示:typedef enum _TASK_LIST { TAST_UART3_Tra, // 串口3发送 TAST_UART4_Tra, // 串口4发送 TAST_UART5_Tra, // 串口5发送 TASKS_MAX // 总的可供分配的定时任务数目 } TASK_LIST; 通过上面的枚举类型定义,可以知道我们的任务有三个,分别是串口3、4、5的发送,注意这里定义的任务名称在程序中没有其它的用途。该类型的最后一项是任务个数, 在这里为3。 第二步:定义一个结构体类型,该结构体定义了一个任务结构,定义如下所示:typedef struct _TASK_COMPONENTS { unsigned int Run; // 程序运行标记:0-不运行,1运行 unsigned int Timer; // 计时器 unsigned int ItvTime; // 任务运行间隔时间 void (*TaskHook)(void); // 要运行的任务函数 } TASK_COMPONENTS; // 任务定义 该任务有四个参数,具体功能如注释中所示,这里不再做详细介绍。 第三步:定义任务变量,并初始化。代码如下所示:

static TASK_COMPONENTS TaskComps[3] = { {0, 600, 600, UART3_Tra_Process}, // 串口3发送处理函数 {0, 400, 600, UART4_Tra_Process}, // 串口4发送处理函数 {0, 200, 600, UART5_Tra_Process}, // 串口5发送处理函数 }; 三个任务在初始状态都是处于不运行状态,在200毫秒后串口5发送处理函数被调用,再过200毫秒(即上电初始化后的第400毫秒后),串口4发送处理函数被调用。同 理600毫秒后串口3发送处理函数被调用。三个任务函数每两次被调用的时间间隔都 是600毫秒。这样就实现了向A、B、C三相VBE轮流发送报文的操作,轮流间隔时间为200毫秒。 第四步:在系统时钟中断(本程序为1毫秒中断)中调用计时任务标志处理函数。函 数代码如下所示: void TaskRemarks(void) { unsigned int i; for (i=0; i

单片机实时性文章

时分多线程在单片机系统中的应用研究 2010-08-0312:40:21作者:王江宁吕军来源:单片机与嵌入式系统应用 关键字:多线程单片机时分 随着IT技术的飞速发展,单片机应用系统几乎覆盖了社会生活的各个角落,从消费电子、通信网络、工业控制、汽车到军事等领域皆可觅其踪影;而在硬件、软件以及网络技术日益成熟的今天,其应用形式正呈现多样性和复杂性。尤其是SoC、可配置内核等性能的出现,其可裁剪性使系统设计成本大大降低,减小了系统设计工作量,为单片机应用提供了便利,在产品设计、更新换代等应用方面也备受青睐。 为适应这些纷繁的应用需求.本文就时分多线程技术在单片机中的应用进行了介绍。该方法为构建低成本、高效、便于维护的单片机系统提供了良好的体系框架结构和设计思想。 1时分多线程结构应用 通常,在单片机应用的各种控制系统中,都或多或少地存在着诸如现场数据采集、控制量输出、工作状态检测以及数据传输等各种同外设的交互过程;而各类外设与MCU的响应速度不匹配,是制约系统整体性能的重要因素。面对这种交互瓶颈,运用时分多线程架构可获得良好的效果。 特别是对于系统与外设频繁进行数据交互的场合,能显著提升系统的实时响应能力。这里采用的是以时分轮转调度算法实现在单片机系统中的多任务控制目标。 1.1时分轮转调度算法的多线程实现 时分轮转调度算法是以多个线程轮流占用CPU的执行时间来实现的。在外设交互频繁的应用场合中,可有效地解决响应速度不匹配所造成的CPU等待外设响应的时间消耗问题,从而提高MCU运算部件的利用率。 而在多线程的调度切换过程中,要对上一个线程的运行环境进行保护,并为下一个线程做好准备。就单片机系统而言,要严格实现真正意义上的实时多线程控制,会受到容量、中断源、指针等一系列系统资源的条件限制。 本文是以C8051F005单片机构建的应用系统。它是以805l内核为基础的,没有太多空间用于存放或保护任务切换时的现场数据(如程序指针、程序状态字、累加器等),也难于应用抢占式实时任务切换的实现激励机制,同时MCU速率也有限。

基于时间片轮询的操作系统

在系统中,每个进程被分配一个时间段,称作时间片,即该进程允许运行的时间。如果在时间片结束时,进程还在运行,则 CPU 将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则 CPU 当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。 时间片轮询调度中有趣的一点是如何确定时间片的长度。从一个进程切换到另一个进程是需要一定时间的,因为要保存和装入寄存器值及内存映像等保护现场的工作,更新各种表格和队列等。假如进程切换,有时称为上下文切换,需要的时间为 5 毫秒,再假设时间片长度设定为 20 毫秒,则在做完 20 毫秒有用的工作之后, CPU 将花费 5 毫秒来进行进程切换。 CPU时间的 20% 被浪费在了管理开销上。进程切换时间一定的情况下,如果时间片长度设定的越小时,这种浪费更明显。所以,时间片长度与 CPU 利用率是一对不可调和的矛盾,必须处理好它们之间的关系。为了提高 CPU 效率,我们可以将时间片的长度设的大一些,这时浪费的时间只有就会相对减小。但在一个分时系统中,各个任务对时间片长度的要求是不一致的。例如在一个系统中,可能要求每秒钟更新一下显示内容,每几十毫秒要扫描一下按键,每几毫秒要检测一下串口缓冲区等……可见,各个任务对时间的依赖程度是不一样的。如果时间片设得太长,某些对实时性要求高的任务可能得不到执行,使得系统的实时性变差。总之,时间片的设定应满足对实时性要求最高的那个任务,这样才能确保每个任务都可以及时得到执行而不被错过。 要在一个单片机系统中实现时间片轮询调度,需要依照以下的步骤: 2 确定任务总数及各个任务实对时间实时性的要求2 根据任务对时间的要求,确定时间片的长度 2 估算执行每个任务所花费的时间,确保任务能够在时间片的长度内执行完毕2 如果任务较大,时间片不足于让任务执行完,此时可细化该任务在下面的代码片段中,共有4 个任务需要执行,其中串口对实时性的要求最高。串口采用的波特率为2400Baud ,8 位数据,无校验,1 个停止  位。所以传输1 字节数据所需时间为:4.17ms ,故将时间片长度设定在4ms 是合理的。单片机主机系统的时间片处理函数如下所示

EtherCAT运行原理

目前有多种用于提供实时功能的以太网方案:例如,通过较高级的协议层禁止CSMA/CD存取过程,并使用时间片或轮询过程来取代它。其它方案使用专用交换机,并采用精确的时间控制方式分配以太网数据包。尽管这些解决方案能够比较快和比较准确地将数据包传送到所连接的以太网节点,但带宽的利用率却很低,特别是对于典型的自动化设备,因为即使对于非常小的数据量,也必须要发送一个完整的以太网帧。而且,重新定向到输出或驱动控制器,以及读取输入数据所需的时间主要取决于执行方式。通常也需要使用一条子总线,特别是在模块化 I/O 系统中,这些系统与Beckhoff K-总线一样,通过同步子总线系统加快传输速度,但是这样的同步将无法避免引起通讯总线传输的延迟。 通过采用EtherCAT技术, Beckhoff 突破了其它以太网解决方案的这些系统限制:不必再像从前那样在每个连接点接收以太网数据包,然后进行解码并复制为过程数据。当帧通过每一个设备(包括底层端子设备)时,EtherCAT从站控制器读取对于该设备十分重要的数据。同样,输入数据可以在报文通过时插入至报文中。在帧被传递(仅被延迟几位)过去的时候,从站会识别出相关命令,并进行处理。此过程是在从站控制器中通过硬件实现的,因此与协议堆栈软件的实时运行系统或处理器性能无关。网段中的最后一个EtherCAT从站将经过充分处理的报文返回,这样该报文就作为一个响应报文由第一个从站返回到主站。 从以太网的角度看,EtherCAT总线网段只是一个可接收和发送以太网帧的大型以太网设备。但是,该“设备”不包含带下游微处理器的单个以太网控制器,而只包含大量的EtherCAT从站。与其它任何以太网一样,EtherCAT不需要通过交换机就可以建立通讯,因而产生一个纯粹的EtherCAT系统。 端子实现以太网: 系统的每个设备都保证使用完整的以太网协议,甚至每个I/O端子亦如此,无需使用子总线。只需将耦合器的传输介质由双绞线(100baseTX)转换为E总线即可满足电子端子排的要求。端子排内的E总线信号类型(LVDS)并不是专用的,它还可用于10千兆位以太网。在端子排末端,物理总线特性被转换回 100baseTX 标准。

相关主题
相关文档
最新文档