0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

從裸奔到操作系統(tǒng)將面對(duì)什么挑戰(zhàn)

GReq_mcu168 ? 來源:cg ? 2018-12-11 15:45 ? 次閱讀

嵌入式設(shè)備網(wǎng)絡(luò)化、u盤化、功能復(fù)雜化的趨勢(shì),使越來越多的、過去可以用裸奔實(shí)現(xiàn)的嵌入式產(chǎn)品,產(chǎn)生了應(yīng)用操作系統(tǒng)的需求。

而人力成本的持續(xù)上升、芯片成本的連續(xù)下降,以及cpu性能的迅速提高,又為大面積應(yīng)用操作系統(tǒng)提供了物質(zhì)基礎(chǔ)。

1、速度

我們首先面對(duì)的,將是cpu運(yùn)行速度的問題,毋庸置疑,操作系統(tǒng)調(diào)度需要cpu開銷,需要cpu有更高的速度來彌補(bǔ);再者,嵌入式系統(tǒng)經(jīng)常用于實(shí)時(shí)控制,需要較高的定時(shí)精度,縮短tick時(shí)間間隔有利于提高控制精度,嵌入式系統(tǒng)中經(jīng)常使用1mS甚至更短的tick間隔。然而,tick間隔越短,調(diào)度開銷就越高,同樣需要更高的cpu速度來彌補(bǔ)。當(dāng)前日益提高的嵌入式cpu的性能,甚至單片機(jī)都32位了,很好地回答了這個(gè)問題。

2、內(nèi)存容量

先討論一個(gè)問題,一個(gè)原先需要50K內(nèi)存的裸奔程序,如果移植到自身開銷1K內(nèi)存的RTOS下面,需要增加多少內(nèi)存?是51K嗎?

有許多嵌入式操作系統(tǒng),都把運(yùn)行操作系統(tǒng)的內(nèi)存開銷作為主要性能指標(biāo),有些甚至聲稱不到1K內(nèi)存就可以運(yùn)行。但我們千萬不要被誤導(dǎo),以為用操作系統(tǒng)需要的內(nèi)存與裸機(jī)差不多,只要比裸奔程序多那么1K、2K就行了。操作系統(tǒng)會(huì)使應(yīng)用程序所需要的內(nèi)存暴增,使用操作系統(tǒng)所增加的內(nèi)存需求,主要來自以下方面:

1) 運(yùn)行操作系統(tǒng)本身需要的內(nèi)存。2) 創(chuàng)建線程控制塊、消息控制塊等操作系統(tǒng)組件需要的內(nèi)存。3) 每個(gè)線程配置獨(dú)立的棧所增加的內(nèi)存需求。

其中第一項(xiàng)很好理解,幾乎所有操作系統(tǒng)都會(huì)給出這個(gè)指標(biāo)。第二項(xiàng)也容易理解,不用操作系統(tǒng)的情況下,我們常常定義標(biāo)志位或全局變量來在不同模塊之間傳遞信息,需要的內(nèi)存就很少。而操作系統(tǒng)模式下,需要用到同步、互斥、線程間交換數(shù)據(jù)等,這就需要使用信號(hào)量、郵箱等操作系統(tǒng)組件,信號(hào)量需要分配信號(hào)量控制塊,郵箱需要分配郵箱控制塊……,這些,都需要消耗可觀的內(nèi)存。許多操作系統(tǒng)標(biāo)明的,僅僅是OS本身運(yùn)行需要的內(nèi)存,并不包括信號(hào)量控制塊拉、郵箱控制塊拉等等這些操作系統(tǒng)組件需要的內(nèi)存。我們知道,一個(gè)僅運(yùn)行OS的系統(tǒng),是毫無意義的,真正實(shí)現(xiàn)產(chǎn)品功能的,是應(yīng)用程序。而djyos的si版本,大約需要的10K內(nèi)存,則包含了一定數(shù)量的事件控制塊、信號(hào)量控制塊等操作系統(tǒng)組件所需內(nèi)存的條件下的,完全滿足一個(gè)小型系統(tǒng)所需。

說了半天,其實(shí)也只講了操作系統(tǒng)對(duì)內(nèi)存需求的冰山一角,OS下編程,對(duì)內(nèi)存需求的影響最大的,當(dāng)屬OS的多線程并發(fā)特性,這使得我們要為每一個(gè)線程分配獨(dú)立的棧。下面我們定性分析一下棧獨(dú)立化帶來的內(nèi)存需求變化。棧是用來保存函數(shù)參數(shù)和局部變量的,可以說,有函數(shù)調(diào)用,就有局部變量。在單線程環(huán)境下,應(yīng)用程序需要的棧,幾乎就是main函數(shù)需要的棧,而在多線程環(huán)境下,每個(gè)線程的棧是獨(dú)立的,分別等于該線程的線程執(zhí)行函數(shù)所需要的棧,而系統(tǒng)總的棧需求,就是所有線程的棧需求之和。

