久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

嵌入式開發(fā)中做常用的三種程序構(gòu)架

 冥冥1994 2024-04-08 發(fā)布于廣東

在嵌入式軟件開發(fā),包括單片機開發(fā)中,,軟件架構(gòu)對于開發(fā)人員是一個必須認(rèn)真考慮的問題,。軟件架構(gòu)對于系統(tǒng)整體的穩(wěn)定性和可靠性是非常重要的,一個合適的軟件架構(gòu)不僅結(jié)構(gòu)清晰,,并且便于開發(fā),。

我相信在嵌入式或單片機軟件開發(fā)的初期大多數(shù)開發(fā)者采用的都是簡單的前后臺順序執(zhí)行架構(gòu)(我就是這樣的)。

在嵌入式軟件開發(fā)中,,程序架構(gòu)主要分為三種,,本篇文章將對這三種程序架構(gòu)做出詳解。

1,、軟件架構(gòu)存在的意義

可以說一個好的程序架構(gòu),,是一個有經(jīng)驗的工程師和一個初學(xué)者的分水嶺。

軟件架構(gòu)對于開發(fā)人員是友好的,,你希望先執(zhí)行什么任務(wù)后執(zhí)行什么任務(wù),,或者這一個時間點執(zhí)行什么任務(wù)下一個執(zhí)行什么任務(wù),又或者什么事件會同步到某個任務(wù)等等,,在不同的軟件架構(gòu)下,,解決上述問題的具體方法都是有所區(qū)別的。

軟件架構(gòu)對開發(fā)者最大的幫助是:

幫助開發(fā)者掌控整個工程的框架,,當(dāng)你熟練使用其中某一個程序架構(gòu)后,,對于系統(tǒng)中出現(xiàn)的bug你一定能夠快速的定位并解決。

當(dāng)然,,我建議要根據(jù)需要選擇合適的軟件架構(gòu)進(jìn)行開發(fā),,具體原因在文章后面會進(jìn)行介紹,。

2、深入介紹三種不同的程序架構(gòu)

三種常用的軟件架構(gòu)有: 順序執(zhí)行的前后臺系統(tǒng) ,、時間片輪詢系統(tǒng)多任務(wù)操作系統(tǒng) ,。

為了讓大家有一個更為清晰的認(rèn)識,我分別用三種軟件架構(gòu)對一個實例進(jìn)行介紹說明,。這個實例如下:

它有4個任務(wù),,這4個任務(wù)為按鍵掃描、聲光報警,、顯示屏刷新和超聲波測距,。這個實例的具體功能是通過按鍵設(shè)置測量距離的閾值,當(dāng)測距距離低于設(shè)置的閾值時,,觸發(fā)聲光報警并且將測量距離實時顯示在顯示屏上(這個應(yīng)用是汽車倒車?yán)走_(dá)的具體體現(xiàn)),。

2.1 順序執(zhí)行的前后臺系統(tǒng)

在順序執(zhí)行的前后臺系統(tǒng)中,我會把鍵盤掃描用查詢的方式放在while(1)中,,而顯示屏刷新和超聲波測距使用中斷,,在中斷服務(wù)函數(shù)中獲取測量距離后進(jìn)行顯示,在主函數(shù)的循環(huán)中進(jìn)行按鍵的檢測,,聲光處理也放在主循環(huán)中。這樣整個程序就以變量標(biāo)志的同步方式在主循環(huán)和后臺中斷中執(zhí)行,,對應(yīng)的程序代碼如圖所示:

開發(fā)

▲ 順序執(zhí)行前后臺系統(tǒng)的主函數(shù)

開發(fā)

▲ 順序執(zhí)行前后臺系統(tǒng)的中斷服務(wù)函數(shù)

這種架構(gòu)的優(yōu)點是使用簡單易于理解,,而缺點是每個任務(wù)所占的CPU時間過長的話,會導(dǎo)致程序的實時性能差,,就比如按鍵的檢測等,。

2.2 時間片輪詢系統(tǒng)

時間片輪詢法實際上通常出現(xiàn)在操作系統(tǒng)中,也就是說他屬于操作系統(tǒng),,但在這里所說的是基于前后臺系統(tǒng)的時間片輪詢,。時間片輪詢法的實質(zhì)其實就是選出一個定時器,沒進(jìn)一次定時中斷對計數(shù)值進(jìn)行自加,,在主循環(huán)中根據(jù)這個計數(shù)值執(zhí)行任務(wù),,這個計數(shù)值也就是任務(wù)輪詢的時間片。

