历史上的今天
返回首页

历史上的今天

今天是:2025年12月05日(星期五)

正在发生

2022年12月05日 | 适合STM32的三大嵌入式操作系统

2022-12-05 来源:zhihu

基于STM平台且满足实时控制要求操作系统,有以下5种可供移植选择。分别为μClinux、μC/OS-II、eCos、FreeRTOS和都江堰操作系统(djyos)。下面分别介绍这五种嵌入式操作系统的特点及不足。


1、μClinux


μClinux是一种优秀的嵌入式Linux版本,其全称为micro-control Linux,从字面意思看是指微控制Linux。同标准的Linux相比,μClinux的内核非常小,但是它仍然继承了Linux操作系统的主要特性,包括良好的稳定性和移植性、强大的网络功能、出色的文件系统支持、标准丰富的API,以及TCP/IP网络协议等。因为没有MMU内存管理单元,所以其多任务的实现需要一定技巧。


μClinux在结构上继承了标准Linux的多任务实现方式,分为实时进程和普通进程,分别采用先来先服务和时间片轮转调度,仅针对中低档嵌入式CPU特点进行改良,且不支持内核抢占,实时性一般。


μClinux操作系统的中断管理是将中断处理分为两部分:顶半处理和底半处理。在顶半处理中,必须关中断运行,且仅进行必要的、非常少、速度快的处理,其他处理交给底半处理;底半处理执行那些复杂、耗时的处理,而且接受中断。因为系统中存在有许多中断的底半处理,所以会引起系统中断处理的延时。


μClinux对文件系统支持良好,由于μClinux继承了Linux完善的文件系统性能,它支持ROMFS、NFS、ext2、MS-DOS、JFFS等文件系统。但一般采用ROMFS文件系统,这种文件系统相对于一般的文件系统(如ext2)占用更少的空间。但是ROMFS文件系统不支持动态擦写保存,对于系统需要动态保存的数据须采用虚拟RAM盘/JFFS的方法进行处理。


综上可知,μClinux最大特点在于针对无MMU处理器设计,这对于没有MMU功能的stm32f103来说是合适的,但移植此系统需要至少512KB的RAM空间,1MB的ROM/FLASH空间,而stmf103拥有256K的FLASH,需要外接存储器,这就增加了硬件设计的成本。μClinux结构复杂,移植相对困难,内核也较大,其实时性也差一些,若开发的嵌入式产品注重文件系统和与网络应用则μClinux是一个不错的选择。


2、μC/OS-II


μC/OS-II是在μC/OS的基础上发展起来的,是用C语言编写的一个结构小巧、抢占式的多任务实时内核。μC/OS-II能管理64个任务,并提供任务调度与管理、内存管理、任务间同步与通信、时间管理和中断服务等功能,具有执行效率高、占用空间小、实时性能优良和扩展性强等特点。


对于实时性的满足上,由于μC/OS-II内核是针对实时系统的要求设计实现的,所以只支持基于固定优先级抢占式调度;调度方法简单,可以满足较高的实时性要求。


在内存管理上,μC/OS-II把连续的大块内存按分区来管理,每个分区中都包含整数个大小相同的内存块,但不同分区之间内存的大小可以不同。用户动态分配内存时,只须选择一个适当的分区,按块来分配内存,释放时将该块放回到以前所属的分区,这样就消除了因多次动态分配和释放内存所引起的碎片问题。


μC/OS-II中断处理比较简单。一个中断向量上只能挂一个中断服务子程序ISR,而且用户代码必须都在ISR(中断服务程序)中完成。


ISR需要做的事情越多,中断延时也就越长。


内核所能支持的最大嵌套深度为255。


在文件系统的支持方面,由于μC/OS-II是面向中小型嵌入式系统的,即使包含全部功能,编译后内核也不到10 KB,所以系统本身并没有提供对文件系统的支持。但是μC/OS-II具有良好的扩展性能,如果需要也可自行加入文件系统的内容。


在对硬件的支持上,μC/OS-II能够支持当前流行的大部分CPU,μC/OS-II由于本身内核就很小,经过裁剪后的代码最小可以为2KB,所需的最小数据RAM空间为4 KB,μC/OS-II的移植相对比较简单,只需要修改与处理器相关的代码就可以。

综上可知,μC/OS-II是一个结构简单、功能完备和实时性很强的嵌入式操作系统内核,针对于没有MMU功能的CPU,它是非常合适的。它需要很少的内核代码空间和数据存储空间,拥有良好的实时性,良好的可扩展性能,并且是开源的,网上拥有很多的资料和实例,所以很适合向stm32f103这款CPU上移植。


3、eCos


eCos(embedded Configurable operating system),即嵌入式可配置操作系统。它是一个源代码开放的可配置、可移植、面向深度嵌入式应用的实时操作系统。最大特点是配置灵活,采用模块化设计,核心部分由小同的组件构成,包括内核、C语言库和底层运行包等。每个组件可提供大量的配置选项(实时内核也可作为可选配置),使用eCos提供的配置工具可以很方便地配置,并通过不同的配置使得eCos能够满足不同的嵌入式应用要求。


