五大适合STM32的嵌入式操作系统

2023-05-16

基于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是针对没有MMU的处理器设计的,不能使用处理器的虚拟内存管理技术,只能采用实存储器管理策略。系统使用分页内存分配方式,在启动时对实际存储器进行分页。系统对内存的访问是直接的,操作系统对内存空间没有保护,多个进程可共享一个运行空间,所以,即使是一个无特权进程调用一个无效指针也会触发一个地址错误,并有可能引起程序崩溃甚至系统崩溃。


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


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


在对硬件的支持上,由于μClinux继承了Linux的大部分性能,所以至少需要512KB的RAM空间,lMB的ROM/Flash空间。


在μClinux的移植方面,。μClinux是Linux针对嵌入式系统的一种改良,其结构比较复杂。移植μClinux,目标处理器除了需要修改与处理器相关的代码外,还需要足够容量的外部ROM和RAM。


综上可知,μ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适合用于一些商业级或工业级对成本敏感的嵌入式系统,例如消费电子领域中的一些应用。


4、FreeRTOS

由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对于C/OS-II、 embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为6.0版。


作为一个轻量级的操作系统,FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。 FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行。 FreeRT0S内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用 时间。


FreeRTOS的内核可根据用户需要设置为可剥夺型内核或不可剥夺型内核。当 FreeRTOS被设置为可剥夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的CPU使用权,这样可保证系统满足实时性的要求;当 FreeRTOS被设置为不可剥夺型内核时,处于就绪态的高优先级任务只有等当前运行任务主动释放CPU的使用权后才能获得运行,这样可提高CPU的运行 效率。


FreeRTOS的移植:

FreeRTOS操作系统可以被方便地移植到不同处理器上工作,现已提供了ARM、MSP430、 AVR、PIC、C8051F等多款处理器的移植。FrceRTOS在不同处理器上的移植类似于μC/0S一II,故本文不再详述FreeRTOS的移 植。此外,TCP/IP协议栈μIP已被移植到FreeRTOS上,具体代码可见FreeRTOS网站


FreeRTOS的不足:

相对于常见的μC/OS—II操作系统,FreeRTOS操作系统既有优点也存在不足。其不足之处, 一方面体现在系统的服务功能上,如FreeRTOS只提供了消息队列和信号量的实现,无法以后进先出的顺序向消息队列发送消息;另一方 面,FreeRTOS只是一个操作系统内核,需外扩第三方的GUI(图形用户界面)、TCP/IP协议栈、FS(文件系统)等才能实现一个较复杂的系统, 不像μC/OS-II可以和μC/GUI、μC/FS、μC/TCP-IP等无缝结合。


5、都江堰操作系统(djyos)

都江堰操作系统,简称djyos,得名于一个伟大的水利工程:都江堰。


与传统操作系统不同,djyos不是以线程而是以事件为调度核心,这种调度算法使程序员摆脱模拟计算机执行过程编写程序的思维方式,而是按人类认知世界的方式编写应用程序,就如同在嵌入式编程中引入了VC似的。djyos的调度算法使程序员可以摆脱线程和进程的束缚,djyos没有有关线程的api,一个完全不懂线程知识的程序员也可以顺利地在djyos下编写应用程序。


djyos 操作系统是以事件为核心进行调度的,这种调度策略使程序员可以按人类认知事物的习惯而不是计算机的习惯来编程。


普通操作系统中,调度是以线程为核心的,事件被作为线程的数据,标榜为“事件触发”的软件模型,也是由线程在一旁候着,待特定事件发生时线程恢复运行并把它作为输入数据加以处理。


以事件为核心的调度,则像设备和内存一样,把线程虚拟机作为处理事件所需要的资源看待,当某事件需要处理时,分配或者创建一个线程虚拟机给该事件,并启动该线程虚拟机处理事件。


djysiV0.4.2发布,增加stm32版本的支持,能够移植到cortex-m3 上(芯片为 stm32f103 )。该系统适合于工业控制。系统源代码开放,但并不是永久免费。


由上所述,对于stm32f103来说,移植μC/OS-II、eCos、FreeRTOS、都江堰操作系统是合适的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

