在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

裸機和多線程系統的區別

strongerHuang ? 來源:ZhengN ? 作者:ZhengN ? 2020-09-03 15:47 ? 次閱讀

編輯整理:ZhengN

素材來源:RT-Thread書籍

很多初學者都是從裸機開始學起,不能明白裸機和操作系統的區別。甚至有不少人認為用中斷就能代替多任務處理,你認同嗎?

裸機系統

裸機系統通常分成輪詢系統和前后臺系統。

1、輪詢系統

輪詢系統即是在裸機編程的時候,先初始化好相關的硬件,然后讓主程序在一個死循環里面不斷循環,順序地做各種事情,大概的偽代碼具體如代碼清單 1-1所示:

int main(void) { /* 硬件相關初始化 */ HardWareInit(); /* 無限循環 */ for (;;) { /* 處理事情 1 */ DoSomething1(); /* 處理事情 2 */ DoSomethingg2(); /* 處理事情 3 */ DoSomethingg3(); } }

輪詢系統是一種非常簡單的軟件結構,通常只適用于那些只需要順序執行代碼且不需要外部事件來驅動的就能完成的事情。在代碼清單 1-1 中,如果只是實現 LED 翻轉,串口輸出,液晶顯示等這些操作,那么使用輪詢系統將會非常完美。但是,如果加入了按鍵操作等需要檢測外部信號的事件,用來模擬緊急報警,那么整個系統的實時響應能力就不會那么好了。

假設DoSomethingg3 是按鍵掃描,當外部按鍵被按下,相當于一個警報,這個時候,需要立馬響 應 , 并 做 緊 急 處 理 , 而 這 個 時 候 程 序 剛 好 執 行 到 DoSomethingg1 , 要 命 的 是DoSomethingg1 需要執行的時間比較久,久到按鍵釋放之后都沒有執行完畢,那么當執行到 DoSomethingg3 的時候就會丟失掉一次事件。足見,輪詢系統只適合順序執行的功能代碼,當有外部事件驅動時,實時性就會降低。

2、前后臺系統

相比輪詢系統,前后臺系統是在輪詢系統的基礎上加入了中斷。外部事件的響應在中斷里面完成,事件的處理還是回到輪詢系統中完成,中斷在這里我們稱為前臺, main 函數里面的無限循環我們稱為后臺,大概的偽代碼見代碼清單 1-2所示:

int flag1 = 0; int flag2 = 0; int flag3 = 0; int main(void) { /* 硬件相關初始化 */ HardWareInit(); /* 無限循環 */ for (;;) { if (flag1) { /* 處理事情 1 */ DoSomething1(); } if (flag2) { /* 處理事情 2 */ DoSomethingg2(); } if (flag3) { /* 處理事情 3 */ DoSomethingg3(); } } } void ISR1(void) { /* 置位標志位 */ flag1 = 1; /* 如果事件處理時間很短,則在中斷里面處理 如果事件處理時間比較長,在回到后臺處理 */ DoSomething1(); } void ISR2(void) { /* 置位標志位 */ flag2 = 2; /* 如果事件處理時間很短,則在中斷里面處理 如果事件處理時間比較長,在回到后臺處理 */ DoSomething2(); } void ISR3(void) { /* 置位標志位 */ flag3 = 1; /* 如果事件處理時間很短,則在中斷里面處理 如果事件處理時間比較長,在回到后臺處理 */ DoSomething3(); }

在順序執行后臺程序的時候,如果有中斷來臨,那么中斷會打斷后臺程序的正常執行流,轉而去執行中斷服務程序,在中斷服務程序里面標記事件,如果事件要處理的事情很簡短,則可在中斷服務程序里面處理,如果事件要處理的事情比較多,則返回到后臺程序里面處理。

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

多線程系統

相比前后臺系統,多線程系統的事件響應也是在中斷中完成的,但是事件的處理是在線程中完成的。在多線程系統中,線程跟中斷一樣,也具有優先級,優先級高的線程會被優先執行。

當一個緊急的事件在中斷被標記之后,如果事件對應的線程的優先級足夠高,就會立馬得到響應。相比前后臺系統,多線程系統的實時性又被提高了。多線程系統大概的偽代碼具體見代碼清單 1-3所示:

