日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]一個搶先式“裸奔"系統(tǒng)的設計

摘要:在一些資源比較緊張的嵌入式系統(tǒng)中,使用RTOS有時未必能夠較好地滿足系統(tǒng)較高的實時性要求。在軟件設計時,可以借鑒搶先式RTOS實時調(diào)度內(nèi)核的方法,實現(xiàn)更為高效的任務調(diào)度算法,從而實現(xiàn)系統(tǒng)更高的實時性要求。
關鍵詞:嵌入式系統(tǒng);搶先式調(diào)度;實時操作系統(tǒng);STC12C5410

引言
   
這是2007年筆者在基于STC12C5410的工控系統(tǒng)里采用的軟件技術。系統(tǒng)中有兩個以主從方式通過I2C總線進行數(shù)據(jù)通信的節(jié)點,作為I2C總線的從機節(jié)點,因MCU性能限制了數(shù)據(jù)傳輸速率,因而每次通過總線傳輸30個字節(jié)的數(shù)據(jù)需要持續(xù)占用幾十ms的時間。由于在進行I2C總線通信的這段時間里,系統(tǒng)將不能響應輸入和改變輸出(類似系統(tǒng)停頓),這么長的時間延遲對于有較高實時要求的工控系統(tǒng)顯得難于容忍。
    為此,最初考慮解決問題的辦法有3個:
    ①打斷和拆分數(shù)據(jù)包,采用多次傳輸?shù)霓k法。這樣做不但需要修改從機的軟件,多個數(shù)據(jù)包的連接又讓軟件變得復雜起來,所以這不是個很好的辦法。
    ②由于I2C總線在進行數(shù)據(jù)傳輸中,波特率較低,存在大量短時delay(),可以采用定時中斷,在定時中斷中只變換一次電平后就返回,從而在后臺完成數(shù)據(jù)發(fā)送。但這樣就導致中斷服務中必須執(zhí)行一個很龐大的狀態(tài)機判斷,中斷服務中大量的判斷也非常耗時耗力,且調(diào)試也不方便。
    ③采用RTOS技術,但在80C51系統(tǒng)上使用RTOS,再精練的實時調(diào)度,每個tick的時間都很難低于1 ms。經(jīng)測試,I2C總線傳輸中途遇到1 ms以上的傳輸中斷,會產(chǎn)生總線超時錯誤,因而在本系統(tǒng)中即使采用RTOS也未必能很好地解決問題。
    通過一段時間對RTOS的分析和研究,最后在80C51的裸奔系統(tǒng)中嵌入特別定制的精練的搶先式調(diào)度來完成主要任務和I2C總線任務的并行執(zhí)行,最終獲得了很好的效果。
    下面就來詳細地講述這個定制的搶先式調(diào)度的編程技巧。

1 I2C總線通信子程序
   
對I2C總線的時序在此就不作介紹了,下面是部分基于Keil C51模擬主I2C總線的通信子程序代碼如下:
   
   
    上面是基于80C51模擬I2C總線的通信程序,其中的HIGH、LOW是1、0的宏定義,idelay()提供時序要求的一段時間的延時。
    不難看出,這和通常的模擬I2C總線的通信子程序完全一樣。事實上,我也是直接使用了以前的子程序。[!--empirenews.page--]

2 程序主執(zhí)行函數(shù)main()函數(shù)
   
   
   
main()函數(shù)也非常簡單。首先,調(diào)用Sys_init()完成單片機硬件系統(tǒng)的初始化;然后調(diào)用I2c_svr(),完成I2C總線通信系統(tǒng)的初始化,并執(zhí)行數(shù)據(jù)傳輸,本函數(shù)稍后將作詳細的介紹;接下來是一個while(1)主循環(huán),其中的mainfunc()是執(zhí)行主要任務的函數(shù),完成系統(tǒng)的主要功能,并返回一個bool變量,這個變量用于I2C總線數(shù)據(jù)傳輸?shù)恼埱螅?br />     這里定義了一個bool型變量bi2csvr。作用:由mainfunc()執(zhí)行結(jié)果來置位,系統(tǒng)根據(jù)此標志,啟動數(shù)據(jù)通信,并在數(shù)據(jù)傳輸完成后清零這個標志。

3 I2C總線通信服務程序
   
通信服務程序I2c_svr()函數(shù)代碼如下:
   
    這個函數(shù)看起來也不復雜,但是需要讀者用RTOS任務的概念來理解這個函數(shù)。
    首先,關于寄存器組,這里的I2C服務程序I2c_svr()使用了單獨的寄存器組(寄存器組1),由于#pragmarb(1)編譯指令并不會讓編譯器自動生成切換寄存器組的指令,所以I2c_svr()中又通過修改PSW特殊寄存器來切換到工作寄存器組1。當然,要切換寄存器組,還需要確認在切換前,本函數(shù)沒有使用工作寄存器。
    同時,I2c_svr()的初始化部分還執(zhí)行了特殊功能寄存器壓棧保存和切換堆棧指針SP,這些本是實時內(nèi)核調(diào)度器里要完成的任務,在這里的出現(xiàn)相當于建立了新的任務。
    接下來的while(1)表明,這里相當于實時系統(tǒng)里的一個任務了。
    這個任務很簡單,i2write()的功能就是通過I2C總線,發(fā)送數(shù)據(jù)緩沖區(qū)里所有的數(shù)據(jù),在這里就不做詳細介紹了。在發(fā)送完成后,清零數(shù)據(jù)發(fā)送請求標志位bi2csvr,然后執(zhí)行延時等待。

