ucos II 任务通信与同步

ucos II 任务通信与同步
ucos II 任务通信与同步

任务的同步与一个通信初解

操作系统就像就像一个好的家长,控制着资源的公平分配

应用程序中的各个任务,必须通过彼此之间的有效合作,才能完成一项大规模的工作。因为这些任务在运行时,经常需要相互无冲突地访问一个共享资源,或者需要相互支持和

依赖,甚至有时候还需要互相加以必要的制约,才能保证任务的顺利进行。因此操作系统

必须具有对任务运行进行协调的能力,从而使任务之间可以无冲突,流畅的同步运行,而

不致导致灾难性的后果。

这与人们依靠通信来相互沟通,从而使人际关系和谐,工作顺利的做法是一样的,计算机系统依靠任务间的良好通信来保证任务与任务的同步。

任何为任务所占用的实体都可以称为资源。资源可以是输入输出设备,比如打印机,键

盘显示器,资源也可以是一个变量,一个结构或者是一个数组。

1任务的同步和事件

嵌入式系统中的各个任务是为同一个大的任务服务的子任务,他们不可避免的要共同使

用一些资源,并且在处理一些需要多个任务共同协同来完成的工作时,还需要相互的支持和限制。因此,对一个完善的多任务操作系统来说,系统必须具有完备的同步和通信机制任务的同步:

为了实现各个任务之间的合作和无冲突的运行,在各个任务之间必须建立一些制约关系。其中一种制约关系叫做直接制约关系,另一种制约关系叫做间接制约关系

直接制约关系来自任务的合作:例如,有任务A和任务B两个任务,他们需要通过访

问同一个数据缓冲区合作完成一项工作,任务A负责向缓冲区写入数据,任务B负责向缓

冲区读取该数据。显然,当任务A还未向缓冲区写入数据时(缓冲区为空时),任务B因

不能从缓冲区得到有效地数据而应处于等待状态;只有等任务A向缓冲区写入了数据之后,才应该通知任务B去读取数据。相反,当缓冲区的数据还未被任务B读取时(缓冲区为满时),任务A就不能向缓冲区写入新的数据而应该处于等待状态;只有当任务B自缓冲区读取数据后,才应该通知任务A写入数据。显然,如果这两个任务不能如此协调工作,将势必造成严重的后果。

间接制约关系源于对资源的共享:例如:任务A和任务B共享一台打印机,如果系统已经把打印机分配给了任务A,则任务B因不能获得打印机的使用权而应该处于等待状态;

只有当任务A把打印机释放后,系统才能唤醒任务B使其获得打印机的使用权。如果这两

个系统不这样做,那么也会造成严重的后果。

由此可知:在多任务合作工作的过程中,操作系统应该解决两个问题:一是各任务之间应该具有一种互斥的关系,即对于某个共享资源,如果一个任务正在使用,则其他任务只能等待,等到这个任务释放该资源后,等待的任务之一才能使用它;二是相关的任务在执行上要有先后顺序,一个任务要等其伙伴发来通知,或建立了某个条件后才能继续进行,否则只能等待。

任务间的这种制约性的合作运行机制叫做任务间的同步

2 事件

ucos使用信号量,邮箱和消息队列这些中间环节来实现任务间的通信。为了方便起见,这些中间环节统一被称作“事件”

这是两个任务通过事件进行通信的示意图。任务1是发信方,任务2是收信方。作为发信方,任务1的责任是把信息发到事件上,这项操作叫做发送事件。作为收信方,任务2的责任是通过读事件操作对事件进行查询:如果有信息,则读取信息;否则等待。读事件操作叫做请求事件。

ucos把任务发送事件,请求事件以及其他对事件的操作都定义成全局函数

(1)信号量

信号量是一类事件。使用信号量的最初目的,是为了给共享资源设立一个标志,该标志表示该共享资源被占用的情况。这样,当一个任务在访问共享资源之前,就可以先对这个标志进行查询,从而在了解资源被占用的情况之后,来决定自己的行为。信号量说白了就是一个表明共享资源占用情况的标志量。

观察一下人们得日常生活,常用到的共享资源----公用电话亭的使用规则,就会发现这种规则很适合在协调某种资源用户关系时使用。

如果一个电话亭只允许一个人进去打电话,那么电话亭的门上就应该有一个变换颜色的牌子。(例如,红色表示有人,绿色表示没人)当有人进去时,牌子就会变成红色;出来时牌子就会变成绿色。这样打电话的人就可以根据牌子的颜色来了解电话亭的被占用情况。例如,如果有一个人去电话亭打电话时,见到牌子上的颜色是绿色的,那么他就可以进去打电话;如果见到牌子上的颜色是红色的,那么他只好等待;如果又陆续来了很多人,那么就要排队等待。显然电话亭的牌子就是一个表示电话亭是否已被占用的标志。由于这种标志特别像交叉路口的信号灯,所以人们最初给这种标志起的名称就是信号灯。后来因为它含有了量得概念,所以又叫做信号量。

如果电话亭可以允许多个人打电话,那么电话亭门前就不应该是那种只有红绿两种颜色的牌子。而应该是一个计数器,该计数器每进去一个人时就会自动减一。而每出去一个人时,就会自动加一。如果其初值按电话亭的最大容量来设置,那么来人只要见到计数器的值大于0,就可以进去打电话;否则,只好等待。这种计数式的信号叫做信号量。

这是两个任务是用互斥型信号量进行通信,从而使这两个任务无冲突地访问一个共享资源。任务1在访问共享资源之前先进行请求信号量的操作,当任务1发现信号量的标志为“1”时,他一方面把信号量的标志由1改为0,另一方面进行共享资源的访问。如果任务2在任务1已经获得信号之后来请求信号量,那么由于他获得的信号量的标志是0,所以任务2就只有等待而不能访问共享资源了。显然,这种做法可以有效地防止两个任务同时访问一个共享资源所造成的冲突。

