第8章基于ucos-ii的程序设计实例_第1页
第8章基于ucos-ii的程序设计实例_第2页
第8章基于ucos-ii的程序设计实例_第3页
第8章基于ucos-ii的程序设计实例_第4页
第8章基于ucos-ii的程序设计实例_第5页
已阅读5页,还剩4页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第八 基于 的程设计例8.1 实例介为了使读者对 COS-II 操作系统有更深的理解,本章将介绍一个在 STM32F103 处理器平台上使用 COS-II 实时操作系统的程序设计实例。此实例使 用英倍特公司提供的 STM103V100 评估板来实现一个简易温度计。该实例使用 STM103V100 评估板自带的高灵敏度数字温度传感器来传送温度数据,根据实际采 样周期的需要,安排了四种不同的采样方式。采样的条件和周期可以通过键盘输入 进行调节,采样得到的结果可以在评估板的液晶屏上同步显示,并通过串口将采样 所得的结果送到上位机。关于 STM103V100 评估板的更多内容超出本书范围,请读 者参阅

2、其它相关资料。8.2 实例分本节主要分析如何通过基于实时操作系统编程的方法实现整个系统的所有功 能。下面的内容将从任务划分开始,详细说明任务分析的过程。8.2.1 实例任务划分为了更合理的将整个系统划分为不同任务,首先要明确一个好的实时系统应 具备那些特点,即任务划分的基本原则是什么。一般说来,任务划分的基本原则有 以下几点:满足系统“实时性”:一般使用 COS-II 嵌入式应用系统,对于响应时间 要求很高,如果实时性得不到满足,系统会出现错误甚至导致难以挽回的故障。因 此在任务划分时,保证系统实时性是首要原则。较少资源需求:多个任务协同运转,依靠操作系统的调度策略。任务之间的 同步,任务之间

3、的通信,内存管理都需要消耗系统资源。所以在任务划分时,尽量 将使用同类资源的应用归入同一任务中,以减少操作系统调度时所消耗的资源。合理的任务数:同一系统,任务划分的数目越多,每个任务的功能越简单, 实现越容易,但任务数目的增多,加大了操作系统的调度负担,资源开销也随之加 大;相反,如果任务划分的数目太少,会增加每个任务的复杂性,使任务设计难度 加大。最极端的情况,当系统任务数目减少到 时,也就失去了使用多任务操作系 统的意义。对一个具体的嵌入式应用系统进行任务划分时,可以有不同的任务划分方 案。常用的任务划分方法有:以硬件模块为对象划分任务、以实时性优先原则划分 任务和切分耗时任务等。所谓“以

4、硬件模块为对象划分任务”就是根据系统需求, 以硬件模块相关驱动为基础,根据硬件驱动在系统中的关键性设定优先级的任务划 分方法;“实现性优先原则划分任务”即,将对实时性要求较高的应用划分为单独 任务,并赋予较高的优先级来保证整个系统实时性的要求;而“切分耗时任务”的 任务划分方法,顾名思义就是将一些占用大量 处理时间的繁琐应用从系统中分 离出来,作为一个优先级较低的任务在系统空闲时运行。根据上述任务划分的原则和方法,本实例被划分为 个任务:包括 4 个采用 任务,1 个负责和用户交互的键盘任务,1 个显示任务和 个向上位机传送数据的 串口发送任务。其中,4 个采样任务分别使用不同的采样条件:延时

5、采样、使用系 统时钟节拍采样、定时中断采样和使用高优先级中断的采样。键盘任务除负责接收 用户输入并做出反馈外,还需要完成操作系统和系统资源的初始化,包括系统中用 到的消息队列、邮箱和互斥信号量的创建等。因为按键任务是第一个启动的用户任 务,所以目标板的初始化也由该任务完成。8.2.2 实例任务设计与优先分配完成系统任务划分后,需要对任务的优先级进行设定。任务优先级分配是否 合理,直接影响到系统的实时性和可靠性。对任务优先级的安排一般遵循以下原 则:外设相关任务安排高优先级:因为外设任务直接与中断服务程序相对应,如 果外设任务优先级低,当需要中断处理时,系统资源可能被高优先级任务占用,而 导致中

6、断丢失;根据任务实现功能的重要性安排优先级:一般情况下,任务越重要优先级越 高;占用关键资源的任务优先级尽量高:只有保证占用关键资源的任务优先运 行,才能使其尽早释放资源,以便其它任务运行;对于周期性任务,执行周期越短的任务,优先级应越高,以保证其得到及时 运行;当以上条件相近时,耗时越短的任务优先级应越高。这样可以缩短其它就绪 任务的延时时间。根据以上优先级安排原则,系统中存在的 个采样任务实现同样功能且均为 一次性任务。所以,4 个任务的优先级应一致。但在 操作系统中,同一 优先级不允许存在多个任务,所以将 4 个采样任务的优先级依次排列,因为它们不 可能同时发生,则对于应用来说,4 个任

7、务的优先级是一致的。键盘任务是系统运行的第一个任务,负责与用户交互。根据优先级安排原 则,将其优先级定为 7 个任务中的中等级别,设为 。显示任务负责将采集的数据显示在 LED 屏上,它由采样任务触发。根据优先 级安排原则,将其优先级定为 7 个任务中的最低优先级,设为 。系统中任务的优先级安排如下程序清单所示,void Task_FastSamp(void *pdata); /使用高优先级中断的采样,优先级 5void Task_HookSamp(void *pdata); /使用钩子函数的采样任务,优先级 6void Task_TimerSamp(void *pdata); /使用定时中断