假設(shè)有一不使用OS的應(yīng)用程序,main函數(shù)如下:

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

在超級(jí)循環(huán)中,分別調(diào)用了func1~func5這5個(gè)函數(shù),他們的棧需求分別是10K、5K、9K、8K、9K。調(diào)用func1時(shí),系統(tǒng)分配10K的ram作為棧,func1函數(shù)返回,這10K空間將被釋放,并且再次分配給func2使用,所以,整個(gè)程序的棧需求,就是這5個(gè)函數(shù)中需要棧最多的那個(gè)函數(shù)需要的??臻g:10K。

如果要把這個(gè)程序移植到OS下,最簡(jiǎn)單的方法就是創(chuàng)建5個(gè)線程來調(diào)用func1~5這5個(gè)函數(shù),這5個(gè)線程需要的棧分別是10K、5K、9K、8K、9K,而這5個(gè)棧是獨(dú)立的,不能共用,程序總共需要的??臻g是(10+5+9+8+9)=41K,線程棧一般是從堆中動(dòng)態(tài)分配的,考慮到動(dòng)態(tài)分配本身的開銷,硬件須準(zhǔn)備50K以上的內(nèi)存用于程序的運(yùn)行棧。一下子增長(zhǎng)到5倍,沒想到吧。

可見,上操作系統(tǒng),雖然操作系統(tǒng)本身不需要很大內(nèi)存,但會(huì)極度增加應(yīng)用程序的內(nèi)存需求。做項(xiàng)目時(shí),一是不要盲目上OS,要根據(jù)需求綜合考慮,二是設(shè)計(jì)硬件系統(tǒng)時(shí),應(yīng)該充分考慮到內(nèi)存方面的需求,配置充足的內(nèi)存。

3、人

任何產(chǎn)品都是由人開發(fā)的,所以,討論嵌入式產(chǎn)品開發(fā)的任何話題,都不能離開人的因素,科技以人為本嘛!從裸奔到操作系統(tǒng),那么程序員,也將由編寫裸奔程序轉(zhuǎn)為在操作系統(tǒng)下編程。這些迅速、大量增加的程序員,他們可能習(xí)慣了在裸奔環(huán)境下編程,他們可能是化工、建筑、地質(zhì)等不同行業(yè)的專家,他們也許已經(jīng)上了年紀(jì),沒有太多的精力學(xué)習(xí)多線程編程等知識(shí)。然而,涉及到專業(yè)的程序,仍然離不開他們,如何從技術(shù)上降低他們的入門門檻,是一個(gè)亟需考慮的問題。但是,普通的操作系統(tǒng)下,你不掌握線程控制技術(shù),就無法編寫正確的程序。djyos允許你按事件編程,沒有任何跟線程相關(guān)的api函數(shù),無需程序員掌握線程技術(shù),客觀上降低了裸奔到OS編程的轉(zhuǎn)換技術(shù)門檻。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5059

    文章

    18974

    瀏覽量

    302069
  • RTOS
    +關(guān)注

    關(guān)注

    21

    文章

    809

    瀏覽量

    119362