在這個實例中,,如果采用時間片輪詢系統(tǒng)的話,,首先選用主控芯片的任一定時器,定時器定時時間周期由我們決定,,為了保證實時性和運行效率,,這個值通常取10ms、30ms,、50ms等,,我會將按鍵掃描輪值值設(shè)置為20ms,,因為按鍵抖動的時長一般為20ms,這樣處理既達(dá)到了消抖的目的,,又不會漏掉按鍵的檢測,;而顯示屏的刷新設(shè)置為30ms,如果你覺得刷新反應(yīng)慢了也可以修改這一輪詢值得到改善,;

而超聲波測距的輪詢值設(shè)置為100ms,,即每隔100模式觸發(fā)測距一次,這個測距頻率已經(jīng)能夠滿足大多數(shù)的情況了,。

程序代碼如下:

開發(fā)

▲ 時間片輪詢的系統(tǒng)函數(shù)

開發(fā)

▲ 時間片輪詢系統(tǒng)的定時器中斷函數(shù)

可以看出時間片輪詢法相比順序執(zhí)行還是有很大優(yōu)勢的,,既有順序執(zhí)行法的優(yōu)點,也有操作系統(tǒng)的部分優(yōu)點,。

2.3 多任務(wù)操作系統(tǒng)

操作系統(tǒng)的本身是一個比較復(fù)雜的東西,,任務(wù)的管理和調(diào)度實現(xiàn)的底層是很復(fù)雜和困難的。但是呢,,我們一般都是把操作系統(tǒng)本身作為一個工具一個平臺,,我們的目的是使用它的功能而不是開發(fā)一個操作系統(tǒng)。

我使用過ucos和freertos小型的實時操作系統(tǒng),,也使用過Linux大型的操作系統(tǒng),,有了操作系統(tǒng),不管是對于程序的穩(wěn)定性和開發(fā)的效率都會好很多,。我們在使用操作系統(tǒng)的時候更多的需要去學(xué)習(xí)和理解它的一些調(diào)度和通信的方式,。

實際上真正能使用操作系統(tǒng)的人并不多,反而是跑裸機的占大多數(shù),,這也和產(chǎn)品的具體要求有關(guān),,很多簡單的系統(tǒng)只需要裸機即可滿足。

在這里本我不過多的介紹操作系統(tǒng)本身,,因為操作系統(tǒng)確實挺復(fù)雜的,,下面圖例中的代碼是在freertos中創(chuàng)建按鍵控制LED亮滅的程序結(jié)構(gòu),大家可以對比一下:

開發(fā)

▲ freertos多任務(wù)系統(tǒng)中主函數(shù)

開發(fā)

▲ freertos多任務(wù)操作系統(tǒng)中的任務(wù)回調(diào)函數(shù)

3,、如何選擇合適的軟件架構(gòu)

我使用過多種不同MCU做項目開發(fā),,例如:STM32、STC15,、新唐等,,也接觸過復(fù)雜的設(shè)計需求,例如:車載智能系統(tǒng)和智能家居,,跑過操作系統(tǒng)ucos,、freertos和Linux等等,在回到裸機開發(fā)時,,就會不然而然的去思考完整系統(tǒng)的軟件架構(gòu)的設(shè)計問題,,相信在讀者中開發(fā)裸機的也占大多數(shù),。

我認(rèn)為沒有最好的軟件架構(gòu)(程序架構(gòu)),而是只有最合適的,。因為在不同的應(yīng)用場景中適合采用不同的程序設(shè)計,,而單純的去比較哪種程序架構(gòu)是最好的沒有什么實際的意義。

那接下來我們來對具體的應(yīng)用場景進(jìn)行分析,,在一些邏輯清晰功能單一的系統(tǒng)中就很適合選擇順序執(zhí)行的前后臺架構(gòu),,這個軟件架構(gòu)往往能夠滿足我們大部分的需求,比如電飯煲,、電磁爐和聲控?zé)襞莸龋?/p>

而在一些資源缺乏的單片機并且對系統(tǒng)可靠性要求較高的情況下非常適合,,因為這種方法的系統(tǒng)耗費比較小,只是犧牲了一個定時器而已,,但是選擇此種程序架構(gòu)需要我們對時間片進(jìn)行深思熟慮的劃分,;

最后,在一些功能復(fù)雜,,邏輯控制較為困難的系統(tǒng)中就適合選擇多任務(wù)操作系統(tǒng),,比如視頻監(jiān)控系統(tǒng)、無人機等等應(yīng)用場景,。

作為一名嵌入式軟件工程師,,掌握這三種軟件架構(gòu)是非常有必要的,它們可以讓我們在設(shè)計程序時擁有更多的選擇和思考,,而每一種不同的程序架構(gòu)都具備它自己的優(yōu)勢與不足,,這需要我們?nèi)ビ眯膶嵺`方可體會到它的奧妙。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多