rtos的核心原理简析

来源:互联网 发布:淘宝买家让加微信骗局 编辑:程序博客网 时间:2024/06/01 10:18

来自我的论坛

rtos的核心原理简析

rtos全称real-time operating system(实时操作系统),我来简单分析下:

我们都知道,c语句中调用一个函数后,该函数的返回地址都是放在堆栈中的(准确的说是栈中)。

rtos个人理解是一种黑客行为,他悄悄的修改了这个保存在栈中的返回这个地址,让调用函数返回到我们想让他返回的地方。

好了,这个返回什么时候返回呢?



一、 任务切换有两种:

  1. 任务自己主动要求切换,这就是我们常用的sleep()函数了

  2. 我的任务就是不想调用sleep()不切换,怎么呢?  好了,rtos中就有一个tick定时中断,定时中断后就跳转到另一个任务去了。为了保证实时性,外部中断以及其他外设中断也能够立刻切换。



二、 临界区

    切换是可以了,但是现在我的任务运行一个东西就是不能够被打断的,怎么呢? 好了,rtos又有了一东西叫临界区,哈哈,加上就可以满足需求了。



三、 任务同步

    从宏观上看,rtos的每个任务相对并发运行的,我怎么保证任务A运行到某个地方,任务B的继续向下执行? rots就有了信号量一说。



四、任务间数据处理问题

    c开发的很多人常会用全局变量解决,由于个任务运行没有先后顺序,全局变量会带来相关隐行bug,必须慎用;rtos引入了队列、邮箱等解决问题。



以上就是rtos简单分析,不同的rtos还应该以具体源码为准。上面说了rtos,还有一个不得不说的OSAL,全称operating system abstraction layer用过TI的蓝牙,zigbee芯片的朋友都知道,TI用的蓝牙和zigbee协议栈中就有OSAL这个东西。他与rtos又有什么不同呢?



1. 任务与系统

rtos的任务和系统是独立的,也就是说rtos中的任务使用while(1);语句不会影响到系统以及其他任务。

OSAL则不同,任务和系统是耦合在一起的,也就是任务与系统都是运行在一个循环中的,即:

while(1){

    系统

        时钟Tick

        事件信息

        任务处理

        ...

}

2. 延时问题

rtos中很简单,直接调用系统sleep即可

OSAL则只能使用系统提供time来做大的延时,小延时不影响系统也可以使用while(delay--);

原创粉丝点击