0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

从裸奔到操作系统将面对什么挑战

GReq_mcu168 来源:cg 2018-12-11 15:45 次阅读

嵌入式设备网络化、u盘化、功能复杂化的趋势,使越来越多的、过去可以用裸奔实现的嵌入式产品,产生了应用操作系统的需求。

而人力成本的持续上升、芯片成本的连续下降,以及cpu性能的迅速提高,又为大面积应用操作系统提供了物质基础。

1、速度

我们首先面对的,将是cpu运行速度的问题,毋庸置疑,操作系统调度需要cpu开销,需要cpu有更高的速度来弥补;再者,嵌入式系统经常用于实时控制,需要较高的定时精度,缩短tick时间间隔有利于提高控制精度,嵌入式系统中经常使用1mS甚至更短的tick间隔。然而,tick间隔越短,调度开销就越高,同样需要更高的cpu速度来弥补。当前日益提高的嵌入式cpu的性能,甚至单片机都32位了,很好地回答了这个问题。

2、内存容量

先讨论一个问题,一个原先需要50K内存的裸奔程序,如果移植到自身开销1K内存的RTOS下面,需要增加多少内存?是51K吗?

有许多嵌入式操作系统,都把运行操作系统的内存开销作为主要性能指标,有些甚至声称不到1K内存就可以运行。但我们千万不要被误导,以为用操作系统需要的内存与裸机差不多,只要比裸奔程序多那么1K、2K就行了。操作系统会使应用程序所需要的内存暴增,使用操作系统所增加的内存需求,主要来自以下方面:

1) 运行操作系统本身需要的内存。2) 创建线程控制块、消息控制块等操作系统组件需要的内存。3) 每个线程配置独立的栈所增加的内存需求。

其中第一项很好理解,几乎所有操作系统都会给出这个指标。第二项也容易理解,不用操作系统的情况下,我们常常定义标志位或全局变量来在不同模块之间传递信息,需要的内存就很少。而操作系统模式下,需要用到同步、互斥、线程间交换数据等,这就需要使用信号量、邮箱等操作系统组件,信号量需要分配信号量控制块,邮箱需要分配邮箱控制块……,这些,都需要消耗可观的内存。许多操作系统标明的,仅仅是OS本身运行需要的内存,并不包括信号量控制块拉、邮箱控制块拉等等这些操作系统组件需要的内存。我们知道,一个仅运行OS的系统,是毫无意义的,真正实现产品功能的,是应用程序。而djyos的si版本,大约需要的10K内存,则包含了一定数量的事件控制块、信号量控制块等操作系统组件所需内存的条件下的,完全满足一个小型系统所需。

说了半天,其实也只讲了操作系统对内存需求的冰山一角,OS下编程,对内存需求的影响最大的,当属OS的多线程并发特性,这使得我们要为每一个线程分配独立的栈。下面我们定性分析一下栈独立化带来的内存需求变化。栈是用来保存函数参数和局部变量的,可以说,有函数调用,就有局部变量。在单线程环境下,应用程序需要的栈,几乎就是main函数需要的栈,而在多线程环境下,每个线程的栈是独立的,分别等于该线程的线程执行函数所需要的栈,而系统总的栈需求,就是所有线程的栈需求之和。

假设有一不使用OS的应用程序,main函数如下:

void main(void){ while(1) { func1(); //本函数需要10K栈 func2(); //本函数需要5K栈 func3(); //本函数需要9K栈 func4(); //本函数需要8K栈 func5(); //本函数需要9K栈 }}

在超级循环中,分别调用了func1~func5这5个函数,他们的栈需求分别是10K、5K、9K、8K、9K。调用func1时,系统分配10K的ram作为栈,func1函数返回,这10K空间将被释放,并且再次分配给func2使用,所以,整个程序的栈需求,就是这5个函数中需要栈最多的那个函数需要的栈空间:10K。

如果要把这个程序移植到OS下,最简单的方法就是创建5个线程来调用func1~5这5个函数,这5个线程需要的栈分别是10K、5K、9K、8K、9K,而这5个栈是独立的,不能共用,程序总共需要的栈空间是(10+5+9+8+9)=41K,线程栈一般是从堆中动态分配的,考虑到动态分配本身的开销,硬件须准备50K以上的内存用于程序的运行栈。一下子增长到5倍,没想到吧。

可见,上操作系统,虽然操作系统本身不需要很大内存,但会极度增加应用程序的内存需求。做项目时,一是不要盲目上OS,要根据需求综合考虑,二是设计硬件系统时,应该充分考虑到内存方面的需求,配置充足的内存。

3、人

任何产品都是由人开发的,所以,讨论嵌入式产品开发的任何话题,都不能离开人的因素,科技以人为本嘛!从裸奔到操作系统,那么程序员,也将由编写裸奔程序转为在操作系统下编程。这些迅速、大量增加的程序员,他们可能习惯了在裸奔环境下编程,他们可能是化工、建筑、地质等不同行业的专家,他们也许已经上了年纪,没有太多的精力学习多线程编程等知识。然而,涉及到专业的程序,仍然离不开他们,如何从技术上降低他们的入门门槛,是一个亟需考虑的问题。但是,普通的操作系统下,你不掌握线程控制技术,就无法编写正确的程序。djyos允许你按事件编程,没有任何跟线程相关的api函数,无需程序员掌握线程技术,客观上降低了裸奔到OS编程的转换技术门槛。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4977

    文章

    18255

    浏览量

    287968
  • RTOS
    +关注

    关注

    20

    文章

    773

    浏览量

    118773

原文标题:裸奔和RTOS下的嵌入式开发,有啥不同?

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    14种嵌入式操作系统的特点

    大家好,我是小舒,单片机编程时,都知道有两种基本操作裸奔操作系统,所谓裸奔就是一个大循环往复执行。今天,讲的是几个常用的操作系统
    发表于 09-02 09:12 2608次阅读

    什么是操作系统

    什么是操作系统  操作系统是一个大型的软件系统,其功能复杂,体系庞大。从不同的角度看的结果也不同,正是“横看成岭侧成峰”,下面我们通过最典型的两个角度来分析一下。  1.程序员的角度
    发表于 09-13 10:10

    关于实时嵌入式操作系统的一些概念讨论(一)

    , 内核也尽量的小了, 那么这样一个操作系统移植ARM9平台上就没什么意义了. 因为ARM9的核心板跑LINUX也是没问题的了;7\ RAW-os与RTT既然走的都是资源受限及微内核道路应该尽量走
    发表于 02-07 00:05

    ARM CPU操作系统

    嵌入式操作系统是 ARM CPU的软件基础 8 位/16位单片机发展以ARM CPU核为代表的32位嵌入式处理器,嵌入式操作系统替代传
    发表于 07-04 07:03

    实时操作系统移植Linux系统应用

    从一个操作系统另一个操作系统应用程序的移植即使在最好的情况下也经常是一个艰巨的任务。把一个实时的嵌入式应用程序移植一个新的操作系统上可以
    发表于 07-15 07:25

    嵌入式操作系统怎么选择?

    嵌入式操作系统是ARM CPU的软件基础,8位/16位单片机发展以arm CPU核为代表的32位嵌入式处理器,嵌入式操作系统替代传统的
    发表于 04-07 07:13

    如何Linux操作系统移植目标平台上?

    如何Linux操作系统移植目标平台上?Linux交叉编译环境的建立及内核配置和编译Linux移植中实际指令集小于标准MIPS指令集的问题如何Linux
    发表于 04-22 07:04

    FreeRTOS单片机操作系统

    转载【连载】单片机操作系统③——走进FreeRTOS【1】 单片机操作系统①我们熟悉的单
    发表于 08-23 07:03

    请问Linux操作系统怎么初始操作系统升级到Android?

    请问,Linux操作系统怎么初始操作系统升级到Android
    发表于 12-31 06:20

    RT-Thread操作系统开机关机的操作过程是怎样的?

    RT-Thread操作系统开机关机的操作过程是怎样的?
    发表于 02-15 07:43

    01玩转OpenHarmony操作系统

    鸿蒙是什么?鸿蒙是华为开发的操作系统。鸿蒙是手机上除了iOS和安卓以外的选择。鸿蒙是面向物联网的操作系统。鸿蒙是面向全场景的分布式操作系统。鸿蒙是属于中国的操作系统。OpenHarmo
    发表于 07-06 16:46

    裸奔操作系统,我们将面对什么挑战

    在超级循环中,分别调用了func1~func5这5个函数,他们的栈需求分别是10K、5K、9K、8K、9K。调用func1时,系统分配10K的ram作为栈,func1函数返回,这10K空间将被释放
    的头像 发表于 07-16 14:13 4484次阅读

    数字化转型对操作系统带来的挑战及应对

     操作系统产业峰会2021上,麒麟软件负责人分析了数字化转型对操作系统带来的挑战及应对方法。
    的头像 发表于 11-09 11:23 1539次阅读
    数字化转型对<b class='flag-5'>操作系统</b>带来的<b class='flag-5'>挑战</b>及应对

    14种主流的RTOS 单片机操作系统~来学!

    点击上方名片关注我们单片机编程时,我们都知道有两种基本操作裸奔操作系统。所谓裸奔,就是一个大循环往复执行。今天要讲的是几个常用的操作系统
    的头像 发表于 09-22 10:02 7094次阅读
    14种主流的RTOS 单片机<b class='flag-5'>操作系统</b>~来学!

    单片机跑操作系统,到底有几种选择?

    单片机编程时,我们都知道有两种基本操作裸奔操作系统。所谓裸奔,就是一个大循环往复执行。今天要讲的是几个常用的操作系统。实时
    的头像 发表于 09-26 10:56 1640次阅读
    单片机跑<b class='flag-5'>操作系统</b>,到底有几种选择?