4 定時中斷和延時函數(shù)
   
搶先系統(tǒng)的關鍵部分是定時中斷timer1()和延時函數(shù)idelay(),代碼如下:
   
    首先看tsksw()宏,它的作用是保存堆棧指針并切換堆棧。這等同于RTOS里任務的上下文切換,但這里僅切換一下堆棧指針即可。
    接下來看這個定時中斷服務函數(shù)timer1(),其中systern_tmr()是個修改定時器TH0的函數(shù),這里不作介紹了。隨后,約束判斷(后面再作詳細介紹)再通過tsksw()函數(shù)進行任務間的切換。
    接下來看延時函數(shù)idelay(),它提供I2C總線時序里要求的延時函數(shù)。注意:我們通常都是使用若干nop或者類似“for(x=LOOP;x>0;x——);”的延時來完成的,但這里一改這類傳統(tǒng)的方式,而是通過“任務切換”將CPU控制權交給另外一個任務main來實現(xiàn)的。需要特別指出,idelay()里的關中斷很重要,學習過RTOS的讀者應該都記得RTOS里面的“臨界段代碼”的概念。
    最后,介紹上面未詳細說明的定時中斷服務函數(shù)timer1()中任務切換的約束判斷。bi2csvr是I2C總線請求標志,如果這個標志為零,則表示不需要I2C總線的通信服務,定時中斷里也就不需要做任務切換;此外,bi2cdly也是個控制切換的小技巧,該標志在idelay()中置位,在定時中斷服務中判斷并清零。也就是在執(zhí)行idelay()后發(fā)生的第一次定時中斷里只清除這個標志,而在第二次定時中斷中才可能發(fā)生任務切換,以此保證idelay()的延時時間一定不少于一個定時器的溢出周期。
[!--empirenews.page--]
5 程序運行流程
   
程序初始化流程圖如圖1所示。


    首先,main()在完成硬件初始化Sys_init()后,調(diào)用I2c_svr()總線通信服務程序。
    I2c_svr()服務程序里,首先完成類似通用RTOS的任務現(xiàn)場保護的過程。再通過切換堆棧指針,完成了新任務堆棧的初始化過程。然后進入I2C總線通信模塊主循環(huán)(類似創(chuàng)建任務的操作),再通過調(diào)用idelay(),將CPU的控制權交還給main()。奧妙就在于idelay()首先保存通信程序的寄存器現(xiàn)場(ACC和PSW),然后轉(zhuǎn)換到main()的堆??臻g,并恢復剛才被I2c_svr()保存的寄存器現(xiàn)場(ACC和PSW)。所以;i2c_svr()里的idelay()函數(shù)返回后將不執(zhí)行其下面的i2write(),而是執(zhí)行main()里的while(1)。
    i2write()又如何能得到執(zhí)行呢?它是通過定時中斷服務程序timer1()再次獲得CPU控制權的。如果在main()的執(zhí)行中發(fā)生timer1()中斷,因為timer1()里也進行與idelay()類似的任務切換操作,這時候?qū)⑶袚Q到I2c_svr()的堆棧和寄存器(現(xiàn)場)。此時timer1()中斷返回時,不會返回到main()里,而是執(zhí)行i2write()。
    另外,函數(shù)i2write()內(nèi)部執(zhí)行中也會調(diào)用idelay(),在I2c_svr()中的每次調(diào)用idelay()都會將CPU控制權交給main()的切換。main()和I2c_svr()的切換關系如圖2所示。


    當然,timer1()并不總是引起任務的切換,通過判斷bi2csvr標志可以避免(在不需要數(shù)據(jù)傳輸時)不必要的任務切換。另外,timer1()也可能進行從I2c_svr()到main()的切換。所以即使I2c_svr()里很長時間沒有調(diào)用idelay(),也不會阻塞main()的執(zhí)行。
    切換現(xiàn)場一般基于80C51的RTOS,通常要保存所有的CPU寄存器(包括8個工作寄存器、ACC、PSW、B、DPTR等),而這里與它們不同,因為在筆者的通信服務模塊I2c_svr()中使用了另外的寄存器組,且未使用B和DPTR,因此不需要保存8個工作寄存器及B和DPTR,僅保存和恢復PSW和ACC這兩個寄存器就可以了,大大提高了切換效率。
    本系統(tǒng)里僅有兩個“任務”,即main()和I2c_svr(),也沒有固定優(yōu)先級,處于“等待”狀態(tài)任務的優(yōu)先級總比當前運行中的任務高,所以相當于同優(yōu)先級時間片輪轉(zhuǎn)調(diào)度方式。但相對于RTOS,這里還缺少操作系統(tǒng)必須管理的與任務相關的狀態(tài)和數(shù)據(jù)結(jié)構,所以筆者還將其稱做“裸奔”系統(tǒng)。