那么任务2何时才能访问共享资源呢?当然是任务1使用完共享资源之后,由任务1向信号量发信号是信号量的标志由0变为1时,任务2就有机会访问共享资源了。和任务1一样,任务2一旦获得了共享资源的使用权,那么在访问共享资源之前一定要把信号量的标志由1置为0。

对任哲书120页程序的说明

在程序YourTask有以上一段话。

OSTime是记录时钟节拍数的一个全局变量。因为在MyTask中OSTimeDly(200),因为MyTask的优先级更高,所以在YourTask()运行等待500个时钟节拍的过程中,会被MyTask 中断两次,因为没有对共享资源(全局变量char *s)进行保护,所以每次中断都会被MyTask修改,这时YourTask得到的就是“错误”的信息

在任哲书123页程序中在MyTask和YourTask中都加上了这样一段话

这里的ac_key充当的就是信号量的作用。而ac_key =FALSE, ac_key = TRUE这两句话充当的就是

任务1在访问共享资源之前先进行请求信号量的操作,当任务1发现信号量的标志为“1”时,他一方面把信号量的标志由1改为0,另一方面进行共享资源的访问。如果任务2在任务1已经获得信号之后来请求信号量,那么由于他获得的信号量的标志是0,所以任务2就只有

等待而不能访问共享资源了。显然,这种做法可以有效地防止两个任务同时访问一个共享资源所造成的冲突。

那么任务2何时才能访问共享资源呢?当然是任务1使用完共享资源之后,由任务1向信号量发信号是信号量的标志由0变为1时,任务2就有机会访问共享资源了。和任务1一样,任务2一旦获得了共享资源的使用权,那么在访问共享资源之前一定要把信号量的标志由1置为0。的作用

存在的问题

如果把任务YourTask中发信号语句ac_key = TRUE 删掉,在运行这个程序时,由于任务YourTask不发信号,所以就使得高优先级别的任务MyTask虽然获得了CPU的使用权,但由于始终得不到信号量而不能运行,当然,也就没有机会让出CPU的使用权,从而导致任务YouTask也不能运行,于是应用程序就死掉了

解决方案:

解决上述问题的一个合理办法就是给等待信号量的任务设置一个等待时限。当等待信号量的任务因等待某信号的时间超过这个时限时,就可以使等待任务脱离等待状态而继续运行。这样就不会出现上述死机现象。

消息邮箱

在多任务操作系统中,常常需要在任务与任务之间通过传递一个数据(消息)的方式来通信。为了达到这个目的,可以在内存中创建一个存储空间作为该数据的缓冲区。如果把这个缓冲区叫做消息缓冲区,那么,在任务间传递消息的一个最简单的办法就是传递消息缓冲区的指针。因此,用来传递消息缓冲区指针的数据结构就叫做消息邮箱。

消息队列

上面谈到的消息邮箱不仅可以用来传递一个信息,而且可以定义一个数组指针。让数组的每个元素都存放一个消息缓冲区指针。那么、任务就可以通过传递这个指针数组指针的方法来传递多个信息了。这种可以传递多个消息的数据结构叫做消息队列

实时操作系统UCOS-II,学会RTOS给你的身价增值

实时操作系统UCOS-II,学会RTOS给你的身价增值 如果,你最近关注一些嵌入式招聘职位描述,你可能会经常看到看到使用过uCOS、Vxworks、QNX等RTOS者优先。 随便打开一个20K的嵌入式开发工作职责: 你会发现熟悉RTOS的开发、移植、剪裁真的很吃香! 今天,我们就来介绍一下实时操作系统UCOS-II。 一、嵌入式操作系统概览 嵌入式操作系统的主要好处就是屏蔽了底层硬件的差别,给上层应用提供统一的接口,并管理进程调度和资源(如CPU时间、内存)分配等。并且可以充分利用硬件资源,如在单任务时(大循环结构,如大部分51程序)遇到delay函数时,CPU在空转。而在多任务系统,遇到delay或需等待资源时系统会自动运行下一个任务,等条件满足再回来运行先前的任务,这样就充分利用了CPU,提高了效率。 uC/OS操作系统与裸机程序的最大不同点就在于uC/OS有任务调度,可以根据任务的重要程度(优先级)优先执行重要的任务,从而确保能及时处理最重要的数据。(所以对于一个系统有必要使用OS的判断是能否划分一个个的任务,并且各任务间的耦合很小)可以思考下裸机程序中断的时候发生的过程。利用堆栈可以很自由的在A、B中切换,如果切换足够快,A、B看以来好像同时在执行,这就是并行,A、B就是任务。如果这个切换操作放到定时器函数中来做,就可以严格按照时间来切换。另外,各个任务之间有存在一定的关系,有逻辑上的先后等,必须引进全局的结构体、变量来标记一些信息,全局的这些数据是不会被释放的,所以所有的任务可以去通过读、写这些数据来实现各个程序块交流信息,实现所谓的同步、互斥。这就是操作系统的原理,而这些不同的通信方式按功能细分就成事件管理、内存管理等。

ucosII任务切换是怎样实现的