在实时性反面,由于eCos调度方法丰富,提供了两种基于优先级的调度器(即位图调度器和多级队列调度器),允许用户在进行配置时选择其中一个调度器,适应性好。因此在实时性方面表现良好。


在内存管理上eCos对内存分配既不分段也不分页,而是采用一种基于内存池的动态内存分配机制。通过两种内存池来实现两种内存管理方法:一种是变长的内存池;另一种是定长的内存池,类似于VxWorks的管理方案。


在中断管理上eCos使用了分层式中断处理机制,把中断处理分为传统的ISR(中断服务程序)和滞后中断服务程序DSR(递延服务程序)。类似于μClinux的处理机制,这种机制可以在中断允许时运行DSR,因此在处理较低优先级中断时允许高优先级的中断和处理。为了极大地缩短中断延时,ISR应当可以快速运行。如果中断引起的服务量少,则ISR可以单独处理中断;如果中断服务复杂,则ISR只屏蔽中断源,然后交由DSR(递延服务程序)处理。


eCos操作系统的可配置性非常强大,用户可以自己加入所需的文件系统。eCos操作系统同样支持当前流行的大部分嵌入式CPU,eCos操作系统可以在16位、32位和64位等不同体系结构之间移植。eCos由于本身内核就很小,经过裁剪后的代码最小可以为10 KB,所需的最小数据RAM空间为10 KB。


在系统移植方面 eCos操作系统的可移植性很好,要比μC/OS-II和μClinux容易。

综上所述,eCos最大特点是配置灵活,并且支持无MMU的CPU的移植,开源且具有很好的移植性,也比较合适于移植到stm32平台的CPU上。但eCOS的应用还不是太广泛,还没有像μC/OS-II那样普遍,并且资料也没有μC/OS-II多。eCos适合用于一些商业级或工业级对成本敏感的嵌入式系统,例如消费电子领域中的一些应用。



推荐阅读

史海拾趣

Agilent Technologies公司的发展小趣事
  1. 公司成立与拆分:Agilent Technologies是一家跨国科技公司,成立于1999年。它是惠普公司(Hewlett-Packard,HP)的分拆部门,旨在将惠普的测试与测量、半导体业务分离出来,形成独立的实体。这一举措旨在使惠普更专注于其核心业务,同时为Agilent提供更大的发展空间。

  2. 产品创新与多元化:Agilent Technologies以其广泛的产品组合而闻名,涵盖了测试与测量、生命科学、化学分析和电子产品等多个领域。该公司不断推出创新的产品和解决方案,满足客户在科研、制造和市场应用中的需求。例如,Agilent的测试与测量仪器被广泛应用于电子、通信、航空航天等行业,为客户提供精准的测试和分析。

  3. 全球化布局与市场拓展:作为一家全球性企业,Agilent Technologies在全球范围内设有研发、生产和销售网络。公司在美国、欧洲、亚洲等地都设有重要的研发中心和生产基地,以满足不同地区客户的需求。此外,Agilent通过收购和合作等方式扩大了其产品线和市场份额,进一步加强了其在全球电子行业的地位。

  4. 科研与创新投入:Agilent Technologies将大量资源投入到科研与创新领域,不断推动技术的发展和应用。公司与学术界、行业组织以及其他企业建立了紧密的合作关系,共同开展前沿技术研究和开发。Agilent的研究团队不断探索新的领域和解决方案,推动了科学技术的进步,为客户提供了更加先进和可靠的产品和服务。

  5. 社会责任与可持续发展:作为一家全球企业,Agilent Technologies注重社会责任和可持续发展。公司积极参与慈善事业和社区服务,支持教育、环保、健康等多个领域的项目和活动。此外,Agilent致力于推动绿色技术和环保生产,采取了一系列措施减少对环境的影响,提高资源利用效率,助力实现可持续发展目标。

Elpakco Inc公司的发展小趣事

面对全球化的市场竞争,Elpakco Inc公司积极实施全球化战略。公司先后在欧美、亚洲等地设立了分支机构,与当地企业开展合作,共同开拓市场。同时,公司还积极参加国际电子展会,展示公司的最新技术和产品,提升了公司的国际知名度和影响力。

ADL [ADL Embedded Solutions Inc]公司的发展小趣事

Elpakco Inc公司深知,企业的成功离不开社会的支持和帮助。因此,公司始终将履行社会责任作为企业的重要使命。公司积极参与环保、公益等活动,努力减少生产过程中的环境污染和资源浪费。同时,公司还注重员工的成长和发展,为员工提供良好的工作环境和福利待遇,让员工在为企业创造价值的同时,也能实现个人的成长和发展。

