EDA365电子论坛网

标题: ARM9(三星2410/2440) 多任务抢占式调度器 简易0S设计 [打印本页]

作者: MLXG    时间: 2021-9-27 13:07
标题: ARM9(三星2410/2440) 多任务抢占式调度器 简易0S设计
本文档以ARM9(三星 2410/2440)为平台,介绍一个多任务抢占式调度器------抢占式任务调度,提供延时,挂起,恢复任务操作。最精简化,没有加入信号量邮箱等同步通信机制。只实现一个基本任务调度器的功能。
9 n& g. ^- M" Z9 M: M6 J8 b虽然不能称为操作系统,但已体现了小型嵌入式操作系统的精髓。OS代码不到1.5K,核心函数只有几个,思路简单明了。比起 UCOS,更适合用作多任务系统原理的学习入门。  对初学者来说,看UCOS的源代码很容易迷糊。1 G9 F  A4 R1 J0 Q  d3 F/ V
回想初学嵌入式多任务系统时,什么都不懂,Jean  J.Labrosse 的经典之作《嵌入式实时操作系统 uc/osII》看得我一头雾水。事实上,使我对多任务的原理印象最深的是网上的一篇文章----《建立一个属于自己的AVR的 RTOS》 。
' l/ _; N) K3 a学习就应该这样,循序渐进。把一步步把简单的东西弄懂了,便没有复杂的了,所谓水到渠成。
' x9 H5 g; j! F( s这篇文章是面对初学者的,把很多问题简化了。希望对刚接触嵌入式多任务系统的兄弟有所帮助。
# Z  u7 Z7 T+ x2 T1 }% [# C必定存在不少 bug,欢迎指正。# k7 l# _. A- ^1 v# X

5 B/ j0 C$ J; \9 j) s) {9 [( o; B/ |2 k8 t% `% L- P7 ^
  什么是多任务系统?# g$ P( F9 j* I, M8 A7 M. N
就像我们用电脑时可以同时听歌,上网,编辑文档等。在多任务系统中,可以同时执行多个并行任务,各个任务之间互相独立。通过操作系统执行任务调度而实现宏观上的“并发运行” 。从宏观上不同的任务并发运行,好像每个任务都有自己的 CPU一样。
4 S  `/ @0 e$ B8 q- g3 l: P其实在单一CPU的情况下,是不存在真正的多任务机制的,存在的只有不同的任务轮流使用CPU,所以本质上还是单任务的。但由于 CPU 执行速度非常快,加上任务切换十分频繁并且切换的很快,所以我们感觉好像有很多任务同时在运行一样。这就是所谓的多任务机制。. V: ~) o4 F) H  I4 u1 p+ h
多任务的最大好处是充分利用硬件资源,如在单任务时(大循环结构,如大部分 51程序)遇到 delay函数时,CPU在空转;而在多任务系统,遇到 delay或需等待资源时系统会自动运行下一个任务,等条件满足再回来运行先前的任务,这样就充分利用了 CPU,提高了效率。% i4 h  P! s7 c* h% H5 v) ^  \) H- a% d$ o

( q7 A. [6 S0 `6 |! F
4 x# a& N. A& V  @任务有下面的特性:
7 F! m4 d$ d! B" K
1 X' N7 Y: Q8 m& R; Y  d& m" h4 wl  动态性。任务并不是随时都可以运行的,而一个已经运行的任务并不能保证一直占有CPU直到运行完。一般有就绪态,运行态,挂起态等。1 m' O: p9 m6 e1 `" D6 D
  运行态。一个运行态的任务是一个正在使用 CPU的任务。任何时刻有且只有一个运行着的任务。( x: b2 b: \/ H! N1 k4 w/ z
  就绪态。一个就绪态任务是可运行的,等待占有 CPU的任务释放 CPU。
; S( K' N" m- D% X2 k1 G8 s  挂起态。某些条件不满足而挂起不能运行的状态。
0 q8 [/ S$ T- I( }  w9 p# ~
1 J) X  Y! J% I' @

" U# p+ T: T! y8 e' d0 v; ?
, h6 T% y! h1 o6 f6 `( t2 j* L& L4 E9 w; \9 l9 U# z

0 I6 \5 ^5 t0 X, M$ Y- K6 D
. i9 A( b9 q  E
作者: xiananUZI    时间: 2021-9-27 13:48
在单一CPU的情况下,是不存在真正的多任务机制的,存在的只有不同的任务轮流使用CPU,所以本质上还是单任务的
作者: guanshen    时间: 2021-9-27 19:30
多任务的最大好处是充分利用硬件资源




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2