UC/OS-II学习笔记之——任务切换是怎样实现的问题是, o Uc/OS-II如何切换任务?通过任务调度器OS_Sched(),那么谁在调用这个函数? o CPU在这里肯定有作用,因为任务切换必然涉及到CPU寄存器的入栈和出栈, 那么这一块工作是如何完成的? 书上讲:为了做到任务切换,运行OS_TASK_SW(),人为模仿一次中断。中断服务子程序或陷阱处理(trap hardler),也称作事故处理(exception handler),必须给汇编语言函数OSCtxSw()提供中断向量[1.92]。 那么,“人为模仿一次中断”是什么意思? 是指:OS_TASK_SW()触发了一个中断,由中断完成了任务切换? 阅读源代码,查找答案…… #define OS_TASK_SW()OSCtxSw()//这是一个宏调用,定义在os_cpu.h,Os_cpu_a.asm中定义了OSCtxSw NVIC_INT_CTRL EQU0xE000ED04 NVIC_PENDSVSET EQU0x10000000 ;****************************************************************************** ;PERFORM A CONTEXT SWITCH(From task level) ;void OSCtxSw(void) ; ;Note(s):1)OSCtxSw()is called when OS wants to perform a task context switch.This function ;triggers the PendSV exception which is where the real work is done. ;****************************************************************************** OSCtxSw LDR R0,=NVIC_INT_CTRL;Trigger the PendSV exception(causes context switch) LDR R1,=NVIC_PENDSVSET STR R1,[R0] BX LR 注释说明该段汇编代码触发了一个PendSV的异常。

软件破解入门教程

先教大家一些基础知识,学习破解其实是要和程序打交道的,汇编是破解程序的必备知识,但有可能部分朋友都没有学习过汇编语言,所以我就在这里叫大家一些简单实用的破解语句吧! ---------------------------------------------------------------------------------------------------------------- 语句:cmp a,b //cmp是比较的意思!在这里假如a=1,b=2 那么就是a与b比较大小. mov a,b //mov是赋值语句,把b的值赋给a. je/jz //就是相等就到指定位置(也叫跳转). jne/jnz //不相等就到指定位置. jmp //无条件跳转. jl/jb //若小于就跳. ja/jg //若大于就跳. jge //若大于等于就跳. 这里以一款LRC傻瓜编辑器为例,讲解一下软件的初步破解过程。大家只要认真看我的操作一定会!假如还是不明白的话提出难点帮你解决,还不行的话直接找我!有时间给你补节课!呵呵! 目标:LRC傻瓜编辑器杀杀杀~~~~~~~~~ 简介:本软件可以让你听完一首MP3歌曲,便可编辑完成一首LRC歌词。并且本软件自身还带有MP3音乐播放和LRC歌词播放功能,没注册的软件只能使用15天。 工具/原料 我们破解或给软件脱壳最常用的软件就是OD全名叫Ollydbg,界面如图: 它是一个功能很强大的工具,左上角是cpu窗口,分别是地址,机器码,汇编代码,注释;注释添加方便,而且还能即时显示函数的调用结果,返回值. 右上角是寄存器窗口,但不仅仅反映寄存器的状况,还有好多东东;双击即可改变Eflag的值,对于寄存器,指令执行后发生改变的寄存器会用红色突出显示. cpu窗口下面还有一个小窗口,显示当前操作改变的寄存器状态. 左下角是内存窗口.可以ascii或者unicode两种方式显示内存信息. 右下角的是当前堆栈情况,还有注释啊. 步骤/方法 1. 我们要想破解一个软件就是修改它的代码,我们要想在这代码的海洋里找到我们破解关键的代码确实很棘 手,所以我们必须找到一定的线索,一便我们顺藤摸瓜的找到我们想要的东东,现在的关键问题就是什么

详细设计模板

。 目录 1引言 1.1编写目的 1.2背景 1.3参考资料 1.4术语定义及说明 2设计概述 2.1任务和目标 2.1.1需求概述 2.1.2运行环境概述 2.1.3条件与限制 2.1.4详细设计方法和工具 3系统详细需求分析 3.1详细需求分析 3.2详细系统运行环境及限制条件分析接口需求分析4总体方案确认 4.1系统总体结构确认 4.2系统详细界面划分 4.2.1应用系统与支撑系统的详细界面划分 4.2.2系统内部详细界面划分 5系统详细设计 5.1系统结构设计及子系统划分

。 5.2系统功能模块详细设计 5.3系统界面详细设计 5.3.1外部界面设计 5.3.2内部界面设计 5.3.3用户界面设计 6数据库系统设计 6.1设计要求 6.2信息模型设计 6.3数据库设计 6.3.1设计依据 6.3.2数据库选型 6.3.3数据库种类及特点 6.3.4数据库逻辑结构 6.3.5物理结构设计 6.3.6数据库安全 6.3.7数据字典 7网络通信系统设计 7.1设计要求 7.2网络结构确认 7.3网络布局设计 7.4网络接口设计 8信息编码设计

。 8.1代码结构设计 8.2代码编制 9维护设计 9.1系统的可靠性和安全性 9.2系统及用户维护设计 9.3系统扩充 9.4错误处理 9.4.1出错类别 9.4.2出错处理 9.4.3系统调整及再次开发问题 10系统配置 10.1配置原则 10.2硬件配置 10.3软件配置 11关键技术 11.1关键技术的提出 11.2关键技术的一般说明 11.3关键技术的实现方案 12组织机构及人员配置 13投资预算概算及资金规划 14实施计划 14.1限制

SkyNet任务调度监控系统-使用手册

SkyNet调度系统使用手册

修改记录

目录 第1章系统概述 (5) 1.1 背景 (5) 1.2 系统架构 (6) 1.2.1 名词解释 (6) 1.2.2 系统模块 (6) 1.2.3 系统特性 (7) 1.3 系统核心功能 (7) 第2章DashBoard (8) 2.1 页面 (8) 2.2 功能 (8) 第3章任务维护 (9) 3.1 添加任务 (9) 3.1.1 页面 (9) 3.1.2 功能 (9) 3.2 查询操作任务 (11) 3.2.1 页面 (11) 3.2.2 查询任务 (11) 3.2.3 运行任务 (12) 3.2.4 查看任务依赖 (13) 3.2.5 修改任务 (13) 3.2.6 删除任务 (14) 第4章任务依赖 (15) 4.1 查询依赖 (15) 4.2 添加任务依赖 (15) 4.3 删除任务依赖 (15) 4.4 查看任务最后一次运行详情 (16) 第5章任务监控 (17) 5.1 页面 (17) 5.2 查询任务运行历史 (17)