AURORA公司的发展小趣事

AURORA公司一直致力于提升自动驾驶技术的安全性和可靠性。通过不断研发和创新,AURORA在自动驾驶算法、传感器融合、数据处理等方面取得了显著进展。公司的技术团队不断攻克技术难题,推动自动驾驶技术向更高等级迈进。同时,AURORA还积极与高校和研究机构合作,共同推动自动驾驶技术的研发和应用。

Crydom公司的发展小趣事

在自动驾驶技术快速发展的同时,AURORA公司也积极寻找商业化突破口。公司创始人认为,自动驾驶卡车商业化是一个具有巨大潜力的市场。因此,AURORA优先瞄准了自动驾驶卡车商业化领域,与FedEx、Paccar、Schneider、Werner和Xpress等多家平台公司建立了试点合作关系。通过在实际场景中测试和验证自动驾驶技术,AURORA不断积累经验和数据,为未来的商业化落地奠定了坚实基础。

这五个故事展示了AURORA公司在电子行业中的发展历程和取得的成就。从初创时期的挑战与机遇到技术实力的不断提升,再到与汽车制造商的深度合作、垂直产业链的整合与布局以及自动驾驶卡车商业化的探索,AURORA公司凭借其卓越的技术实力和前瞻性的战略眼光,在电子行业中逐渐崭露头角。未来,我们有理由相信AURORA将继续在自动驾驶领域取得更多突破和创新。

ALSC [Alliance Semiconductor Corporation]公司的发展小趣事

为了保持竞争优势,ALSC始终将技术创新作为核心驱动力。公司投入大量资源用于研发,不断推出具有创新性的半导体产品。其中,一款具有高性能和低延迟的芯片产品赢得了市场的广泛认可,为公司的快速发展奠定了坚实的基础。

问答坊 | AI 解惑

你所学的专业和现在的工作一致性高吗

还是延续我之前的帖子,那个学EE的朋友最终做了完全不沾边的工作。而我当年的专业是古典文献,说通俗些,就是标点、注释古书的,还是那种竖版的从没有标点过的。现在做的工作却是电子类网站,实在是相差太远,以致于同门聚会时,大家对我的工作总是 ...…

查看全部问答>

SMDK2450 上调试u-boot问题

我使用 SMDK2450 板子配套的u-boot编译出来的u-boot.bin,无论是用 sjf 工具烧写到 nandflash 还是通过 irom 方式启动,串口都只输出一个\"OK\",用点灯大法测试,一直到使能 MMU 的代码之前,灯都是可以点亮的。 问题一:使能 MMU 之后如何继续点 ...…

查看全部问答>

谁介绍下嵌入式,eda相关的活跃的论坛

嵌入式linux arm fpga 等相关的,谢谢,100分…

查看全部问答>

关于EVC 4代码生成设置多线程问题

我用evc4.0 编译工程提示如下错误: C:Program FilesMicrosoft Visual Studio 8VCceatlmfcincludeafxver_.h(77) : fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds 后来在网上找到解决方案: 这里我们通过打开Projec ...…

查看全部问答>

multisim里有没有可变直流信号源啊?从哪找啊?

multisim里有没有可变直流信号源啊?从哪找啊?…

查看全部问答>

[急!!!]关于程序从PC到WINCE的移植

在模拟器上通过的程序,怎样将它移植到实体机上去运行?我将它生成的exe以及它的obj文件全部拷过去了,在实体机运行下提示的错误"是找不到该程序某一个组件,请确认路径和文件名正确和所需要的库全部可用".应该要怎样移植才行?????…

查看全部问答>

请求一个视频叠加电路

目前我只知道M6237,可以进行字符与视频叠加,可找不到比较完整的M6237电路原理图,请行业工程师帮忙提供一下,谢谢啦! 邮件:hanbing086@163.com…

查看全部问答>

转帖:一个小公司老板的日常管理

一个小公司老板的日常管理1. 小公司如何留住骨干:2.关于授权3.有的钱不能省5.关于招聘6.老板尽量唱红脸7.公司里的亲戚8.当老板和开车9.按时发工资10.学会说“不”11.不要在公司内部奢望交朋友12.避免当场做决定13.政策的制定14.矬子里拔将军15.有 ...…

查看全部问答>

Cotex-M3有浮点出来单元嘛?浮点运算能力如何?

                                 谢谢?Cotex-M3好像运算能力挺强的吧,不知道浮点运算能力如何?…

查看全部问答>

回车/换行组合符(VB.NET)

成员常量等效说明CrLfvbCrLfChr(13) + Chr(10)回车/换行组合符。CrvbCrChr(13)回车符。LfvbLfChr(10)换行符。NewLinevbNewLineChr(13) + Chr(10)新行符。NullCharvbNullCharChr(0)值为 0 的字符。navbNullString值为 0 的字符串与零长度字符串 (\"\ ...…

查看全部问答>