int flag1 = 0; int flag2 = 0; int flag3 = 0; int main(void) { /* 硬件相關初始化 */ HardWareInit(); /* OS 初始化 */ RTOSInit(); /* OS 啟動,開始多線程調度,不再返回 */ RTOSStart(); } void ISR1(void) { /* 置位標志位 */ flag1 = 1; } void ISR2(void) { /* 置位標志位 */ flag2 = 2; } void ISR3(void) { /* 置位標志位 */ flag3 = 1; } void DoSomething1(void) { /* 無限循環,不能返回 */ for (;;) { /* 線程實體 */ if (flag1) { } } } void DoSomething2(void) { /* 無限循環,不能返回 */ for (;;) { /* 線程實體 */ if (flag2) { } } } void DoSomething3(void) { /* 無限循環,不能返回 */ for (;;) { /* 線程實體 */ if (flag3) { } } }

相比前后臺系統中后臺順序執行的程序主體,在多線程系統中,根據程序的功能,我們把這個程序主體分割成一個個獨立的,無限循環且不能返回的小程序,這個小程序我們稱之為線程。

每個線程都是獨立的,互不干擾的,且具備自身的優先級,它由操作系統調度管理。加入操作系統后,我們在編程的時候不需要精心地去設計程序的執行流,不用擔心每個功能模塊之間是否存在干擾。

加入了操作系統,我們的編程反而變得簡單了。整個系統隨之帶來的額外開銷就是操作系統占據的那一丁點的 FLASH 和 RAM?,F如今,單片機的 FLASH 和 RAM 是越來越大,完全足以抵擋 RTOS 那點開銷。

輪詢、前后臺和多線程系統軟件模型區別:

以上是關于裸機系統與多線程系統的筆記,摘抄于《RT-Thread內核實現與應用開發實踐指南》一書。

原文標題:裸機系統與多線程系統的區別

文章出處:【微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 多線程
    +關注

    關注

    0

    文章

    278

    瀏覽量

    19956
  • 裸機
    +關注

    關注

    0

    文章

    39

    瀏覽量

    6376

