新闻  |   论坛  |   博客  |   在线研讨会
既实时又可分时调度smallRTOS51操作系统
yanqin | 2009-04-17 01:27:48    阅读:1826   发布文章

                 既实时又可分时调度small RTOS51操作系统

    这个程序是在陈明计先生编写的small RTOS51的基础上编写的,本程序包含了完
整的small RTOS51 1.12.1版。有关small RTOS51更多的内容请访问www.zlgmcu.com

    在实际使用实时操作系统时,有些处理过程确实需要实时处理,例如一些控制操作等,都需要在确定的时间内完成操作。而有些操作,并不需要实时,而这些操作又难以分配出合理的优先级,即使强行分出优先级也会影响性能。

    为small RTOS51增加时间片轮转调度算法,用户可以根据需要定义那些为实时任务,那些为分时任务,这样做不仅不会影响实时任务的实时性,还会提高不要求实时响应任务的执行效率和编写非实时任务的难度。即使有一个非实时任务永远不打算释放CPU的控制权,当任务的时间片用完时,CPU被时间片轮转调度任务抢占,其他的等优先级分时任务就会得到CPU.

    实现方法:建立一个优先级比实时任务低的任务做为时间片轮转调度任务,所有要分时调度的任务依次建立使用的优先级比这个任务要低且中间不可有闲置的优先级。这样就在small RTOS51上实现了时间片轮转调度,且所有的时间片轮转调度任务的优先级就是时间片轮转调度任务的优先级,建立这样的任务需定义两个常量,一个是时间片轮转调度任务的优先级,另一个是这个优先级的分时任务的数量。


优 先 级        高        ――――――――――>              低
任务类型      实时任务 ―――  时间片轮转调度任务 ――― 分时任务


    例子中,先按照优先级建立5个任务,一个实时任务realtime,一个分时任务
调度任务TimerSchedule,三个分时任务task1,task2,task3.再在TimerSharing.h
中设置OS_Time_Slice_Prio,OS_Time_Slice_Sum两个宏。

    试着将os_cfg.h中EN_TIME_SLICE_SCHED选项改为0,然后离线仿真这个程序,
点击KEIL uVersion2--->View--->Serial Window #1,看看串口会输出有什么变化。

    编译器出现3个Warning,那是3个任务调用了同一个不可重入函数printf导致,
已使用关中断的方法禁止某个任务调用printf过程中被中断。

    另外,使用连接定位控制OVERLAY(*!sfname) 为sfname增加新的根,使
实时操作系统为每个任务函数设置自己的程序路径或根,也就是让任务的调
用树可以独立分析。这样就可以对每个任务隔离开来进行覆盖分析。
在Option for Target中的BL51 Misc的选项卡中可以设置此项。

                                                                      徐宝田    2005年2月1日

点击下载

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客