lisuweizhai 发表于 2009-1-4 01:47:17

学习贴:简易多任务OS设计---ARM9上运行的简单多任务调度器(源码+详细设计文档)【恢复】

本文档以ARM9(三星2410/2440)为平台,介绍一个多任务抢占式调度器------抢占式任务调度,提供延时,挂起,恢复任务操作。最精简化,没有加入信号量邮箱等同步通信机制。只实现一个基本任务调度器的功能。

虽然不能称为操作系统,但已体现了小型嵌入式操作系统的精髓。OS代码不到1.5K,核心函数只有几个,思路简单明了。比起UCOS,更适合用作多任务系统原理的学习入门。 对初学者来说,看UCOS的源代码很容易迷糊。

回想初学嵌入式多任务系统时,什么都不懂,Jean J.Labrosse的经典之作《嵌入式实时操作系统uc/osII》看得我一头雾水。事实上,使我对多任务的原理印象最深的是网上的一篇文章----《建立一个属于自己的AVR的RTOS》。

学习就应该这样,循序渐进。把一步步把简单的东西弄懂了,便没有复杂的了,所谓水到渠成。

这篇文章是面对初学者的,把很多问题简化了。希望对刚接触嵌入式多任务系统的兄弟有所帮助。

必定存在不少bug,欢迎指正。

点击此处下载 ourdev_570383.rar(文件大小:467K) (原文件名:SIMPLE_OS.rar) 



本贴被 lisuweizhai 编辑过,最后修改时间:2009-01-04,02:18:57.

supersai 发表于 2009-1-21 01:29:45

不错,顶一下!

zjr0411 发表于 2009-1-21 01:13:07

谢谢楼主,下了还没有看完,感觉不错,对我学习OS很有启发,以前看uc/os-ii很吃力的,整个系统的工作过程一直不明白,看了你的文档感觉整个os的工作过程让我明白了,谢谢楼主!

lj_3915 发表于 2009-1-20 22:50:11

楼主能不能提供AVR的移植?

sol84 发表于 2009-1-4 09:29:38

看看,研究一下

ba_wang_mao 发表于 2009-1-4 09:21:23

我刚开始看Jean J.Labrosse的经典之作《嵌入式实时操作系统uc/osII》,也是看得我一头雾水。看了几遍之后,转而看陈明计的SMALL RTOS51,只不过SMALL RTOS的任务切换稍微有点复杂,其余看得比较顺。

  总结:

    RTOS就是采用软件的方法人为模拟一次硬件中断,就是不断地保存现场和恢复现场,然后在任务之间切换执行。

Chenxg 发表于 2009-3-10 10:53:21

很感谢像你们这样真正的大虾,正是你们这样的人把我们这些菜菜领进了大门!!

xhrabbit 发表于 2009-3-10 16:35:51

谢谢,目前还在看基本概念
你的文档做得很漂亮,赞一个。

zchong 发表于 2009-4-14 17:34:39

原帖原来在这呢,顶,现在想学RTOS,就是没啥头绪,基本功太差

ba_wang_mao 发表于 2009-4-14 17:43:52

楼主写得不错。
  但是关于任务切换过程,讲得比较简单。有时间我重新在楼主的基础上,强化这方面的讲解。
  (1)、任务堆栈初始化
  (2)、如何启动uC/OS-II
    (3)、OS_TASK_SW()
    (4)、OSCtxSW()
    (5)、OSIntCtxSW()
    (6)、OSTickISR()
    (7)、OSIntExit()
    (8)、OSStartHighRdy()
  (9)、OSTimeTick()

 如果能把上述9个函数之间每发生的过程都讲得清楚,初学者就基本了解了uC/OS-II的工作过程。

zchong 发表于 2009-4-14 19:55:37

支持楼上,呵呵

oberon 发表于 2009-4-18 20:44:54

Mark

lionliu 发表于 2009-5-16 14:49:38

谢谢

piero918 发表于 2009-6-8 11:06:02

谢谢楼主分享。

lktdm 发表于 2009-6-11 20:19:37

通俗易懂,很好很强大。。。

dongchanger 发表于 2010-6-4 11:13:01

“很感谢像你们这样真正的大虾,正是你们这样的人把我们这些菜菜领进了大门!! ”
同感

395424795 发表于 2010-7-1 21:59:06

不错,下了,学习学习!

xinmcu 发表于 2010-7-21 15:53:23

看完了,写的还真不错,简单明了。非常有助于我接下来要学习UCOS II。呵呵

zhouq3132 发表于 2010-7-24 19:22:49

标记一下

jsjlj 发表于 2010-7-29 23:30:56

EXPORT   OS_TASK_SW
OS_TASK_SW_INT                                                       
                        sub sp,sp,#4                                ; 为PC保留位置
                        stmfd sp!,{r0-r12,lr}                ; r0-r12,lr入栈
          ..............
               
OS_TASK_SW                                                                                                                                                                               
                        stmfd sp!,{lr}            ; PC 入栈
                        stmfd sp!,{r0-r12,lr}                ; r0-r12,lr入栈
PUAH_PSR                       
                        mrs r4,cpsr
                        stmfd sp!,{r4}                               
SaveSPToCurTcb                                             
              ldr r4,=p_OSTCBCur                       
              ldr r5,                               
              str sp,                      
GetHigTcbSP                                                       
              ldr r6,=p_OSTCBHighRdy               
              ldr r6,
              ldr sp,                               
                        b   POP_ALL                       
POP_ALL                       
            ldmfd sp!,{r4}            ; psr出栈
            msr CPSR_cxsf,r4       
                        ldmfd sp!,{r0-r12,lr,pc}    ; r0-r12,lr,pc出栈
------------------------------------------------------------------------------------------------------
请问像上面结构的汇编,在C里调用OS_TASK_SW,是不是会跳到OS_TASK_SW中的stmfd sp!,{lr}里去执行。然后一直到底呢?

zhangfeibao 发表于 2011-9-18 21:35:08

回复【1楼】ba_wang_mao
-----------------------------------------------------------------------
谢谢楼主,我是写家用电器程序的,从楼主的帖子中学到颇多,谢谢楼主。

syma 发表于 2012-2-16 16:26:15

mark!
学习贴:简易多任务OS设计---ARM9上运行的简单多任务调度器(源码+详细设计文档)
页: [1]
查看完整版本: 学习贴:简易多任务OS设计---ARM9上运行的简单多任务调度器(源码+详细设计文档)【恢复】