原文標題:裸機系統與多線程系統的區別

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    socket 多線程編程實現方法

    在現代網絡編程中,多線程技術被廣泛應用于提高服務器的并發處理能力。Socket編程是網絡通信的基礎,而將多線程技術應用于Socket編程,可以顯著提升服務器的性能。 多線程編程的基本概念 多線
    的頭像 發表于 11-12 14:16 ?358次閱讀

    Python中多線程和多進程的區別

    Python作為一種高級編程語言,提供了多種并發編程的方式,其中多線程與多進程是最常見的兩種方式之一。在本文中,我們將探討Python中多線程與多進程的概念、區別以及如何使用線程池與進
    的頭像 發表于 10-23 11:48 ?401次閱讀
    Python中<b class='flag-5'>多線程</b>和多進程的<b class='flag-5'>區別</b>

    CPU線程和程序線程區別

    CPU的線程與程序的線程在概念、作用、實現方式以及性能影響等方面存在顯著差異。以下是對兩者區別的詳細闡述,旨在深入探討這一技術話題。
    的頭像 發表于 09-02 11:18 ?1022次閱讀

    ESP32會不會有多線程問題,需要加鎖嗎?

    ESP32會不會有多線程問題,需要加鎖嗎
    發表于 07-19 08:05

    多線程設計模式到對 CompletableFuture 的應用

    最近在開發 延保服務 頻道頁時,為了提高查詢效率,使用到了多線程技術。為了對多線程方案設計有更加充分的了解,在業余時間讀完了《圖解 Java 多線程設計模式》這本書,覺得收獲良多。本篇文章將介紹其中
    的頭像 發表于 06-26 14:18 ?363次閱讀
    從<b class='flag-5'>多線程</b>設計模式到對 CompletableFuture 的應用

    bootloader開多線程做引導程序,跳app初始化后直接進hardfualt,為什么?

    如標題,想做一個遠程升級的項目,bootloader引導區域和app都是開多線程跑的,就是自己寫了個小的任務調度器,沒什么功能主要是想讓程序快速的響應,延時不會對其他程序造成堵塞,程序測試
    發表于 04-18 06:07

    鴻蒙OS開發實例:【ArkTS類庫多線程CPU密集型任務TaskPool】

    CPU密集型任務是指需要占用系統資源處理大量計算能力的任務,需要長時間運行,這段時間會阻塞線程其它事件的處理,不適宜放在主線程進行。例如圖像處理、視頻編碼、數據分析等。 基于多線程
    的頭像 發表于 04-01 22:25 ?844次閱讀
    鴻蒙OS開發實例:【ArkTS類庫<b class='flag-5'>多線程</b>CPU密集型任務TaskPool】

    鴻蒙APP開發:【ArkTS類庫多線程】TaskPool和Worker的對比

    TaskPool(任務池)和Worker的作用是為應用程序提供一個多線程的運行環境,用于處理耗時的計算任務或其他密集型任務??梢杂行У乇苊膺@些任務阻塞主線程,從而最大化系統的利用率,降低整體資源消耗,并提高
    的頭像 發表于 03-26 22:09 ?655次閱讀
    鴻蒙APP開發:【ArkTS類庫<b class='flag-5'>多線程</b>】TaskPool和Worker的對比

    java實現多線程的幾種方式

    Java實現多線程的幾種方式 多線程是指程序中包含了兩個或以上的線程,每個線程都可以并行執行不同的任務或操作。Java中的多線程可以提高程序
    的頭像 發表于 03-14 16:55 ?709次閱讀

    AT socket可以多線程調用嗎?

    請問AT socket 可以多線程調用嗎? 有互鎖機制嗎,還是要自己做互鎖。
    發表于 03-01 08:22

    linux多線程編程實例

    linux線程
    的頭像 發表于 02-15 21:16 ?471次閱讀
    linux<b class='flag-5'>多線程</b>編程實例

    線程是什么的基本單位 進程與線程的本質區別

    線程是操作系統中處理器調度的基本單位,它代表著獨立的執行流。在一個進程中,可以包含多個線程,這些線程共享相同的進程資源,如內存空間、文件描述符等。 進程是操作
    的頭像 發表于 02-02 16:30 ?935次閱讀

    幾點RTOS相比裸機的優勢分享

    相比前后臺系統中后臺順序執行的程序主體,在多線程系統中,根據程序的功能,我們把這個程序主體分割成一個個獨立的,無限循環且不能返回的小程序,這個小程序我們稱之為線程。
    發表于 01-24 18:21 ?819次閱讀
    幾點RTOS相比<b class='flag-5'>裸機</b>的優勢分享

    mcu線程和進程的區別是什么

    MCU線程和進程是嵌入式系統中常見的并行執行的概念,它們之間有許多區別,包括線程與進程的定義、資源管理、通信機制、執行方式等等。下面將詳細介紹MCU
    的頭像 發表于 01-04 10:45 ?754次閱讀

    報名啟動|OpenHarmony源碼轉換器—多線程特性轉換賽題

    點擊藍字 ╳ 關注我們 開源項目 OpenHarmony 是每個人的 OpenHarmony 原文標題:報名啟動|OpenHarmony源碼轉換器—多線程特性轉換賽題 文章出處:【微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。
    的頭像 發表于 12-29 16:15 ?716次閱讀
    報名啟動|OpenHarmony源碼轉換器—<b class='flag-5'>多線程</b>特性轉換賽題
    主站蜘蛛池模板: 国产精品免费拍拍拍| 黄色在线视频免费看| 天天爱天天色| avtom影院永久转四虎入口| 国产亚洲精品久久yy5099| 亚洲一区二区三区免费视频| 久久99久久99精品免观看| 亚洲精品视频网| 天天色天天摸| 国产乱理论片在线观看理论| 夜夜爽爽| 免费看国产片| 欧美激情啪啪| 男男生子大肚play做到生| 午夜精品久久久久蜜桃| 婷婷影院在线综合免费视频| 色爱综合区| 久精品在线观看| 99精品国产高清自在线看超| 天天操天| 欧美爆插| 欧美同性精品xxxx| 四虎影视入口| 久久久久久99| 亚洲午夜久久久| 亚洲一区二区三区四区在线| 日本三级电影在线观看| 国产一级特黄aaaa大片野外| 色狠狠色综合吹潮| 一区不卡| 欧美日韩一区二区三区视视频| 不卡中文字幕在线| 国产免费资源| 男女在线观看视频| 黄色片视频网| 视频免费观看视频| 亚洲 欧美 自拍 卡通 综合| 黄色在线观看视频| 色成人免费网站| 日本成人一级片| 午夜影视免费|