6 現(xiàn)場保護的補充說明
   
任務切換中的寄存器現(xiàn)場保護代碼如下:
   
   
    上面是Keil C51對定時中斷服務函數(shù)timer1()編譯生成的LST文件。編譯器在中斷服務里自動生成壓棧和出棧寄存器的指令,所以在寫idelay()函數(shù)的寄存器現(xiàn)場切換的時候,必須完全遵守這個寄存器壓棧和出棧順序規(guī)則才能正常工作。

結(jié)語
   
通過學習和借鑒RTOS的CPU時間搶先調(diào)度和分配方法,可以將本系統(tǒng)中總線時序里許多很短的延時都交給主程序使用,最大程度利用CPU時間,實現(xiàn)主程序和通信服務程序的并行執(zhí)行,從而讓主程序和通信服務程序均達到系統(tǒng)要求的實時性能。
    本文為時間緊張的系統(tǒng)設計提供了一個新的解決思路。應該有助于初學操作系統(tǒng)的讀者理解操作系統(tǒng)任務切換的工作機理。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

舍弗勒以"專注驅(qū)動技術的科技公司"為主題亮相IAA MOBILITY 2025(B3館B40展臺) 合并緯湃科技后首次亮相IAA MOBILITY,展示拓展后的汽車產(chǎn)品組合 憑借在軟件、...

關鍵字: 電氣 軟件 驅(qū)動技術 BSP

香港2025年 9月12日 /美通社/ -- 全球領先的互聯(lián)網(wǎng)社區(qū)創(chuàng)建者 - 網(wǎng)龍網(wǎng)絡控股有限公司 ("網(wǎng)龍"或"本公司",香港交易所股票代碼:777)欣然宣布,其子公司My...

關鍵字: AI 遠程控制 控制技術 BSP

深圳2025年9月11日 /美通社/ -- 2025 年 9 月 10 日,第 26 屆中國國際光電博覽會(簡稱 "CIOE 中國光博會")在深圳盛大開幕。本屆展會吸引力再創(chuàng)新高,全球超3800家優(yōu)質(zhì)...

關鍵字: 自動化 光電 CIO BSP

天津2025年9月11日 /美通社/ -- 國際能源署(IEA)數(shù)據(jù)顯示,2024 年全球數(shù)據(jù)中心電力消耗達 415 太瓦時,占全球總用電量的 1.5%,預計到 2030 年,這一數(shù)字將飆升至 945 太瓦時,近乎翻番,...

關鍵字: 模型 AI 數(shù)據(jù)中心 BSP

北京2025年9月11日 /美通社/ -- 國際9月11日上午,2025年中國國際服務貿(mào)易交易會(以下簡稱"服貿(mào)會")—體育賽事經(jīng)濟高質(zhì)量發(fā)展大會現(xiàn)場,北京經(jīng)濟技術開發(fā)區(qū)工委委員、管委會副主...

關鍵字: 5G BSP GROUP MOTOR

柏林2025年9月9日 /美通社/ -- 2025年9月5日,納斯達克上市公司優(yōu)克聯(lián)集團(NASDAQ: UCL)旗下全球互聯(lián)品牌GlocalMe,正式亮相柏林國際消費電子展(IFA 2025),重磅推出融合企...

關鍵字: LOCAL LM BSP 移動網(wǎng)絡

深圳2025年9月9日 /美通社/ -- PART 01活動背景 當技術的鋒芒刺穿行業(yè)壁壘,萬物互聯(lián)的生態(tài)正重塑產(chǎn)業(yè)疆域。2025年,物聯(lián)網(wǎng)產(chǎn)業(yè)邁入?"破界創(chuàng)造"與"共生進化"?的裂變時代——AI大模型消融感知邊界,...

關鍵字: BSP 模型 微信 AIOT

"出海無界 商機無限"助力企業(yè)構建全球競爭力 深圳2025年9月9日 /美通社/ -- 2025年8月28日, 由領先商業(yè)管理媒體世界經(jīng)理人攜手環(huán)球資源聯(lián)合主辦、深圳?前海出海e站通協(xié)辦的...

關鍵字: 解碼 供應鏈 AI BSP

柏林2025年9月9日 /美通社/ -- 柏林當?shù)貢r間9月6日,在2025德國柏林國際電子消費品展覽會(International Funkausstellung...

關鍵字: 掃地機器人 耳機 PEN BSP

武漢2025年9月9日 /美通社/ -- 7月24日,2025慧聰跨業(yè)品牌巡展——湖北?武漢站在武漢中南花園酒店隆重舉辦!本次巡展由慧聰安防網(wǎng)、慧聰物聯(lián)網(wǎng)、慧聰音響燈光網(wǎng)、慧聰LED屏網(wǎng)、慧聰教育網(wǎng)聯(lián)合主辦,吸引了安防、...

關鍵字: AI 希捷 BSP 平板
關閉