|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本文档以ARM9(三星 2410/2440)为平台,介绍一个多任务抢占式调度器------抢占式任务调度,提供延时,挂起,恢复任务操作。最精简化,没有加入信号量邮箱等同步通信机制。只实现一个基本任务调度器的功能。$ ?& ~5 W2 J" p0 ^; X' b3 @8 b
虽然不能称为操作系统,但已体现了小型嵌入式操作系统的精髓。OS代码不到1.5K,核心函数只有几个,思路简单明了。比起 UCOS,更适合用作多任务系统原理的学习入门。 对初学者来说,看UCOS的源代码很容易迷糊。& w( A, k/ f$ y& U
回想初学嵌入式多任务系统时,什么都不懂,Jean J.Labrosse 的经典之作《嵌入式实时操作系统 uc/osII》看得我一头雾水。事实上,使我对多任务的原理印象最深的是网上的一篇文章----《建立一个属于自己的AVR的 RTOS》 。
3 W0 g8 }$ f' p+ T0 M学习就应该这样,循序渐进。把一步步把简单的东西弄懂了,便没有复杂的了,所谓水到渠成。
3 l s: i5 T# U- H这篇文章是面对初学者的,把很多问题简化了。希望对刚接触嵌入式多任务系统的兄弟有所帮助。0 T4 z. V" Q: u" ~" }4 N$ G# I7 f
必定存在不少 bug,欢迎指正。
, Z+ y5 `4 j% R! H; E* z1 p' f
* g. n% H" w( k; w. C
$ {+ d" U: z) Z9 G 什么是多任务系统?) f( i# @/ { n9 \5 t, n( |
就像我们用电脑时可以同时听歌,上网,编辑文档等。在多任务系统中,可以同时执行多个并行任务,各个任务之间互相独立。通过操作系统执行任务调度而实现宏观上的“并发运行” 。从宏观上不同的任务并发运行,好像每个任务都有自己的 CPU一样。6 n. b% m8 [1 S3 B5 |& S) e
其实在单一CPU的情况下,是不存在真正的多任务机制的,存在的只有不同的任务轮流使用CPU,所以本质上还是单任务的。但由于 CPU 执行速度非常快,加上任务切换十分频繁并且切换的很快,所以我们感觉好像有很多任务同时在运行一样。这就是所谓的多任务机制。) E. @& f' C6 S* {2 C
多任务的最大好处是充分利用硬件资源,如在单任务时(大循环结构,如大部分 51程序)遇到 delay函数时,CPU在空转;而在多任务系统,遇到 delay或需等待资源时系统会自动运行下一个任务,等条件满足再回来运行先前的任务,这样就充分利用了 CPU,提高了效率。
' r' T: `) _/ t M( Z* h1 E9 r1 {8 C9 N; N1 K& l) J
+ [6 ^; S0 _* |* Z' R! p$ `
任务有下面的特性:* [& E) R4 f( @( ]
" _$ M& {4 z: Q# J; _
l 动态性。任务并不是随时都可以运行的,而一个已经运行的任务并不能保证一直占有CPU直到运行完。一般有就绪态,运行态,挂起态等。* Z) @$ s( H% T, S O7 X8 x1 S
运行态。一个运行态的任务是一个正在使用 CPU的任务。任何时刻有且只有一个运行着的任务。, T! b+ M3 V5 L' \
就绪态。一个就绪态任务是可运行的,等待占有 CPU的任务释放 CPU。% r7 R* D, q" }# Y
挂起态。某些条件不满足而挂起不能运行的状态。
5 Q( L5 E/ w+ j+ c- \1 A! C0 o7 i" |4 [1 K2 a7 d
|
& `0 M( L4 q2 r3 q6 R) r8 Z
/ W* Z* Q; p6 R7 F' B% d$ t6 _
" ?& @! O, [6 H5 e/ n2 C0 [* V+ O7 b# d" G' }$ `# Y: p
2 T* I: J- z" l6 g8 k/ C x |
|