欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

單片機(jī)裸機(jī)和RTOS多線程的區(qū)別

jf_BxU6dNQb ? 來源:混說Linux ? 2023-04-04 14:08 ? 次閱讀

很多初學(xué)者都是從裸機(jī)開始學(xué)起,不能明白裸機(jī)和操作系統(tǒng)的區(qū)別。甚至有不少人認(rèn)為用中斷就能代替多任務(wù)處理,你認(rèn)同嗎?

裸機(jī)系統(tǒng)

裸機(jī)系統(tǒng)通常分成輪詢系統(tǒng)和前后臺(tái)系統(tǒng)。

1. 輪詢系統(tǒng)

輪詢系統(tǒng)即是在裸機(jī)編程的時(shí)候,先初始化好相關(guān)的硬件,然后讓主程序在一個(gè)死循環(huán)里面不斷循環(huán),順序地做各種事情,大概的偽代碼具體如代碼清單所示:

intmain(void)
{
/*硬件相關(guān)初始化*/
HardWareInit();

/*無限循環(huán)*/
for(;;){
/*處理事情1*/
DoSomething1();

/*處理事情2*/
DoSomething2();

/*處理事情3*/
DoSomething3();
}
}

輪詢系統(tǒng)是一種非常簡單的軟件結(jié)構(gòu),通常只適用于那些只需要順序執(zhí)行代碼且不需要外部事件來驅(qū)動(dòng)的就能完成的事情。如果只是實(shí)現(xiàn) LED 翻轉(zhuǎn),串口輸出,液晶顯示等這些操作,那么使用輪詢系統(tǒng)將會(huì)非常完美。但是,如果加入了按鍵操作等需要檢測外部信號(hào)的事件,用來模擬緊急報(bào)警,那么整個(gè)系統(tǒng)的實(shí)時(shí)響應(yīng)能力就不會(huì)那么好了。

假設(shè)DoSomething3 是按鍵掃描,當(dāng)外部按鍵被按下,相當(dāng)于一個(gè)警報(bào),這個(gè)時(shí)候,需要立馬響 應(yīng) , 并 做 緊 急 處 理 , 而 這 個(gè) 時(shí) 候 程 序 剛 好 執(zhí) 行 到 DoSomething1 , 要 命 的 是DoSomething1 需要執(zhí)行的時(shí)間比較久,久到按鍵釋放之后都沒有執(zhí)行完畢,那么當(dāng)執(zhí)行到 DoSomething3 的時(shí)候就會(huì)丟失掉一次事件。足見,輪詢系統(tǒng)只適合順序執(zhí)行的功能代碼,當(dāng)有外部事件驅(qū)動(dòng)時(shí),實(shí)時(shí)性就會(huì)降低。

2. 前后臺(tái)系統(tǒng)

相比輪詢系統(tǒng),前后臺(tái)系統(tǒng)是在輪詢系統(tǒng)的基礎(chǔ)上加入了中斷。外部事件的響應(yīng)在中斷里面完成,事件的處理還是回到輪詢系統(tǒng)中完成,中斷在這里我們稱為前臺(tái), main 函數(shù)里面的無限循環(huán)我們稱為后臺(tái),大概的偽代碼見代碼清單所示:

intflag1=0;
intflag2=0;
intflag3=0;

intmain(void)
{
/*硬件相關(guān)初始化*/
HardWareInit();

/*無限循環(huán)*/
for(;;){
if(flag1){
/*處理事情1*/
DoSomething1();
}

if(flag2){
/*處理事情2*/
DoSomething2();
}

if(flag3){
/*處理事情3*/
DoSomething3();
}
}
}

voidISR1(void)
{
/*置位標(biāo)志位*/
flag1=1;
/*如果事件處理時(shí)間很短,則在中斷里面處理
如果事件處理時(shí)間比較長,在回到后臺(tái)處理*/
DoSomething1();
}