5.3 查看任务运行日志 (18) 5.4 重做任务 (18) 5.5 KILL任务 (19) 第6章告警配置 (20) 6.1 添加任务告警 (20) 6.1.1 任务失败告警 (21) 6.1.2 任务超时未完成告警(暂未实现) (21) 6.2 查询任务告警配置 (21) 6.3 修改任务告警 (22) 6.4 删除任务告警 (23) 6.5 查询告警发送记录 (23) 第7章系统部分运行原理 (23) 7.1 业务类型 (23) 7.2 程序路径 (24) 7.3 指定任务运行主机 (24) 7.4 调度的延迟 (24) 附录A 动态时间参数 (27) 附录B Quartz时间表达式 (28) 附录C 定时任务配置流程 (29) 附录D 依赖任务配置流程 (29)

任务3 制定计划与实行目标管理(参考答案)

任务3制定计划与实行目标管理(参考答案) 一、单项选择题 1.A2.A3.B4.A5.A 6.B7.D8.C9.C10.C 二、判断题 1.错2.错3.错4.对5.对 6.错7.对8.对9.对l0.对 三、简答题 1.什么是计划?计划工作的特征有哪些? 计划,通常是指人们行动之前预先拟定的行动内容、具体目标、采用方法和实施步骤。 计划的特征可以概括为五个方面,即目的性、首位性、普遍性、效率性和创造性。 2.简述计划编制的程序。 计划工作的程序一般包括:机会分析、确定目标、编制计划的前提、制定可供选择的方案、评价各种方案、选择方案、编制派生计划、用预算形式使计划数字化等。 (1)机会分析 机会分析的主要内容是根据市场、竞争、顾客的需求,组织的长处和短处,对未来可能出现的机会进行初步分析,了解利用这些机会的能力,弄清组织面临的主要不确定因素,分析其发生的可能性和影响程度,并展望组织可能取得的成果。 (2)确定目标

计划工作的第一步是在机会分析的基础上为组织及其所属的下级单位确定计划工作的目标,即组织在一定时期内所要达到的效果。恰当地确定哪些成果应首先取得,即哪些是优先目标,这是目标选择过程中的重要工作。 (3)编制计划的前提 计划工作的前提就是计划实施时的预期环境,即组织将在什么样的环境下执行计划。确定前提条件,就是要对组织未来的内外部环境和所具备的条件进行分析和预测,弄清计划执行过程中可能存在的有利条件和不利条件。 (4)制定可供选择的方案 (5)评价各种方案 在评价时要从各个方面的客观性、合理性、有效性、经济性和可操作性等方面来衡量。 (6)选择方案 选择方案是计划工作最关键的一步,也是抉择的实质性阶段。在选择最佳方案时,要注意两个方面:一是应选出可行性、满意性和可能带来的结果三者结合最好的方案;二是方案的投入产出比率,应选出投入产出比率尽可能大的方案。 (7)编制派生计划 派生计划就是总计划下的分计划。在完成方案的选择之后,计划工作并没有结束,还必须帮助涉及计划内容的各个下属部门制订支持总计划的派生计划。 (8)用预算形式使计划数字化 预算实质上是资源的分配计划,即根据选择的方案,对组织可利用的资源进行分配,涉及到计划需要那些资源,各需要多少,何时投入以及投入多少等问题。 3.简述计划编制常用的方法。

Linux基本反汇编结构与GDB入门

Linux下的汇编与Windows汇编最大的不同就是第一个操作数是原操作数,第二个是目的操作数,而Windows下却是相反。 1、基本操作指令 简单的操作数类型说明,一般有三种, (1)立即数操作数,也就是常数值。立即数的书写方式是“$”后面跟一个整数,比如$0x1F,这个会在后面的具体分析中见到很多。 (2)寄存器操作数,它表示某个寄存器的内容,用符号Ea来表示任意寄存器a,用引用R[Ea]来表示它的值,这是将寄存器集合看成一个数组R,用寄存器表示符作为索引。 (3)操作数是存储器引用,它会根据计算出来的地址(通常称为有效地址)访问某个存储器位置。用符号Mb[Addr]表示对存储在存储器中从地址Addr开始的b字节值的引用。通常可以省略下标b。 图1表示有多种不同的寻址模式,一个立即数偏移Imm,一个基址寄存器Eb,一个变址或索引寄存器Ei和一个伸缩因子s。有效地址被计算为Imm+R[Eb]+R[Ei]*s,对于这中寻址方式,我们可以在数组或者结构体中进行对元

注:操作数可以是立即数值、寄存器值或是来自存储器的值,伸缩因子必须是1、2、4、或者是8。从上面的图我们就可以大致了解操作数的类型了。 在操作指令中,最频繁使用的指令是执行数据传送的指令。对于传送指令的两个操作数不能都指向存储器位置(我的理解是一般存储器存储的都是地址,不能够对地址和地址进行操作)。将一个值从一个存储器位置拷到另一个存储器位置需要两条指令——第一条指令将源值加载到寄存器中,第二条将该寄存器值写入到目的位置。下面给出源操作数和目的操作数的五种可能组合。 1、movl $0x4050, %eax 立即数——寄存器 2、movl %ebp, %esp 寄存器——寄存器 3、movl (%edi, %ecx), %eax 存储器——寄存器 4、movl $-17, (%esp) 立即数——存储器 5、movl %eax, -12(%ebp) 寄存器——存储器 注意这里的指令mov可能有不同的形式,不同平台的汇编一般是有些不一样的, 结合例子来进行讲解一下指令的具体操作,在这里将会正式接触到Linux下的GCC开发环境和GDB调试器,不过都是比较简单的应用。我的Linux操作系统是Ubuntu9.10,其它版本的差别应该不大, 如果我们要编写一个程序,我们可以用Linux下自带的vi或vim编辑器,studyrush@studyrush-desktop:~/C$ vi exchange.c vi 后面加我们要创建的程序文件的名字,在这里是exchange.c studyrush@studyrush-desktop:~/C$ gcc -o exchange exchange.c gcc -o exchange exchange.c 或gcc exchange –o exchange这两者都可以对源文件进行编译,-o exchange 表示对我们要输出的文件名称,可能表达的不够准确,大家可以先熟悉一下gcc编译器,应该就会明白的了。 studyrush@studyrush-desktop:~/C$ ./exchange 点加斜线再加输出文件名就表示运行程序,下面是运行的结果。 a = 3, b = 4

