/EMOS

嵌入式实时内核

Primary LanguageC

EMOS

EMOS是一个可以基于优先级调度、可裁剪的、抢占式、实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器。目前具有以下特性:

  • 任务管理
    EMOS的任务管理功能包括创建任务、删除任务、挂起任务、唤醒任务。EMOS实时内核的任务调度策略是基于优先级的调度,首先为每一个任务确定一个优先级序号,并按小号高优先级,大号低优先级的规则在就绪表中进行排列,任务调度要做的就是从就绪队列中找出优先级最高的任务,将当前正在运行的任务与之交换CPU使用权。

  • 时间管理
    EMOS通过处理器的时钟确定一个系统时钟节拍,并在每个时钟节拍产生一个时钟中断,每来一个时钟节拍中断便会进入到相应的中断服务程序计数,以此来标定系统当前的运行时间,以及为每个任务计算任务超时时间值,每个任务都会有一个timout计数器,每个时钟中断都会在服务程序中将当前正在运行的任务超时计数器减1,如果timout的值等于0时,则当前任务将被剥夺CPU使用权,并切换到就绪队列中优先级最高的任务。以此来解决某些高优先级一直占用CPU而造成的调度不公平问题。

  • 内存管理
    EMOS的内存管理是按简单的固定块大小分配管理,对于一个实时内核,为了保证其在运行时间上的可预测性,每个动作必须有确定的时间复杂度,因此在EMOS中,并没有用C标准库的内存管理函数,而是采用每次分配或释放固定大小的内存块以保证确定的时间复杂度。

  • 临界资源共享
    在EMOS中通过信号量来解决临界资源的共享问题,系统会在启动前创建一个信号量并将初值设1,以后对于需要进行互斥访问的代码段,首先必须在入口处申请信号量,此时信号量值减1,如果信号量的值小于0,代表当前已经有任务正在访问当前资源,便阻塞当前任务,如果信号量等于0,则当前任务享有访问优先权。

  • 高度可移植 为了提供最好的移植性能,EMOS最大程度上使用ANSI C语言进行开发,并将所有与CPU架构、编译器相关的代码集中到一个C文件中,移植到其它平台时只需要对一个C文件的代码做相应修改。

  • 功能可配置
    整个内核的功能模块可通过在内核配置文件中选择使能某些需要的功能进行重新编译,剪除不需要的功能模块代码,使生成的目标代码占用空间更小,以适应嵌入式设备有限的存储空间。