打印
[STM32F1]

对RTOS的理解

[复制链接]
1990|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 小小小小白 于 2014-5-25 21:24 编辑

    前几日看完了ucos-3这本书,在此说一下我对于RTOS的理解。我觉得ucos-3适合arm cortex-m系列的MCU。而ucos-2适合以往的8位、16位MCU。
    以前只写了51单片机的裸机程序,大致结构就是main函数,初始化,然后while(1)。这种简单的结构叫做前后台系统。

    这种简单的结构能处理少量的任务,对于多任务和实时性就会表现得力不从心。
    UCOS-3具有任务管理机制和丰富的内核对象,并且是一个抢占式内核。在ucos-3,中,一切皆为任务,任务(或者ISR)和任务之间通过内核对象进行通信(如信号量,互斥型信号量,任务信号量,事件标志组,消息队列等)。在ISR中,通过调用API函数给对应的任务发信号,这样把ISR的代码放到任务里边处理,大大缩短了ISR的执行时间。
    再说一下ucos-3的一些细节。ucos-3创建一个任务需要13个参数,而ucos-2只需要4个参数。支持任意数目的任务优先级别,允许多个任务有相同的优先级。优先级相等的任务采用时间片轮转调度算法。支持任意多个timer,实际上这些timer应该都是由一个硬件timersystick模拟的。这些“软”timer也支持回调函数,回调函数相当于硬件timer的ISR,但是实时性比不上真正的timer。
    不早了,就先写到这儿。
@dianzijiangren







沙发
icecut| | 2014-5-25 21:24 | 只看该作者
ucos3 升级一下,满足大家都心理感觉

使用特权

评论回复
板凳
airwill| | 2014-5-26 07:46 | 只看该作者
分析得很好,  据称, ucos2 没有使用 Cortex M3/4 的优先权限. 不知道 ucos3 有没有使用.
在一般的系统中, 我觉得 ucos 都显得庞大了. 我不希望系统支持 优先调度的同时再去支持时间片.
相反, 以最小的系统开销换来最大的系统实时性, 我觉得更值得欣赏.

使用特权

评论回复
地板
mmuuss586| | 2014-5-26 08:37 | 只看该作者

不知道ucos3和2比,实时性怎么样

使用特权

评论回复
5
SLHSu37| | 2014-5-26 08:45 | 只看该作者
看回复都是版主··我等小白好好学习吧····:)

使用特权

评论回复
6
戈卫东| | 2014-5-26 10:15 | 只看该作者
感觉到了UCOS-III这里,简单易用的优点已经失去了。。。。。。

使用特权

评论回复
7
小小小小白|  楼主 | 2014-5-26 10:17 | 只看该作者
airwill 发表于 2014-5-26 07:46
分析得很好,  据称, ucos2 没有使用 Cortex M3/4 的优先权限. 不知道 ucos3 有没有使用.
在一般的系统中,  ...

如果不希望采用时间片轮转调度,把每个任务设置为不同的优先级就行了,这样就类似于UCOS-2

使用特权

评论回复
8
bobo5650| | 2014-5-26 11:31 | 只看该作者
戈卫东 发表于 2014-5-26 10:15
感觉到了UCOS-III这里,简单易用的优点已经失去了。。。。。。

平台的东西经常越做越复杂,提供越来越多的接口

使用特权

评论回复
9
sgj245609615| | 2014-5-26 11:58 | 只看该作者
路过 学习一下   

使用特权

评论回复
10
HORSE7812| | 2014-5-26 15:38 | 只看该作者
:)

使用特权

评论回复
11
dianzijiangren| | 2014-5-28 19:31 | 只看该作者
今晚吃多了 撑死我了 擦

使用特权

评论回复
12
小小小小白|  楼主 | 2014-5-28 19:39 | 只看该作者
  继续更新。Micrium公司写了一本ucos-3的书,书上有4个demo,我把第三个拿来跑了跑。
  据我的理解,这个任务是分别测量内核对象(包括信号量、任务内建信号量、消息队列、任务内建消息队列、互斥型信号量、事件标志组)
  在任务内传递的时间和两个任务之间传递的时间。下面对源码做个简要的说明。
  
定义了一个结构体,里边有两个指向函数的指针。
  typedef  struct  test {    void  (*Tx)(CPU_INT08U  ix);
    void  (*Rx)(CPU_INT08U  ix);
} APP_TEST;


下面定义了一个结构体数组,并且为每一个成员赋予所指向的函数的指针,这样就构成了上图的AppTestTbl[]。
注意,每一个成员都指向一个函数,也就是函数名。
static  APP_TEST  AppTestTbl[] = {
    {AppTestTx_Sem1,     AppTestRx_Sem1    },     //  0
    {AppTestTx_Sem2,     AppTestRx_Sem2    },     //  1
    {AppTestTx_TaskSem1, AppTestRx_TaskSem1},     //  2
    {AppTestTx_TaskSem2, AppTestRx_TaskSem2},     //  3

    {AppTestTx_Q1,       AppTestRx_Q1      },     //  4
    {AppTestTx_Q2,       AppTestRx_Q2      },     //  5

    {AppTestTx_TaskQ1,   AppTestRx_TaskQ1  },     //  6
    {AppTestTx_TaskQ2,   AppTestRx_TaskQ2  },     //  7

    {AppTestTx_Mutex1,   AppTestRx_Mutex1  },     //  8

    {AppTestTx_Flag1,    AppTestRx_Flag1   },     //  9
    {AppTestTx_Flag2,    AppTestRx_Flag2   },     // 10
    {0,                  0                 }
};

不知大家是否有兴趣。我先把uc-probe的一些调试信息展示出来。
正式版需要购买,我用的是试用版,许多功能受到限制,不过还是能看到一些调试信息。
令我感到困惑的是CPU Usage竟然达到了98%。
uc-probe还可以通过拖拽控件创建图形界面(最后一张图),以显示某个变量的值,非常直观。
但是由于没有购买正式版,这个功能暂时不可用。







使用特权

评论回复
13
xuan309170083| | 2014-5-28 21:09 | 只看该作者
话说3支持时间片法了

使用特权

评论回复
14
小小小小白|  楼主 | 2014-5-29 08:35 | 只看该作者
xuan309170083 发表于 2014-5-28 21:09
话说3支持时间片法了

支持,同优先级的任务就是时间片处理

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

515

帖子

4

粉丝