电力系统调度管理的任务

电力系统调度管理的任 务 集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-

电力系统调度管理的任务电力系统调度负责电力系统的生产运行工作,其任务主要包括以下五个方面: 1.尽设备最大能力满足负荷的需要 随着经济建设的发展和人民生活的不断的提高,全社会的用电需求日益增长。这就从客观上要求电力系统具备充足的发、供电设备和足够的可利用的动力资源。因此,必须加快电力建设、保证燃料供应。这是整个电力工业的任务。现在存在的主要问题季节缺电,这就要求我们要尽快设备最大能力满足负荷的需要。如果装机少,燃料供应不足,也没有备用容量,那么调度也是难办的。有了设备,如何高度好,如高峰负荷时,把备用机组开起来;如果有备用机组而不开,到时满足不了负荷需要,那就是没调度好;当然多开机组可以充分满足负荷需要,但若不经济,那也是没调度好。如水电来水多时,应尽量多安排火电机组检修,夏季高峰负荷时尽量少安排机组检修。这就要求灵活调度,巧妙安排,尽设备的最大能力来满足负荷需要。 2.使整个电网安全可靠运行和连续供电

电能不易储存,电网停止供电将造成损失。电网要对电力用户连续不断地供电,首先就必须保证整个电网安全可靠运行。 电,关系到千家万户,与社会经济生活紧密相联,一旦发生事故,造成大面积停电,就会经起社会的混乱,因此从这个意义上说,电网事故是社会的灾难。随着国民经济各部门和人民生活用电更加广泛,对供电的可靠性要求越来越高,停电造成的损失和影响也越来越大。比如铁路,过去只用于信号,停电时可以用柴油发电机发电,不致影响铁路正常运行。现在,电气机车所需电力很难用自备电源解决,一旦停电就必然影响铁路正常运行。又如高层住宅电梯的增多,电饭煲、微波断、电水壶、电热水器、空调、电暖器、洗衣机、电冰箱、电视机等家用电器广泛进入家庭,停电对人民生活的影响就比原来只用于照明时要大得多。因此,停电会给人们生活带来很大的不便。停电还会造成不良的国际影响。改革开放使我国国际交往增多,驻华使馆、领事馆、文化、金融、商业机构以及人员往业大量增多,外商独资、中外合资企业不断增多,与境外联网送电的情况也增多,如内蒙、云南、广东等,在某些情况下,停电还会影响社会稳定,例如在考试期间、高考期间停电,持续高温或严寒气候恶劣条件下停电,百货大商场晚上停电等。 由于历史的原因,我国电网结构薄弱,加之自然力(如刮风、打雷、下雨、下雪)的破坏和设备潜在的缺陷,都可能造成电网中断供电。这时,调度机构就要采取措施,首先不要影响供电;其次,若影响

ucos-ii操作系统复习大纲

ucos-ii操作系统复习大纲 一.填空题 1.uC/OS-II是一个简洁、易用的基于优先级的嵌入式【抢占式】多任务实时内核。 2.任务是一个无返回的无穷循环。uc/os-ii总是运行进入就绪状态的【最高优先级】的任务。 3.因为uc/os-ii总是运行进入就绪状态的最高优先级的任务。所以,确定哪 个任务优先级最高,下面该哪个任务运行,这个工作就是由【调度器(scheduler)】来完成的。 4.【任务级】的调度是由函数OSSched()完成的,而【中断级】的调度 是由函数OSIntExt() 完成。对于OSSched(),它内部调用的是【OS_TASK_SW()】完成实际的调度;OSIntExt()内部调用的是【 OSCtxSw() 】实现调度。 5.任务切换其实很简单,由如下2步完成: (1)将被挂起任务的处理器寄存器推入自己的【任务堆栈】。 (2)然后将进入就绪状态的最高优先级的任务的寄存器值从堆栈中恢复到【寄存器】中。 6.任务的5种状态。 【睡眠态(task dormat) 】:任务驻留于程序空间(rom或ram)中,暂时没交给ucos-ii处理。 【就绪态(task ready)】:任务一旦建立,这个任务就进入了就绪态。 【运行态(task running)】:调用OSStart()可以启动多任务。OSStart()函数只能调用一次,一旦调用,系统将运行进入就绪态并且优先级最高的任务。 【等待状态(task waiting)】:正在运行的任务,通过延迟函数或pend(挂起)相关函数后,将进入等待状态。

