- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OS21 操作系统——概述
1.OS21 概述
OS21 是一个免费、轻量级的多任务实时操作系统,基于 OS20 API 设计,使用 GNU工具
进行编译,gdb 进行调试。目前 OS21主要用于 ST公司的机顶盒主芯片(ST40/ST200)中,
与应用程序一道生成单一映象文件,具有相同的地址空间与名字空间,以及相同的特权模式。
OS21 采用了多优先级、占先式的任务调度算法,任务之间使用信号量、互斥锁、事件标
签进行同步;使用消息队列进行通信。实时事件由中断处理,并使用信号量与任务通信。任
务所需的内存分配方案由用户选择,任务优先级可指定。提供的主要功能有:
(1)基于 256 级的多优先级、可占先式调度;
(2)信号量(semaphores);
(3)互斥锁(mutexes);
(4)消息队列(message queues);
(5)高精度定时器;
(6)存储管理;
(7)中断处理;
(8)节省存储空间。
从性能上讲,OS21 提供的任务间切换时间小于2.6us,中断响应时间最小为
1.5us,整个代码小于30KB,数据小于5KB。
OS21提供给应用程序的API可分为核心API与CPU相关的API,在不同CPU
间移植时需要修改后者。代码目录结构如下:
图(略)
可以看出,OS21提供的每一项系统服务基本上分为单独的目录,甚至有单
独的.h文件来定义变量、宏和函数。
OS21使用面向对象编程风格,每个主要的OS21系统服务由一个类来表示,
例如:存储分区、任务、信号量、互斥量等。类的实例被分配在系统分区或用户
自定义分区中,不使用时需要回收其占用空间。
2.OS21与 OS20 的异同点
OS21与OS20 提供的系统服务比较相似,调用的 API 函数名称也很相似,具体来说包含
下列 API:
(1) Kernel API
(2) Memory and partitions
(3) Tasks and scheduler APIs
(4) Semaphore API
(5) Memory API
(6) Time API
但OS20针对 ST20 CPU 进行开发,OS21 则针对ST40 CPU 进行开发,二者在 BSP 部分存
在较大不同。
头文件:与 OS20 相比,OS21 采用了意义更明确的头文件。如下:
内核启动:OS20提供了两种方式来启动内核:手动和自动方式(在编译时
通过添加 -runtime os20实现),OS21通常只使用手动方式来启动内核。尽管
也可实现自动启动。
int main(void)
{
kernel_initialize(NULL);
kernel_start();
kernel_timeslice(OS21_TRUE);
...
}
OS21 的时间片功能缺省为关闭,要使用时需要手动打开。
任务方面:与 OS20相比,当改变任务的优先级时,该任务在队列中的位置也发生了变
化。
OS20 使用了两个预定义的内存空间——system_partion与 internal_partion,用户也
可访问,在 OS21 中则没有这两个空间,而需要自行分配。在 OS21 中的堆内存既可由 C运行
库函数(malloc 和free)管理,也可由 OS21 自身管理。
通常情况下 OS20 中所有的_init()函数均被_create()所代替,尽管_init()函数的优点
在于内存分配的灵活性,OS21 采取了一个不同的解决办法来增加灵活性:除了_create()函
数外,还增加了_create_p()函数来定义 partition 指针。这在存储空间紧张的系统中,可
由应用程序自己选择从哪块空间中分配。如图:下列_init()函数都将由_create()或
_create_p()函数代替。
message_init_queue()
message_init_queue_timeout()
partition_init_fixed()
文档评论(0)