8、的采用任务,优先 级 7void Task_DelaySamp(void *pdata); /使用延时函数的采用任务,优先 级 8void Task_Send(void *pdata); /串口发送任务,优先级 13void Task_Key (void *pdata); /键盘任务,优先级 15void Task_Disply(void *pdata); /显示任务,优先级 17程序运行过程中,当系统检测到键盘输入后,根据采样周期的设定值而创建 一个采样任务和串口发送任务 Task_Send() 个采样任务 Task_FastSamp (),Task_HookSamp(),Task_Time

9、rSamp),Task_DelaySamp()和串口发 送任务 Task_Send()均为一次性任务,且在任务完成后自动删除。 ()为消息队列驱动的任务,根据消息队列传送的内容进行不同的显示操作。 Task_Key()是周期性执行的任务,不断检测键盘输入,并根据检测结果,做出不 同的响应。键盘任务是系统运行的第一个任务,负责系统初始化和其它任务的创建。该 任务运行后,接收用户输入并根据接收到的输入值启动不同的采样任务。同时,将 接收到的输入值通过消息队列的形式发送到显示任务。显示任务负责显示用户输入的参数值和采样任务采样得到的数据。串口发送任务在键盘任务检测到发送操作按键确定时创建。该任务负责

10、从全 局采样数组中读取数据并使用中断方式发送到上位机。全局采样数组是系统初始化 时建立的 FIFO 缓存,通过互斥信号量保护。4 个采样任务均在键盘接收到用户输入后创建,不同的采样任务使用不同的 采样方式进行采样,并将采样所得数据保存在全局 缓存中。所有采样任务在 采样过程中的工作就是检测什么时候采样结束,并且负责将采样所得的数据进行处 理。处理完毕后,发送消息通知显示任务,最后删除自己本身。8.3 任务实详解开始程序设计之前,首先了解一下主函数。在主函数中,进行了操作系统的 初始化,创建了一个键盘任务,然后,启动多任务操作系统。主程序代码如下:int main(void)#if (OS_TA

11、SK_NAME_SIZE = 16)INT8U err;#endifBsp_Init(); /系统外设初始化PWM_IoConfiguration(); /初始化系统时钟OSInit(); /* 初始化 OS */Tmr_TickInit(); / 操作系统 Tick 初始化OSTaskCreateExt(Task_Key, /任务指针(void *)0,(OS_STK *)&InitTaskStkOS_INIT_TASK_STACK_SIZE - 1,OS_TASK_KEY_PRIO, /任务优先级OS_TASK_KEY_PRIO,(OS_STK *)&InitTaskStk0,OS_INI

12、T_TASK_STACK_SIZE,(void *)0,OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);#if (OS_TASK_NAME_SIZE = 16)OSTaskNameSet(OS_TASK_IDLE_PRIO, (INT8U *)Idle task, &err);OSTaskNameSet(OS_TASK_INIT_PRIO, (INT8U *)Init task, &err);#endifOSStart(); /* 启动多任务环境 */return(0);从程序中可以看到,当执行 OSStart()后,主函数返回,但了解了 操作系统后,可以

13、知道这个“return 0”的语句是不可能执行的。在主函数中创建了一个键盘任务 Task_Key(),其优先级为 ,负责初始化目标板和根据用户输 入创建其他任务。8.3.1 键盘任务键盘任务的主要工作就是周期性扫描键盘,优先级为 。其程序流程图如图 8.1 所示。图 8.1 键盘任务程序流程图程序中,首先进行目标板初始化,目标板初始化过程请参见 处 理器内部资源 C 编程与实例一章讲解。之所以将目标的初始化放在第一个任务 里,是为了保证该初始化在 OSStart()执行后完成。值得注意的是,与采样任务相 关的 A/D 转换初始化也放在了这里,这是因为 个采样任务都用到了 A/D 转换,放 在键

14、盘任务中一次完成,避免了在每个采样任务中单独初始化而带来的代码冗余。接下来创建显示任务 Task_Disp(),屏幕初始化工作放在 该任务中完成。最后创建了任务轮转不可或缺的一些操作系统资源,包括一个互斥信号量 Sem,一个邮箱 MyMbox 和一个消息队列 ReMsgQeue其中消息队列中消息数目定义 为 10。按键处理是这个键盘任务的关键,这个键盘任务中状态转移情况如表 所 示。表 8.1 键盘状态转移表初始状态操作键动作“确定”键 flag 状态翻转,进入周期修改状态或退出修改状态“数字”键 状态 1:状态选定 “清零”键“移动”键如果为数字键并且 flag=1,则设定数字有效并显 示;否则不响应如果 flag=1,则将保存的设定值清零并显示,否 则不响应如果 flag=0,则进入启动选定状态并显示,否则 不响应如果 clflagp=1,则清零 clflagp。状态 2:启动采 样“确定”键如果采样周期为 20ms,则创建钩子函数采样任务如果采样周期为 20ms 的整倍数,但不为 ,则 创建延时函数采样任务。状态 3:清屏操 作状态 4:发送命 令状态“移动”键“确定”键“移动”键“确定”键“移动”键进入显示选定状态清除上一次显示的采样数据创建发送任务,将采样所得数据送上位机创建发生任务,将采样所得的数据发送到上位机 进入周期选定状态“确定”键 flag

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论