【中断状态(ISR running)】:正在运行的任务是可以被中断的,除非该任务将中断关闭或者ucos-ii将中断关闭。 7.【不可剥夺型】内核要求每个任务自我放弃CPU的所有权。不可剥夺型调度法也称作合作型多任务,各个任务彼此合作共享一个CPU。 8.当系统响应时间很重要时,要使用【可剥夺型】内核。最高优先级的任务一旦就绪,总能得到CPU的控制权。 9.使用可剥夺型内核时,应用程序不应直接使用不可重入型函数。调用不可重入型函数时,要满足互斥条件,这一点可以用【互斥型信号量】来实现。 10.【可重入型】函数可以被一个以上的任务调用,而不必担心数据的破坏。 11.可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函数或者只使用【局部变量】,即变量保存在CPU寄存器中或堆栈中。如果使用全局变量,则要对全局变量予以【保护】。 12.每个任务都有其优先级。任务越重要,赋予的优先级应【越高】。 13.μC/OS-Ⅱ初始化是通过调用系统函数【OSIint()】实现的,完成μC/OS-Ⅱ所有的变量和数据结构的初始化。 14.多任务的启动是用户通过调用【OSStart()】实现的。然而,启动μC/OS-Ⅱ之前,用户至少要建立一个应用【任务】。 15. μC/OS-Ⅱ的参数配置文件名为【】。 16.删除任务,是说任务将返回并处于【休眠状态】,并不是说任务的代码被删除了,只是任务的代码不再被μC/OS-Ⅱ调用。 17.μC/OS-Ⅱ要求用户提供【定时中断】来实现延时与超时控制等功能。 18.定时中断也叫做【时钟节拍】,它应该每秒发生10至100次。 19. 时钟节拍的实际频率是由用户的应用程序决定的。时钟节拍的频率越高,系统的负荷就【越重】。 20.μC/OS-II中的信号量由两部分组成:一个是信号量的【计数值】,它是一个16位的无符号整数(0 到65,535之间);另一个是由等待该信号量的任务组成的【等待任务表】。用户要在中将OS_SEM_EN开关量常数置成【1 】,这样μC/OS-II 才能支持信号量。 21. μC/OS-II中表示当前已经创建的任务数全局变量名为:【 OSTaskCtr 】。

汇编语言入门教程

汇编语言入门教程 2007-04-29 22:04对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK 出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS 段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。

详细设计模板

软件系统设计设计概要 目录 1 引言 1.1 编写目的 1.2 背景 1.3 参考资料 1.4 术语定义及说明 2 设计概述 2.1 任务和目标 2.1.1 需求概述 2.1.2 运行环境概述 2.1.3 条件与限制 2.1.4 详细设计方法和工具 3 系统详细需求分析 3.1 详细需求分析 3.2 详细系统运行环境及限制条件分析接口需求分析 4 总体方案确认 4.1 系统总体结构确认 4.2 系统详细界面划分 4.2.1 应用系统与支撑系统的详细界面划分 4.2.2 系统内部详细界面划分 5 系统详细设计 5.1 系统结构设计及子系统划分 5.2 系统功能模块详细设计 5.3 系统界面详细设计 5.3.1 外部界面设计 5.3.2 内部界面设计

5.3.3 用户界面设计 6 数据库系统设计 6.1 设计要求 6.2 信息模型设计 6.3 数据库设计 6.3.1 设计依据 6.3.2 数据库选型 6.3.3 数据库种类及特点 6.3.4 数据库逻辑结构 6.3.5 物理结构设计 6.3.6 数据库安全 6.3.7 数据字典 7 网络通信系统设计 7.1 设计要求 7.2 网络结构确认 7.3 网络布局设计 7.4 网络接口设计 8 信息编码设计 8.1 代码结构设计 8.2 代码编制 9 维护设计 9.1 系统的可靠性和安全性9.2 系统及用户维护设计 9.3 系统扩充 9.4 错误处理 9.4.1 出错类别 9.4.2 出错处理 9.4.3 系统调整及再次开发问题 10 系统配置 10.1 配置原则 10.2 硬件配置 10.3 软件配置 11 关键技术 11.1 关键技术的提出 11.2 关键技术的一般说明

任务调度系统的实现

任务调度系统的实现学 专 指导教师: 2014年 9 月

任务调度系统的实现 摘要 运输是物质资料或产品在空间较长距离的位移,一切物流过程均离不开运输,它是物流活动的核心业务。目前我国的物流运输业仍处在起步发展的阶段,还存在许多有待解决的问题。为此如何提高我国物流运输管理,是当今物流界应该着重研究的课题。本系统就针对我国物流运输存在的问题,提出相关措施,旨在对促进我国物流业的快速发展具有积极作用。 本系统前台主要使用JSP作为开发语言,后台使用MySql作为数据库管理系统,开发环境是MyEclipse,服务器采用tomcat,开发出的一个基于Web技术的B/S结构的系统。 关键词:物流运输,管理,措施,JSP,MySql

Task Scheduling System Abstract Transportation is a material or product in space long displacement, all the logistics process is dependent on the transportation, it is the core business of logistics activities. At present our country logistics transportation industry is still in its beginning stage of development, there exist many problems to be solved. Therefore how to improve the logistics transportation management in our country, is the modern logistics industry should focus on the research topic. In this system, in view of the problem of logistics in our country, puts forward relevant measures, aimed at plays a positive role to promote the rapid development of logistics industry in our country. The front of the system using JSP as the development language, the use of MySql as a database management system, the development environment is MyEclipse, the server using tomcat, developed a Web technology based on B/S structure of the system. Keywords:Logistics transportation,management,measures,JSP,MySql

嵌入式实时操作系统UCOS 2优劣势分析

