单片机能运行操作系统吗?
先直接上答案:可以!
但是操作系统不是刚需,上操作系统比较占用单片机的资源,比如占用比较多的FLASH和RAM,间接增加了硬件成本,哪怕成本增加1毛钱,对于上量的产品,分分钟是一个工程师的工资。
我做了单片机开发10几年,大多数产品其实还是裸机编程,用到操作系统的比较少。
当然,这个跟产品功能有关,一般产品功能复杂、实时性要求苛刻的就会上操作系统。
目前用的比较多的就是实时操作系统,比如主流有uC/OS-II、FreeRTOS、rt-thread。
下面,简单给大家说下3个系统各自优缺点,如有不对,请指正!
一、uC/OS-II
uC/OS-II 是 Micrium 公司开发的商业实时操作系统,它的内核设计非常稳定和可靠,更加注重调度算法和系统服务的丰富性,适合于需要更高实时性和稳定性的应用。
uC/OS-II 的优缺点如下:
特点:
对开发友好:资料多。
实时性:uC/OS-II 可以提供非常快速的中断响应和任务切换,确保系统实时性。
可移植性:uC/OS-II 可以支持多种不同的处理器架构,使得应用程序更易于移植到不同的硬件平台上。
可靠性:由于 uC/OS-II 的内核设计非常稳定和可靠,因此它被广泛应用于各种不同的嵌入式系统中。
成熟的生态环境:由于 uC/OS-II 已经发布了很长时间,因此它的社区和生态环境非常成熟和完善,用户可以方便地获取文档、示例和支持。
缺点:
商业授权费用:uC/OS-II 是一个商业实时操作系统,用户需要购买商业授权才能使用。
资源占用:uC/OS-II占用单片机资源较多,需要较大的存储空间和内存空间。
另外,开发者是可以剪裁的,也就是说你可以根据你产品的功能修改系统代码做定制,前提是你已经吃透了系统的代码,否则不要轻易尝试,不然很容易给自己挖坑。
二、 FreeRTOS
FreeRTOS 是一个开源的实时操作系统,目前占有率高。
特点:
商业授权费用:可以免费商用
轻量级:FreeRTOS 的内核非常小巧,适合资源受限的单片机。
实时性:FreeRTOS 可以提供非常快速的中断响应和任务切换,确保系统实时性。
可移植性:FreeRTOS 可以支持多种不同的处理器架构,使得应用程序更易于移植到不同的硬件平台上。
社区支持:FreeRTOS 的社区非常活跃,有大量的开发人员参与开发和维护,使得 FreeRTOS 的生态环境非常完善。
良好的文档和资料:FreeRTOS 的文档和资料非常丰富,学习和使用 FreeRTOS 相对较为简单。
缺点:
组件少:部分功能组件不够完善,比如GUI(图形界面)、TCP/IP、文件系统需外扩第三方。
三、rt-thread
这个是国内一款适合物联网产品的实时操作系统,特点是资源占用极低(1.2KB RAM和3KB Flash),代码架构做低功耗功能比较方便。
优点:
轻量级:RT-Thread 的内核非常小巧,适合资源受限的单片机。
实时性:RT-Thread 可以提供非常快速的中断响应和任务切换,确保系统实时性。
可裁剪性:RT-Thread 可以按需选择需要的组件,以减小系统占用的资源。
面向对象:RT-Thread 支持对象化编程,使得代码更加清晰易懂。
跨平台支持:RT-Thread 可以支持多种不同的处理器架构。
缺点:
生态相对不够完善:相比一些成熟的嵌入式操作系统,RT-Thread 的社区和开发人员数量相对较少,生态环境相对不够完善。
学习曲线较陡峭:RT-Thread 是一个相对较新的操作系统,它的文档和资料相对较少,学习曲线相对较陡峭。
不适合大型系统:由于 RT-Thread 的内核设计初衷是轻量级和实时性,所以它不适合构建大型的嵌入式系统。
四、自己对RTOS的理解
最后聊一下,我对这些实时操作系统的理解。
我觉得实时操作系统,本质上就是一个实时性高的程序架构。
实时就是能保证我的任务规定的时间内去执行,这用传统while(1)轮询方式是实现不了的。
程序架构就好比建房子时的地基,只有地基稳了,才能应对外在恶劣环境对房子造成的影响,比如台风、地震。
我们写程序也是一样的,程序架构就是的”地基”,只有地基稳了,你的程序才能应对项目经理突如其来的改功能、换芯片方案,你的代码才经得起折腾、产品功能做得稳定。
可惜啊,很多工程师并没有写程序架构的能力,因为对经验和代码水平要求比较严格。
所以一般复杂的项目,直接上现成的、稳定的实时操作系统就可以了。
这样至少可以保证两点:
1.程序架构上不出问题。
2.程序的实时性不出问题。
不过用现成的也是有缺点的,就是RTOS的功能很多,有很多你产品压根用不上,但是你没办法,你又不会剪裁,这样就会浪费你很多单片机资源。
所以这几年我做项目,一直是用自己写的程序架构,然后程序实时性通过人工去规避。
比如任务初始化、创建、调度管理。
还有实时操作系统一些实用功能,比如队列,也是产品常用的,只是我自己写了更简化的代码。
这套架构的教程我暂时无偿提供给大家学习,很早之前录制的,后面可能会删掉。
这套程序架构最大的好处就是简易占用单片机资源少、移植性强,适用于各种单片机,包括有些51单片机。
不过本质是时间片轮询,不带任务优先级抢占,对实时性要求非常苛刻的项目就不合适了,有兴趣的可以自己修改代码实现。
教程获取方法可以看我下面这篇文章的开头。
《单片机入门到高级开挂学习路径(附教程+工具)》
《单片机入门到高级开挂学习路径(附教程+工具)》
《单片机入门到高级开挂学习路径(附教程+工具)》
单片机能运行操作系统吗?相关推荐
- 单片机嵌入式实时操作系统RTOS---eOS学习入门级RTOS(原创)
笔者刚入门学习STM32的时候就接触了uCOSII,它的多任务让我眼前一亮:原来程序还可以这么写!它让很多冲突的代码都能各自运行,在一个单片机上实现了多个单片机共同运行的效果.但是当开始真正去学习它时 ...
- 单片机程序运行在哪里
想必,很多人会对这个问题有困惑? 单片机运行的时候,是运行在哪里? FLASH(ROM)?还是RAM. 这就需要我们了解上一篇的内容,单片机的运行视图和加载视图@jonah_king. 我们程序的运行 ...
- 华大单片机移植RTThread操作系统
华大单片机移植RTThread-国产操作系统 文章目录 华大单片机移植RTThread-国产操作系统 1.华大单片机型号选择 2.RTThread源码下载 2.1 .资料说明 2.3.源码下载 3.移 ...
- 单片机超轻量级操作系统
在写完面向对象的单片机编程,就特别想在单片机编程引入一个多线程多任务的编程,把这个思想引入单片机.后发现如下好文,后面再把它封装成类的话,就更方便使用了,我觉得这将会使很多只有操作系统能做的工作,普通 ...
- 单片机上运行linux程序代码,在Linux下烧录51单片机
原标题:在Linux下烧录51单片机 *本文作者:LEdge1,本文属 FreeBuf原创奖励计划,未经许可禁止转载. 背景 我一直在学习Linux 系统,但是最近还要学习51单片机,所以在Linux ...
- [MATLAB学习]:Matlab生成滑动平均滤波算法文件并移植到STM32单片机上运行——基于CubeMX
前言 人生如逆旅,我亦是行人. 今天分享一个在 MATLAB 上生成C算法文件,并将其移植到 keil5上,运行至 STM32 单片机,一个很有用的方法. 准备工作: 已安装 MATLAB 的软件(注 ...
- 陈老师深度为你解析,单片机的运行原理
深度解析,单片机运行原理,你知道吗? 单片机是将中央处理单元(CPU).储存器.输写输出集成在一片芯片上,能够说单片机就是一台微型计算机,只是和我们平常运用的计算机相比它的功能有所不同,也没有我们用的 ...
- 手机关机后,闹钟为什么依然在运行?操作系统是如何获取当前时间?
计算机时间分为硬件时间和系统时间. 硬件时间由计算机主板上的RTC(时钟电路)进行维护,其本身自带电池供电,并不依靠计算机电源供电.计算机启动时BIOS系统获取硬件时间,将它交付于操作系统,操作系统由 ...
- avr 运行 linux,如何在8位AVR单片机上运行Linux?
外国文章翻译,代码国内无法下载,但是文章可供一看 我们经常可以看到初学者在单片机论坛中询问他们是否可以在他们微不足道的小的8位微机中运行Linux.这些问题的结果通常是带来笑声.我们也经常看到,在Li ...
最新文章
- 看看 Grunt 的源码(一):grunt-cli 源码解析
- 惠普打印信息页无法连接到服务器,惠普M400系列打印机网络连接无法打印怎么办?...
- SQL Server Indexes
- Moose File System分布文件系统测试
- 前端如何正确使用中间件?
- 关于 命令行参数 main(int argc,char** argv)
- 基于MTD的NAND驱动开发(二)
- print($arr,true)的参数true表示将$arr的值返会,而不是打印
- python turtle详细教程_python 中的turtle使用教程
- 嵌入式电路设计(符号库和封装库)
- jquery 插件zClip实现复制到剪贴板功能
- LabVIEW编程LabVIEW开发雷赛SMC6480运动控制模块例程与相关资料
- 推荐三个图片无损放大的软件给你
- 【LG-P1251】餐巾计划问题
- 【Windows无法访问指定设备,路径或文件,您可能没有合适的权限访问】
- 7-2 输出数组元素分数 20
- CSU - 1655 文本计算器
- 上百本中文书籍中对《人月神话》的引用(1)
- oj2451: 股市风云
- 一道和稀饭绝配的自制腌菜