voidISR2(void)
{
/*置位標(biāo)志位*/
flag2=2;

/*如果事件處理時(shí)間很短,則在中斷里面處理
如果事件處理時(shí)間比較長,在回到后臺(tái)處理*/
DoSomething2();
}

voidISR3(void)
{
/*置位標(biāo)志位*/
flag3=1;
/*如果事件處理時(shí)間很短,則在中斷里面處理
如果事件處理時(shí)間比較長,在回到后臺(tái)處理*/
DoSomething3();
}

在順序執(zhí)行后臺(tái)程序的時(shí)候,如果有中斷來臨,那么中斷會(huì)打斷后臺(tái)程序的正常執(zhí)行流,轉(zhuǎn)而去執(zhí)行中斷服務(wù)程序,在中斷服務(wù)程序里面標(biāo)記事件,如果事件要處理的事情很簡短,則可在中斷服務(wù)程序里面處理,如果事件要處理的事情比較多,則返回到后臺(tái)程序里面處理。

雖然事件的響應(yīng)和處理是分開了,但是事件的處理還是在后臺(tái)里面順序執(zhí)行的,但相比輪詢系統(tǒng),前后臺(tái)系統(tǒng)確保了事件不會(huì)丟失,再加上中斷具有可嵌套的功能,這可以大大的提高程序的實(shí)時(shí)響應(yīng)能力。在大多數(shù)的中小型項(xiàng)目中,前后臺(tái)系統(tǒng)運(yùn)用的好,堪稱有操作系統(tǒng)的效果。

RTOS多線程

相比前后臺(tái)系統(tǒng),多線程系統(tǒng)的事件響應(yīng)也是在中斷中完成的,但是事件的處理是在線程中完成的。在多線程系統(tǒng)中,線程跟中斷一樣,也具有優(yōu)先級(jí),優(yōu)先級(jí)高的線程會(huì)被優(yōu)先執(zhí)行。

當(dāng)一個(gè)緊急的事件在中斷被標(biāo)記之后,如果事件對(duì)應(yīng)的線程的優(yōu)先級(jí)足夠高,就會(huì)立馬得到響應(yīng)。相比前后臺(tái)系統(tǒng),多線程系統(tǒng)的實(shí)時(shí)性又被提高了。

多線程系統(tǒng)大概的偽代碼具體見代碼清單所示:

intflag1=0;
intflag2=0;
intflag3=0;

intmain(void)
{
/*硬件相關(guān)初始化*/
HardWareInit();

/*OS初始化*/
RTOSInit();

/*OS啟動(dòng),開始多線程調(diào)度,不再返回*/
RTOSStart();
}

voidISR1(void)
{
/*置位標(biāo)志位*/
flag1=1;
}

voidISR2(void)
{
/*置位標(biāo)志位*/
flag2=2;
}

voidISR3(void)
{
/*置位標(biāo)志位*/
flag3=1;
}

voidDoSomething1(void)
{
/*無限循環(huán),不能返回*/
for(;;){
/*線程實(shí)體*/
if(flag1){

}
}
}

voidDoSomething2(void)
{
/*無限循環(huán),不能返回*/
for(;;){
/*線程實(shí)體*/
if(flag2){

}
}
}

voidDoSomething3(void)
{
/*無限循環(huán),不能返回*/
for(;;){
/*線程實(shí)體*/
if(flag3){

}
}
}

相比前后臺(tái)系統(tǒng)中后臺(tái)順序執(zhí)行的程序主體,在多線程系統(tǒng)中,根據(jù)程序的功能,我們把這個(gè)程序主體分割成一個(gè)個(gè)獨(dú)立的,無限循環(huán)且不能返回的小程序,這個(gè)小程序我們稱之為線程。

每個(gè)線程都是獨(dú)立的,互不干擾的,且具備自身的優(yōu)先級(jí),它由操作系統(tǒng)調(diào)度管理。加入操作系統(tǒng)后,我們在編程的時(shí)候不需要精心地去設(shè)計(jì)程序的執(zhí)行流,不用擔(dān)心每個(gè)功能模塊之間是否存在干擾。