嵌入式实时操作系统ucos ii的优劣势分析 引言 早在20世纪60年代,就已经有人开始研究和开发嵌入式操作系统。但直到最近,它才在国内被越来越多的提及,在通信、电子、自动化等需要实时处理的领域所曰益显现的重要性吸引了人们越来越多的注意力。但是,人们所谈论的往往是一些著名的商业内核,诸如VxWorks、PSOS等。这些商业内核性能优越,但价格昂贵,主要用于16位和32位处理器中,针对国内大部分用户使用的51系列8位单片机,可以选择免费的ucos ii。 ucos ii的特点 1.ucos ii是由Labrosse先生编写的一个开放式内核,最主要的特点就是源码公开。这一点对于用户来说可谓利弊各半,好处在于,一方面它是免费的,另一方面用户可以根据自己的需要对它进行修改。缺点在于它缺乏必要的支持,没有功能强大的软件包,用户通常需要自己编写驱动程序,特别是如果用户使用的是不太常用的单片机,还必须自己编写移植程序。 2.ucos ii是一个占先式的内核,即已经准备就绪的高优先级任务可以剥夺正在运行的低优先级任务的CPU使用权。这个特点使得它的实时性比非占先式的内核要好。通常我们都是在中断服务程序中使高优先级任务进入就绪态(例如发信号),这样退出中断服务程序后,将进行任务切换,高优先级任务将被执行。拿51单片机为例,比较一下就可以发现这样做的好处。假如需要用中断方式采集一批数据并进行处理,在传统的编程方法中不能在中断服务程序中进行复杂的数据处理,因为这会使得关中断时间过长。所以经常采用的方法是置一标志位,然后退出中断。由于主程序是循环执行的,所以它总有机会检测到这一标志并转到数据处理程序中去。但是因为无法确定发生中断时程序到底执行到了什么地方,也就无法判断要经过多长时间数据处理程序才会执行,中断响应时间无法确定,系统的实时性不强。如果使用μC/OS-II的话,只要把数据处理程序的优先级设定得高一些,并在中断服务程序中使它进入就绪态,中断结束后数据处理程序就会被立即执行。这样可以把中断响应时间限制在一定的范围内。对于一些对中断响应时间有严格要求的系统,这是必不可少的。但应该指出的是如果数据处理程序简单,这样做就未必合适。因为ucos ii要求在中断服务程序末尾使用OSINTEXIT函数以判断是否进行任务切换,这需要花费一定的时间。 3.ucos ii和大家所熟知的Linux等分时操作系统不同,它不支持时间片轮转法。ucos ii是一个基于优先级的实时操作系统,每个任务的优先级必须不同,分析它的源码会发现,ucos ii把任务的优先级当做任务的标识来使用,如果优先级相同,任务将无法区分。进入就绪态的优先级最高的任务首先得到CPU的使用权,只有等它交出CPU的使用权后,其他任务才可以被执行。所以它只能说是多任务,不能说是多进程,至少不是我们所熟悉的那种多进程。显而易见,如果只考虑实时性,它当然比分时系统好,它可以保证重要任务总是优先占有CPU。但是在系统中,重要任务毕竟是有限的,这就使得划分其他任务的优先权变成了一个让人费神的问题。另外,有些任务交替执行反而对用户更有利。例如,用单

uCOS-II任务堆栈检验(OSTaskStkChk())