五大适合STM32的嵌入式操作系统 的相关文章

  • clang-format的使用

    clang format使用 1 clang format简介2 clang format的使用2 1 clang format中 clang format file2 2 示例 xff1a 配置google的代码风格2 3 vscode
  • NVIDIA TX2i刷机过程记录

    毕业设计做的视觉系统 xff0c 需要用到TX2i xff0c 以下为本人疫情期间在家摸索了十几天 xff0c 才刷机成功的全过程 关于tx2i的注意点 xff1a 首先推荐买个usb扩展器 xff0c 因为只有2个usb口 xff0c 我
  • Java基础(五):重写toString()方法

    目录 1 Object 类的 toString 2 重写toString 方法意义 3 总结 1 Object 类的 toString Java默认的toString方法来自Object类 在Java中每个类都直接或者间接继承Object类
  • Mysql基础(十九):锁

    目录 1 Mysql锁机制 1 1 乐观锁和悲观锁 1 1 1 乐观锁 1 1 2 悲观锁 1 2 共享锁与排他锁 1 2 1 共享锁 1 2 2 排他锁 1 3 行锁与表锁 1 3 1 行锁 1 3 2 表锁 1 4 间隙锁 1 4 1
  • 大数据时代的图表可视化利器——highcharts,D3和百度的echarts

    还记得阿里巴巴那个令人澎湃激情的双十一吗 xff1f 还记得淘宝生动形象地把你的的消费历程一一地展示给你看吗 xff1f 还记得那些酷炫拽的it报告图表吗 xff1f 在这个大数据越来越盛行的年代 xff0c 怎样去表达一些用户的关系 xf
  • 对三层和MVC的认识过程

    三层架构就是 MVC xff01 起初老师总说三层 MVC xff0c MVC 三层架构 所以开始的时候脑子就一个概念 xff1a 三层就是 MVC xff0c MVC 就是三层架构 而且想想也合理啊 xff0c 都是 三 MVC 是三个字
  • ROS雷达包出现:ERROR: cannot launch node of type: rplidar_ros

    ROS雷达包出现 xff1a ERROR cannot launch node of type rplidar ros 问题分析详情 问题分析 仅安装了基础ROS xff0c rplidar ros包没有安装 详情 下载包并解压缩 1 使用
  • nvidia-smi出现的比较慢

    一个比较老的问题 xff0c 一般四卡以上的机器可能会出现 以前我都是 nvidia span class hljs attribute smi span span class hljs attribute pm span span cla
  • 【tensorflow】tensorflow的安装及应用

    安装tensorflow的三种方法 1 在cmd命令行中输入pip install tensorflow xff0c 默认安装最新版 2 其他旧版本的安装 xff0c 去pypi org官网 可以点击release history选择想要的
  • 汇编:stmdb和ldmia指令

    参考了网上一些文章 xff0c 简单说一下stmdb和ldmia指令的作用 xff0c 如有错误欢迎指正 首先一句话说一下stmdb和ldmia指令 的作用 xff1a stmdb和ldmia指令一般配对使用 xff0c stmdb用于将寄
  • ARM 内联汇编 加速 算法

    首推移动端arm cpu优化学习笔记第4弹 内联汇编入门 xff0c 但是其只给出了代码 xff0c 很多人还不知道怎么在手机上跑起来 xff0c 其实只需要一个CMakeLists txt就可以了 cmake minimum requir
  • centos7.3环境编译安装pktgen-dpdk,dpdk工具

    概述编译环境编译DPDK编译Pktgen dpdkDebug 概述 DPDK xff08 Date Plane Development Kit xff09 主要基于Linux系统运行 xff0c 用于快速数据包处理的函数库与驱动集合 xff
  • 捷联惯导算法心得

    1 四个概念 xff1a 地理 坐标系 机体 坐标系 他们之间换算公式 换算公式用的系数 地理坐标系 xff1a 东 北 天 xff0c 以下简称 地理 在这个坐标系里有重力永远是 xff08 0 0 1g xff09 xff0c 地磁永远
  • Java中的域,静态域,实例域

    域 所谓的域 xff0c 是field的翻译 xff0c 也就是我们常说的字段 xff0c 或者属性 比如类的字段 xff08 属性 xff09 xff0c 局部的 xff0c 全局的 静态域 也就是静态属性 xff0c 我们可以单独为它设
  • 【线程篇】线程间同步之信号量、互斥锁

    线程 xff1a 进程内部的一条执行路径 xff08 序列 xff09 什么是线程什么是进程 xff0c 进程和线程的区别 xff1f 进程是一个正在运行的程序 xff0c 是系统进程资源分配的基本单位 线程是进程内部的一条执行路径 xff
  • PL/SQL报错:无法解析指定的连接标识符

    在安装oracle的时候PL SQL报错 xff1a ORA 12154 TNS 无法解析指定的连接标识符 xff0c 在网上找了很多资料 xff0c 然后问题解决 其中下面的文章分析的过程很值得学习 xff0c 特地转载过来时刻告诫自己全
  • 【idm】idm突破cookie封锁 (解决http:1.1 403 forbidden)(附charles使用教程)

    文章目录 一 问题二 解决方法 xff08 1 xff09 在chrome中获得cookies xff08 2 xff09 安装配置charles 三 另外的方法参考 idm的使用教程参考 xff1a 一 问题 使用idm下载文件出现如下问
  • 四旋翼飞行器数学建模+轨迹跟踪控制

    数学模型 xff08 状态空间方程 xff09 xff1a 控制算法 有限时间 xff08 finite time control xff09 控制 xff0c 文献 1 xff1b 比例 微分 xff08 PD xff09 控制 xff0
  • 卡尔曼滤波算法总结

    自己学习整理卡尔曼滤波算法 xff0c 从放弃到精通 kaerman 滤波算法 卡尔曼滤波是非常经典的预测追踪算法 xff0c 是结合线性系统动态方程的维纳滤波 xff0c 其实质是线性最小均方差估计器 xff0c 能够在系统存在噪声和干扰
  • 做嵌入式驱动的前途何在

    做嵌入式驱动的前途何在 做嵌入式linux驱动的前途何在 xff1f 或者说 xff0c 怎么才能做好这一行 xff1f 我做嵌入式驱动开发已经一年多了 xff0c 感觉没学到多少东西 从网络驱动到CAN驱动 从dataflash驱动到NA

