学习贴:简易多任务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. 不错,顶一下! 谢谢楼主,下了还没有看完,感觉不错,对我学习OS很有启发,以前看uc/os-ii很吃力的,整个系统的工作过程一直不明白,看了你的文档感觉整个os的工作过程让我明白了,谢谢楼主! 楼主能不能提供AVR的移植? 看看,研究一下 我刚开始看Jean J.Labrosse的经典之作《嵌入式实时操作系统uc/osII》,也是看得我一头雾水。看了几遍之后,转而看陈明计的SMALL RTOS51,只不过SMALL RTOS的任务切换稍微有点复杂,其余看得比较顺。
总结:
RTOS就是采用软件的方法人为模拟一次硬件中断,就是不断地保存现场和恢复现场,然后在任务之间切换执行。 很感谢像你们这样真正的大虾,正是你们这样的人把我们这些菜菜领进了大门!! 谢谢,目前还在看基本概念
你的文档做得很漂亮,赞一个。 原帖原来在这呢,顶,现在想学RTOS,就是没啥头绪,基本功太差 楼主写得不错。
但是关于任务切换过程,讲得比较简单。有时间我重新在楼主的基础上,强化这方面的讲解。
(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的工作过程。 支持楼上,呵呵 Mark 谢谢 谢谢楼主分享。 通俗易懂,很好很强大。。。 “很感谢像你们这样真正的大虾,正是你们这样的人把我们这些菜菜领进了大门!! ”
同感 不错,下了,学习学习! 看完了,写的还真不错,简单明了。非常有助于我接下来要学习UCOS II。呵呵 标记一下 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}里去执行。然后一直到底呢? 回复【1楼】ba_wang_mao
-----------------------------------------------------------------------
谢谢楼主,我是写家用电器程序的,从楼主的帖子中学到颇多,谢谢楼主。 mark!
学习贴:简易多任务OS设计---ARM9上运行的简单多任务调度器(源码+详细设计文档)
页:
[1]