uC/OS-II任务堆栈检验(OSTaskStkChk()) 使用OSTaskStkChk()可以返回一个记录所检查堆栈空间的使用情况,包括已使用空间及 空闲空间的大小。但只有用OSTaskCreateExt()建立的任务的堆栈才正常使用OSTaskStkChk()。这个堆栈检验功能的原理很简单,因为OSTaskCreateExt()已经把任务堆栈 每个字节初始为0了,所以只需要从栈底依次扫描每个字节并计数直到当一个字节的内容不 为0,也即从这个字节起的空间已经至少被任务使用过了,得到的计数就是空闲空间的大小,使用空间的大小由栈的总大小减去空闲空间的大小就可以得到。 OSTaskStkChk(INT8U prio,OS_STK_DATA *pdata) /*检查优先级为prio的任务的堆栈使用情况,并把结果存入OS_STK_DATA类型的单元中*/ INT8U OSTaskStkChk(INT8U prio,OS_STK_DATA *pdata) { OS_TCB *ptcb; /*用于执行所要堆栈检测任务的TCB*/ OS_STK *pchk; /*用于指向所要堆栈检测的任务的堆栈*/ INT32U free; /*存放未使用的堆栈容量*/ INT32U size; /*存放堆栈总容量*/ pdata->OSFree=0; /*将用于存放堆栈检测结果的单元进行清零*/ pdata->OSUsed=0; if(prio>OS_LOWEST_PRIO &&prio != OS_PRIO_SELF)/*查看优先级是否在有效范围内*/ { return(OS_PRIO_INVALID); } OS_ENTER_CRITICAL();/*在对任务的TCB内容读取的过程中需要关中断,即TCB是临界资源,不可多个进程同时访问*/ if (prio==OS_PRIO_SELF) /*如果prio的值为OS_PRIO_SELF 即prio==0xFF,系统规定优 先级为当前正在执行的任务*/ { prio=OSTCBCur->OSTCBPrio;/*需要将prio的值更改为当前正在执行任务的优先级*/ } ptcb=OSTCBPrioTbl[prio];/*根据任务的优先级和TCB优先级表,找到所要进程堆栈检测 任务的TCB*/

OllyDBG完美教程

关键词:OD、OllyDBG、破解入门、调试专用工具、反汇编 一、OllyDBG 的安装与配置 OllyDBG 1.10 版的发布版本是个 ZIP 压缩包,只要解压到一个目录下,运行 OllyDBG.exe 就可以了。汉化版的发布版本是个 RAR 压缩包,同样只需解压到一个目录下运行 OllyDBG.exe 即可: OllyDBG 中各个窗口的功能如上图。简单解释一下各个窗口的功能,更详细的内容可以参考 TT 小组翻译的中文帮助: 反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址、HEX 数据、反汇编、注释可以通过在窗口中右击出现的菜单界面选项->隐藏标题或显示标题来进行切换是否显示。用鼠标左键点击注释标签可以切换注释显示的方式。

寄存器窗口:显示当前所选线程的 CPU 寄存器内容。同样点击标签寄存器 (FPU) 可以切换显示寄存器的方式。 信息窗口:显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等。 数据窗口:显示内存或文件的内容。右键菜单可用于切换显示方式。 堆栈窗口:显示当前线程的堆栈。 要调整上面各个窗口的大小的话,只需左键按住边框拖动,等调整好了,重新启动一下 OllyDBG 就可以生效了。 启动后我们要把插件及 UDD 的目录配置为绝对路径,点击菜单上的选项->界面,将会出来一个界面选项的对话框,我们点击其中的目录标签: 因为我这里是把 OllyDBG 解压在 F:\OllyDBG 目录下,所以相应的 UDD 目录及插件目录按图上配置。还有一个常用到的标签就是上图后面那个字体,在这里你可以更改 OllyDBG 中显示的字体。上图中其它的选项可以保留为默认,若有需要也可以自己修改。修改完以后点击确定,弹出一个对话框,说我们更改了插件路径,要重新启动 OllyDBG。在这个对话框上点确定,重新启动一下 OllyDBG,我们再到界面选项中看一下,会发现我们原先设置好的路径都已保存了。有人可能知道插件的作用,但对那个 UDD 目录

桥梁设计任务书及详细设计过程

目录 桥梁工程课程式设计任务书 (1) 第1章设计资料与结构布置 (3) 1.1 设计资料 (3) 1.2 结构布置 (3) 1.3 设计概述 (6) 第2章主梁内力计算 (7) 2.1 恒载内力计算 (7) 2.2 汽车、人群荷载产生内力计算 (9) 2.3 主梁内力组合 (9) 第3章主梁配筋设计 (21) 3.1 跨中正截面强度计算 (21) 3.2 斜截面承载力剪力筋设计 (23) 3.3 全梁承载力校核 (26) 3.4 裂缝验算 (29) 3.5变形验算 (29) 桥梁工程课程设计任务书 一、课程设计题目 钢筋混凝土简支T梁桥主梁设计 二、课程设计目的 桥梁工程课程设计是桥梁设计的入门,通过设计进一步巩固钢筋混凝土基本原理的主要理论知识,是学生掌握桥梁的设计原理和各种体系桥梁的受力特点,同时重点掌握结构计算基本理论。结合课程设计与习题加深对桥梁工程课堂理论教学内容的理解。培养学生的动手能力。 三、基本要求

1掌握钢筋混凝土桥梁结构的设计原理、步骤,结构构造和设计计算方法。 2熟悉并掌握桥梁工程现行规范运用。 3通过本课程的学习,具有设计一般桥梁结构的能力。 四、基本资料 标准跨径、桥面净宽、荷载等级、主梁及横隔梁数目(按照自己的数据填写) 五、基本内容 1、提供钢筋混凝土简支T形梁桥设计计算书一份,基本内容如下: (1)拟定桥面铺装、主梁截面尺寸及各部分尺寸 (2)主梁内力计算 (3)配筋设计与各种验算 2、完成下列图纸绘制 (1)桥梁一般布置图 (2)主梁一般构造图 (3)主梁钢筋布置图 六、课程设计依据 1《铁路桥涵设计通用规范》(JTG D60—2004) 2《铁路钢筋混凝土及预应力混凝土桥涵设计规范》(JTG D62—2004) 3《铁路砖石及混凝土桥涵设计规范》 4《铁路桥梁荷载横向分布计算》 七、要求 1.熟读规范、标准,理论联系实际; 2.手工与计算机绘图相结合,至少一张手工图,均采用3号图纸;说明书用A4纸,打印。 3.独立完成设计。 桥梁工程课程设计文件撰写要求 一、顺序要求(按照模板) 封面 目录 任务书 正文 二、字体及字号要求 正文用五号宋体; 行距为1.2倍

详细设计及实现

详细设计及实现 一、总体方案 本系统采用Microsoft Visual Studio6.0多层结构开发,以Oracle为后台数据库,系统架构为C/S模型。系统根据职业资格考试的特点,能够完成职业资格考试的全部任务,整个系统包括基本设置、报名、考试编排、成绩管理等模块。 (1)基础设置模块主要是对整个系统进行数据的初始化,按照需要分为基础设置、考工工种设置、考工级别设置、考工考试设置四个功能。 (2)考试报名模块主要实现了考生报名、考生信息查询、考生照片查询三个功能。 (3)考务编排模块主要包括准考证号规则设置,编排考生准考证号,编排考场、考务、监考人员,打印考务材料四个功能。 (4)成绩处理模块包括成绩归档、成绩上报、证书编号回登三个功能。 系统的总体流程图如图1所示。 图1 系统总体流程图

二、界面设计 本系统采用基于任务驱动的功能模块设计,系统采用数据任务模型进行信息处理,终端用户和其它应用通过互联网协议如HTTP/HTTPS、TCP/SSL协议和XML 数据格式申请任务执行请求、提供执行任务参数并指定任务返回数据和格式。任务服务器接受到任务请求后,根据用户提供的参数执行用户指定的数据处理任务,并使用相应的HTML网页、XML数据、WORD文档、MAIL邮件或其它格式将任务处理结果数据返回。 1、登录的实现 系统的登录基于角色来控制,不同的角色登录时对应着不同的口令。 基于角色管理的访问控制由于实现了用户与访问权限的逻辑分离,此策略极大的方便了权限管理。例如,如果一个用户的职位发生变化,只要将用户当前的角色去掉,加入代表新职务或新任务的角色即可。研究表明,角色/权限之间的变化比角色/用户关系之间的变化相对要慢得多,并且委派用户到角色不需要很多技术,可以由行政管理人员来执行,而配置权限到角色的工作比较复杂,需要一定的技术,可以由专门的技术人员来承担,但是不给他们委派用户的权限,这与现实中情况正好一致。除了方便权限管理之外,基于角色的访问控制方法还可以很好的地描述角色层次关系,实现最少权限原则和职责分离的原则。 系统登录窗口采用人性化布局设计,集成了系统初始化完整性校验、已开设考试鉴定工种列表和登录账号、密码和修改密码快捷键F1,账号主要分成三个角色:教务管理员、成绩管理员、各院系,账号的总体控制由教务管理员来操作。如图2所示。 登录账号修改登录密码集成在登录窗口中,在用户选择登录账号后,按F1键弹出修改登录密码窗口,如图3所示。 图2 系统登录窗口

相关文档
最新文档