随机推荐

  • 串口通信的调试01

    在开发中 xff0c 我们经常遇到这种情况 xff0c 供应商给了一台仪器 xff0c 然后仪器配套有软件 我们通过点击按钮往仪器发送命令 xff0c 仪器返回数据 有些时候 xff0c 我们希望可以通过自己编写的软件来操作仪器 xff0c
  • Linux驱动程序开发之三----按键驱动(Tiny6410)

    在Linux驱动程序开发之三 按键驱动 xff08 Tiny6410 xff09 博文中讨论了使用中断来实现按键驱动 xff0c 毫无疑问 xff0c 中断方式效率相当高 xff0c 但是在此之前 xff0c CPU要想获知按键的状态都是通
  • 飞控信号SBUS信号解析为PWM信号输出

    飞控信号SBUS信号解析为PWM信号输出 1 修改STM32时钟频率 xff1a static void SetSysClockTo72 void IO uint32 t StartUpCounter 61 0 HSEStatus 61 0
  • GTSAM 的使用

    GTSAM 的使用 GTSAM 是一个在机器人领域和计算机视觉领域用于平滑 xff08 smoothing xff09 和建图 xff08 mapping xff09 的C 43 43 库 它与 g 2 o 不同的是 xff0c g 2 o
  • ROS智能车实现darknet_ros检测物体

    文章目录 一 搭建智能车环境1 下载包以及编译1 1 下载源码包1 2 编译1 3 错误解决 xff08 1 xff09 controllers相关 xff08 2 xff09 driver base相关 xff08 3 xff09 ack
  • 使用Vant完成DatetimePicker 日期的选择器

    效果展示 xff1a 代码展示 xff1a lt template gt lt div id 61 34 date time picker 34 gt lt van button plain type 61 34 primary 34 64
  • 拜访谭浩强老先生

    本月 22日 邀请各大高校计算机专业的院长 教授 xff08 谭浩强 王移芝 陈明 杨小平 王立柱 郑莉 等等 xff09 前来我校参观指导 xff0c 尤其是对我们的 信息技术提高班 进行深入的了解 得知前几天中国计算机界泰斗级人物谭浩强
  • 使用Vant完成各种Toast提示框

    效果展示 xff1a xff08 1 xff09 使用前的需要安装Vant奥 参考博客 xff08 2 xff09 在main js里面引入Toast import Toast from 39 vant 39 Vue use Toast x
  • 使用Vant完成底部弹出框 ActionSheet 上拉菜单

    效果图 xff1a 代码展示 xff1a xff08 ActionSheet 上拉菜单 xff09 lt template gt lt ActionSheet 上拉菜单 gt lt div id 61 34 action sheet 34
  • vue项目总结,项目期间遇到的问题、难点等。【暂停更新】

    近期一直在做一个xxx中心的项目 xff0c 先来吐槽下内心的想法 xff0c 要开发的项目需求很不明确 xff0c 需求两周两周的更改 xff0c 感觉每天并没有特别多实际的产出 xff0c 总是感觉有点儿浪费时间 虽然这样 xff0c
  • http请求 状态码204

    今天在调试接口的时候遇到个问题 xff1a 一个请求走了两次 xff0c 一次204 xff0c 一次200 且 xff0c 请求204的 Request Method 是 OPTIONS 在网上查看资料后得知 xff0c 是因为跨域而引起
  • vue项目中,使用echarts完成 折线+多柱状图 (附完整代码)

    结果展示 xff1a 分析 xff1a xff08 1 xff09 在echarts里面的 series里面写三种柱状 43 一种折线图 xff08 2 xff09 该图谱也实现了自适应大小 xff0c 缩小放大浏览器界面 xff0c 柱状
  • vue 前端实现pdf下载.npm install html2canvas jspdf --save

    npm install html2canvas jspdf save 页面使用 lt div id 61 39 pdfDom 39 gt lt div gt lt el button 64 click 61 34 getPdf 39 pdf
  • vue 项目实现水印效果

    目录 xff08 1 xff09 新建 waterMark js文件 xff08 2 xff09 页面使用 xff08 1 xff09 新建引入 waterMark js文件 39 use strict 39 let watermark 6
  • 角度单位deg、grad、turn、rad

    xff08 1 xff09 deg属性 xff1a 度 xff1a deg xff08 全称 xff1a degress xff09 一个圆有360度 90deg 61 100grad 61 0 25turn 1 5707963267948
  • vscode 中的git的提交、合并、解决冲突

    xff08 1 xff09 如果本地文件有修改 xff0c 那么这里就会显示有几个文件被修改 xff0c 且修改的具体内容也是对比着显示 xff1a xff08 2 xff09 点击 相当于 git add 将文件放入暂存区 xff08 3
  • 解决【display:flex布局】遇上 【position: absolute / fixed 】的失效问题

    问题描述 xff1a 有个这样的页面 xff0c 页面是通过flex布局的 xff0c 现在想将头部 我的订单栏 固定 xff0c 那么我们第一反应就是添加定位呀 xff0c position fixed 但是问题来了 xff0c posi
  • 年度回忆录(2011.07----2011.12)

    日月穿梭 xff0c 时光荏苒 xff08 其实挺不想用这两个词开头的 xff0c 太土了 无奈词穷 xff0c 凑合着看吧 D xff09 上次总结的时候正是七月份 xff0c 半年过去了 xff0c 经历了很多 xff0c 学到了很多
  • 从零开始的树莓派生活(树莓派4B的组装与系统安装)

    一 组装 从X宝等平台购买的树莓派除了主板外一般带有散热片 电源 风扇 外壳等配件 xff0c 不同店家不同型号的套装稍有不同 xff0c 以我自己购买的树莓派4B为例 xff0c 组装步骤大致分为 xff1a 1 安装散热片 2 安装亚克
  • 五大适合STM32的嵌入式操作系统

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