µC/OS-II学习笔记(二) 实时系统概念

1.       有两种类型的实时系统:软实时系统和硬实时系统。在软实时系统中系统的宗旨是使各个任务运行得越快越好,并不要求限定某一任务必须在多长时间内完成。在硬实时系统中,各任务不仅要执行无误而且要做到准时。

2.       前后台系统: 应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为(background)。中断服务程序处理异步事件,这部分可以看成前台行为(foreground)。后台也可以叫做任务级前台也叫中断级

3.       可重入型函数: 可重入型函数可以被一个以上的任务调用,而不必担心数据的破坏。可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函数或者只使用局部变量,即变量保存在CPU寄存器中或堆栈中。如果使用全局变量,则要对全局变量予以保护。以下技术之一即可使不可重入函数具有可重入性:

l          把变量定义为局部变量

l          调用函数之前关中断,调动后再开中断

l          用信号量禁止该函数在使用过程中被再次调用

4.       优先级反转: 应用程序执行过程中,任务的优先级是可变的,则称之为动态优先级。实时内核应当避免出现优先级反转问题。为防止发生优先级反转,内核能自动变换任务的优先级,这叫做优先级继(Priority inheritance)

5.     互斥条件:实现任务间通讯最简便到办法是使用共享数据结构。特别是当所有到任务都在一个单一地址空间下,能使用全程变量、指针、缓冲区、链表、循环缓冲区等,使用共享数据结构通讯就更为容易。虽然共享数据区法简化了任务间的信息交换,但是必须保证每个任务在处理共享数据时的排它性,以避免竞争和数据的破坏。与共享资源打交道时,使之满足互斥条件最一般的方法有:

l          关中断(μC/OS-Ⅱ在处理内部变量和数据结构时就是使用的这种手段)

l          使用测试并置位指令

l          禁止做任务切换

l          利用信号量

6.     信号量:信号量用于:

l          控制共享资源的使用权(满足互斥条件)

l          标志某事件的发生

l          使两个任务的行为同步

对信号量只能实施三种操作:

l          初始化(INITIALIZE),也可称作建立(CREATE)

l          等信号(WAIT)也可称作挂起(PEND)

l          给信号(SIGNAL)或发信号(POST)

这是我自己写的验证信号量的部分代码:

void task_one(void* pdata);

void task_two(void* pdata);

 

OS_EVENT   *tasktwo;

#include "includes.h"

 

GUI_Init();

VCInit();                                                    //初始化一些变量

OSInit();

timeSetEvent(OS_TICKS_PER_SEC, 0, OSTickISR, 0, TIME_PERIODIC);    //产生节拍

tasktwo  = OSSemCreate(0); 

 

OSTaskCreate(task_two, 0, &TaskStk[7][TASK_STK_SIZE-1], 1);

OSTaskCreate(task_one, 0, &TaskStk[8][TASK_STK_SIZE-1], 2);

 

OSStart();

 

 

7.       使用实时内核的优缺点: 实时内核也称为实时操作系统或RTOS它的使用使得实时应用程序的设计和扩展变得容易,不需要大的改动就可以增加新的功能。通过将应用程序分割成若干独立的任务,RTOS使得应用程序的设计过程大为减化。使用可剥夺性内核时,所有时间要求苛刻的事件都得到了尽可能快捷、有效的处理。通过有效的服务,如信号量、邮箱、队列、延时、超时等,RTOS使得资源得到更好的利用。如果应用项目对额外的需求可以承受,应该考虑使用实时内核。这些额外的需求是:内核的价格,额外的ROM/RAM开销,24百分点的CPU额外负荷。

 

你可能感兴趣的:(µC/OS-II学习笔记(二) 实时系统概念)