加入了操作系統(tǒng),我們的編程反而變得簡單了。整個(gè)系統(tǒng)隨之帶來的額外開銷就是操作系統(tǒng)占據(jù)的那一丁點(diǎn)的 FLASH 和 RAM?,F(xiàn)如今,單片機(jī)的 FLASH 和 RAM 是越來越大,完全足以抵擋 RTOS 那點(diǎn)開銷。

輪詢、前后臺(tái)和多線程系統(tǒng)軟件模型區(qū)別:

230907e0-d2a2-11ed-bfe3-dac502259ad0.jpg

審核編輯:湯梓紅

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

    關(guān)注

    6044

    文章

    44628

    瀏覽量

    638991
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6900

    瀏覽量

    123812
  • 多線程
    +關(guān)注

    關(guān)注

    0

    文章

    278

    瀏覽量

    20076
  • RTOS
    +關(guān)注

    關(guān)注

    22

    文章

    820

    瀏覽量

    119918
  • 裸機(jī)
    +關(guān)注

    關(guān)注

    0

    文章

    39

    瀏覽量

    6443

原文標(biāo)題:單片機(jī)裸機(jī) vs RTOS多線程

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    51單片機(jī)多線程實(shí)現(xiàn)

    51單片機(jī)多線程實(shí)現(xiàn),給STC89C52RC單片機(jī)移植RTX-Tiny操作系統(tǒng),簡單到爆,B格拉滿了,好吧?
    發(fā)表于 07-14 06:43

    基于51單片機(jī)多線程操作系統(tǒng) 精選資料分享

    我知道,在51單片機(jī)上運(yùn)行一個(gè)操作系統(tǒng),大多數(shù)情況下并不實(shí)用。但51單片機(jī)廣為人知。所以我認(rèn)為,用它來逐步的實(shí)現(xiàn)一個(gè)多線程操作系統(tǒng),使得讀者以更多的精力思考操作系統(tǒng)的設(shè)計(jì),弱化芯片本身的概念。此處
    發(fā)表于 07-20 07:55

    基于linux的單片機(jī)開發(fā)和裸機(jī)開發(fā)的區(qū)別

    1.基于linux的單片機(jī)開發(fā)和裸機(jī)開發(fā)的區(qū)別\qquad單片機(jī)裸機(jī)開發(fā)和基于linux的單片機(jī)
    發(fā)表于 11-19 08:21

    請(qǐng)問單片機(jī)怎么實(shí)現(xiàn)真正的多線程?

    單片機(jī)怎么實(shí)現(xiàn)真正的多線程??
    發(fā)表于 10-18 06:45

    利用多線程思想實(shí)現(xiàn)單片機(jī)系統(tǒng)的偽并行處理

    介紹和分析了一種原用于計(jì)算機(jī)高級(jí)語言的編程思想---多線程編程,向單片機(jī)控制系統(tǒng)的移植。利用多線程的編程思想進(jìn)行單片機(jī)的復(fù)雜控制,可以應(yīng)用到一些對(duì)系統(tǒng)控制有苛刻
    發(fā)表于 08-07 09:09 ?40次下載

    時(shí)分多線程技術(shù)在單片機(jī)中的應(yīng)用

    本文就時(shí)分多線程技術(shù)在單片機(jī)中的應(yīng)用進(jìn)行了介紹。該方法為構(gòu)建低成本、高效、便于維護(hù)的單片機(jī)系統(tǒng)提供了良好的體系框架結(jié)構(gòu)和設(shè)計(jì)思想。
    發(fā)表于 06-09 10:24 ?3084次閱讀
    時(shí)分<b class='flag-5'>多線程</b>技術(shù)在<b class='flag-5'>單片機(jī)</b>中的應(yīng)用

    多線程好還是單線程好?單線程多線程區(qū)別 優(yōu)缺點(diǎn)分析

    摘要:如今單線程多線程已經(jīng)得到普遍運(yùn)用,那么到底多線程好還是單線程好呢?單線程多線程
    發(fā)表于 12-08 09:33 ?8.2w次閱讀

    RTOS多線程訪問同一硬件(如UART)的方法

    RTOS多線程(任務(wù))訪問同一硬件(如UART)的方法
    的頭像 發(fā)表于 03-12 11:28 ?5540次閱讀

    裸機(jī)多線程系統(tǒng)的區(qū)別

    編輯整理:ZhengN 素材來源:RT-Thread書籍 很多初學(xué)者都是從裸機(jī)開始學(xué)起,不能明白裸機(jī)和操作系統(tǒng)的區(qū)別。甚至有不少人認(rèn)為用中斷就能代替多任務(wù)處理,你認(rèn)同嗎? 裸機(jī)系統(tǒng)
    的頭像 發(fā)表于 09-03 15:47 ?2494次閱讀
    <b class='flag-5'>裸機(jī)</b>和<b class='flag-5'>多線程</b>系統(tǒng)的<b class='flag-5'>區(qū)別</b>

    簡述STM32單片機(jī)開發(fā)中的RTOS

    很多STM32單片機(jī)初學(xué)者都是從裸機(jī)開始的,裸機(jī)確實(shí)也能開發(fā)出好的產(chǎn)品。但是,作為一個(gè)嵌入式軟件工程師,況且用的并不是51那種低端單片機(jī),如果只會(huì)用
    的頭像 發(fā)表于 06-28 14:53 ?3545次閱讀

    Arduino AVR單片機(jī)通過threadhandler庫跑多線程

    Arduino AVR單片機(jī)通過threadhandler庫跑多線程
    發(fā)表于 11-14 21:06 ?8次下載
    Arduino AVR<b class='flag-5'>單片機(jī)</b>通過threadhandler庫跑<b class='flag-5'>多線程</b>

    單片機(jī)和嵌入式的區(qū)別

    ,價(jià)格低,應(yīng)用領(lǐng)域大多為小家電,終端設(shè)備。 嵌入式片上資源豐富,價(jià)格高,應(yīng)用領(lǐng)域廣泛,基本可以適用于任何領(lǐng)域。開發(fā)模式 單片機(jī)一般都是裸機(jī)開發(fā),程序規(guī)模較小,只有在比較高端的芯片上才會(huì)使用RTOS 嵌入式開發(fā)一...
    發(fā)表于 11-15 12:36 ?15次下載
    <b class='flag-5'>單片機(jī)</b>和嵌入式的<b class='flag-5'>區(qū)別</b>

    通過多線程來實(shí)現(xiàn)ADC采集功能和OLED顯示功能

    RTOS編程和裸機(jī)編程最大的區(qū)別就是RTOS可實(shí)現(xiàn)多線程管理,這是RTOS的最大優(yōu)勢。既然跑了操
    的頭像 發(fā)表于 11-20 09:30 ?6160次閱讀
    通過<b class='flag-5'>多線程</b>來實(shí)現(xiàn)ADC采集功能和OLED顯示功能

    STM32單片機(jī)開發(fā)中的RTOS

    很多STM32單片機(jī)初學(xué)者都是從裸機(jī)開始的,裸機(jī)確實(shí)也能開發(fā)出好的產(chǎn)品。但是,作為一個(gè)嵌入式軟件工程師,況且用的并不是51那種低端單片機(jī),如果只會(huì)用
    發(fā)表于 02-08 15:45 ?6次下載
    STM32<b class='flag-5'>單片機(jī)</b>開發(fā)中的<b class='flag-5'>RTOS</b>

    RTOS多線程必須要MMU才行?

    的作用。 但是,并不是所有操作系統(tǒng)都需要MMU才行,我們嵌入式中很多常用的RTOS(實(shí)時(shí)操作系統(tǒng))沒有MMU一樣可以實(shí)現(xiàn)多線程。 只是RTOS實(shí)現(xiàn)的多線程相對(duì)大型操作系統(tǒng)要簡單一點(diǎn),其
    的頭像 發(fā)表于 10-11 18:56 ?2533次閱讀