原文標(biāo)題:裸奔和RTOS下的嵌入式開發(fā),有啥不同?

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    實(shí)時(shí)操作系統(tǒng)和分時(shí)操作系統(tǒng)的區(qū)別

    操作系統(tǒng)能否滿足實(shí)時(shí)性要求來區(qū)分,可把操作系統(tǒng)分成分時(shí)操作系統(tǒng)和實(shí)時(shí)操作系統(tǒng),分時(shí)操作系統(tǒng)按照相等的時(shí)間片調(diào)度進(jìn)程輪流運(yùn)行,分時(shí)
    發(fā)表于 11-14 17:39 ?1.3w次閱讀

    14種嵌入式操作系統(tǒng)的特點(diǎn)

    大家好,我是小舒,單片機(jī)編程時(shí),都知道有兩種基本操作裸奔操作系統(tǒng),所謂裸奔就是一個(gè)大循環(huán)往復(fù)執(zhí)行。今天,講的是幾個(gè)常用的操作系統(tǒng)。
    發(fā)表于 09-02 09:12 ?2852次閱讀

    關(guān)于實(shí)時(shí)嵌入式操作系統(tǒng)的一些概念討論(一)

    , 內(nèi)核也盡量的小了, 那么這樣一個(gè)操作系統(tǒng)移植ARM9平臺(tái)上就沒什么意義了. 因?yàn)锳RM9的核心板跑LINUX也是沒問題的了;7\ RAW-os與RTT既然走的都是資源受限及微內(nèi)核道路應(yīng)該盡量走
    發(fā)表于 02-07 00:05

    ARM CPU操作系統(tǒng)

    嵌入式操作系統(tǒng)是 ARM CPU的軟件基礎(chǔ) 8 位/16位單片機(jī)發(fā)展以ARM CPU核為代表的32位嵌入式處理器,嵌入式操作系統(tǒng)替代傳
    發(fā)表于 07-04 07:03

    實(shí)時(shí)操作系統(tǒng)移植Linux系統(tǒng)應(yīng)用

    從一個(gè)操作系統(tǒng)另一個(gè)操作系統(tǒng)應(yīng)用程序的移植即使在最好的情況下也經(jīng)常是一個(gè)艱巨的任務(wù)。把一個(gè)實(shí)時(shí)的嵌入式應(yīng)用程序移植一個(gè)新的操作系統(tǒng)上可以
    發(fā)表于 07-15 07:25

    如何Linux操作系統(tǒng)移植目標(biāo)平臺(tái)上?

    如何Linux操作系統(tǒng)移植目標(biāo)平臺(tái)上?Linux交叉編譯環(huán)境的建立及內(nèi)核配置和編譯Linux移植中實(shí)際指令集小于標(biāo)準(zhǔn)MIPS指令集的問題如何Linux
    發(fā)表于 04-22 07:04

    FreeRTOS單片機(jī)操作系統(tǒng)

    轉(zhuǎn)載【連載】單片機(jī)操作系統(tǒng)③——走進(jìn)FreeRTOS【1】 單片機(jī)操作系統(tǒng)①我們熟悉的單
    發(fā)表于 08-23 07:03

    請(qǐng)問Linux操作系統(tǒng)怎么初始操作系統(tǒng)升級(jí)到Android?

    請(qǐng)問,Linux操作系統(tǒng)怎么初始操作系統(tǒng)升級(jí)到Android
    發(fā)表于 12-31 06:20

    RT-Thread操作系統(tǒng)開機(jī)關(guān)機(jī)的操作過程是怎樣的?

    RT-Thread操作系統(tǒng)開機(jī)關(guān)機(jī)的操作過程是怎樣的?
    發(fā)表于 02-15 07:43

    裸奔操作系統(tǒng),我們面對(duì)什么挑戰(zhàn)

    在超級(jí)循環(huán)中,分別調(diào)用了func1~func5這5個(gè)函數(shù),他們的棧需求分別是10K、5K、9K、8K、9K。調(diào)用func1時(shí),系統(tǒng)分配10K的ram作為棧,func1函數(shù)返回,這10K空間將被釋放
    的頭像 發(fā)表于 07-16 14:13 ?4602次閱讀

    預(yù)計(jì)2023年 Linux操作系統(tǒng)的全球市場(chǎng)超過70億美元

    根據(jù)《市場(chǎng)研究未來》(MRFR)最新的研究報(bào)告,在2018-2023年的預(yù)測(cè)期內(nèi),Linux操作系統(tǒng)的全球市場(chǎng)預(yù)計(jì)達(dá)到CAGR的18.5%。 Linux操作系統(tǒng)的全球市場(chǎng)主要基于對(duì)安全操作系
    發(fā)表于 11-25 15:12 ?856次閱讀

    物聯(lián)網(wǎng)操作系統(tǒng)擁抱萬億藍(lán)海

    無論承載多少民族期望,與時(shí)下一些新興科技領(lǐng)域相比,芯片、操作系統(tǒng)始終無法成為產(chǎn)出周期快的領(lǐng)域?;蛟S是01,或許是1N,眼前的
    的頭像 發(fā)表于 12-24 15:39 ?1738次閱讀

    物聯(lián)網(wǎng)操作系統(tǒng)擁抱萬億規(guī)模市場(chǎng)

    無論承載多少民族期望,與時(shí)下一些新興科技領(lǐng)域相比,芯片、操作系統(tǒng)始終無法成為產(chǎn)出周期快的領(lǐng)域?;蛟S是01,或許是1N,眼前的
    發(fā)表于 01-01 09:30 ?1046次閱讀

    安卓操作系統(tǒng)移植嵌入式平臺(tái)的最佳實(shí)踐

      Android是流行的智能手機(jī)操作系統(tǒng),它正在接管平板電腦,汽車,智能電視,可穿戴設(shè)備,家用電器,游戲機(jī)市場(chǎng)等。它為嵌入式平臺(tái)提供了獨(dú)特而熟悉的體驗(yàn),最小的智能手表屏幕可折疊和鍍鉻書上的較大
    的頭像 發(fā)表于 10-26 10:48 ?1193次閱讀

    Android操作系統(tǒng)移植嵌入式平臺(tái)的最佳實(shí)踐

      Android是流行的智能手機(jī)操作系統(tǒng),正在接管平板電腦,汽車,智能電視,可穿戴設(shè)備,家用電器,游戲機(jī)市場(chǎng)等。它為嵌入式平臺(tái)提供了獨(dú)特而熟悉的體驗(yàn),最小的智能手表屏幕可折疊
    的頭像 發(fā)表于 12-06 14:44 ?913次閱讀