女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀] 引言:隨著各種應(yīng)用電子系統(tǒng)的復(fù)雜化和系統(tǒng)實(shí)時(shí)性需求的提高,并伴隨應(yīng)用軟件朝著系統(tǒng)化方向發(fā)展的加速,在16位/32位單片機(jī)中廣泛使用了嵌入式實(shí)時(shí)操作系統(tǒng)。然而實(shí)際使用

 引言:

隨著各種應(yīng)用電子系統(tǒng)的復(fù)雜化和系統(tǒng)實(shí)時(shí)性需求的提高,并伴隨應(yīng)用軟件朝著系統(tǒng)化方向發(fā)展的加速,在16位/32位單片機(jī)中廣泛使用了嵌入式實(shí)時(shí)操作系統(tǒng)。然而實(shí)際使用中卻存在著大量8位單片機(jī),從經(jīng)濟(jì)性考慮,對(duì)某些應(yīng)用場(chǎng)合,在8位MCU上使用操作系統(tǒng)是可行的。從學(xué)習(xí)操作系統(tǒng)角度,uC/OS-II for 51即簡(jiǎn)單又全面,學(xué)習(xí)成本低廉,值得推廣。

結(jié)語:μC/OS-II具有免費(fèi)、簡(jiǎn)單、可靠性高、實(shí)時(shí)性好等優(yōu)點(diǎn),但也有缺乏便利開發(fā)環(huán)境等缺點(diǎn),尤其不像商用嵌入式系統(tǒng)那樣得到廣泛使用和持續(xù)的研究更新。但開放性又使得開發(fā)人員可以自行裁減和添加所需的功能,在許多應(yīng)用領(lǐng)域發(fā)揮著獨(dú)特的作用。當(dāng)然,是否在單片機(jī)系統(tǒng)中嵌入μC/OS-II應(yīng)視所開發(fā)的項(xiàng)目而定,對(duì)于一些簡(jiǎn)單的、低成本的項(xiàng)目來說,就沒必要使用嵌入式操作系統(tǒng)了。

uC/OS-II原理:

uCOSII包括任務(wù)調(diào)度、時(shí)間管理、內(nèi)存管理、資源管理(信號(hào)量、郵箱、消息隊(duì)列)四大部分,沒有文件系統(tǒng)、網(wǎng)絡(luò)接口、輸入輸出界面。它的移植只與4個(gè)文件相關(guān):匯編文件(OS_CPU_A.ASM)、處理器相關(guān)C文件(OS_CPU.H、OS_CPU_C.C)和配置文件(OS_CFG.H)。有64個(gè)優(yōu)先級(jí),系統(tǒng)占用8個(gè),用戶可創(chuàng)建56個(gè)任務(wù),不支持時(shí)間片輪轉(zhuǎn)。它的基本思路就是 “近似地每時(shí)每刻總是讓優(yōu)先級(jí)最高的就緒任務(wù)處于運(yùn)行狀態(tài)” 。為了保證這一點(diǎn),它在調(diào)用系統(tǒng)API函數(shù)、中斷結(jié)束、定時(shí)中斷結(jié)束時(shí)總是執(zhí)行調(diào)度算法。原作者通過事先計(jì)算好數(shù)據(jù),簡(jiǎn)化了運(yùn)算量,通過精心設(shè)計(jì)就緒表結(jié)構(gòu),使得延時(shí)可預(yù)知。任務(wù)的切換是通過模擬一次中斷實(shí)現(xiàn)的。

uCOSII工作核心原理是:近似地讓最高優(yōu)先級(jí)的就緒任務(wù)處于運(yùn)行狀態(tài)。

操作系統(tǒng)將在下面情況中進(jìn)行任務(wù)調(diào)度:調(diào)用API函數(shù)(用戶主動(dòng)調(diào)用),中斷(系統(tǒng)占用的時(shí)間片中斷OsTimeTick(),用戶使用的中斷)。

調(diào)度算法書上講得很清楚,我主要講一下整體思路。

(1)在調(diào)用API函數(shù)時(shí),有可能引起阻塞,如果系統(tǒng)API函數(shù)察覺到運(yùn)行條件不滿足,需要切換就調(diào)用OSSched()調(diào)度函數(shù),這個(gè)過程是系統(tǒng)自動(dòng)完成的,用戶沒有參與。OSSched()判斷是否切換,如果需要切換,則此函數(shù)調(diào)用OS_TASK_SW()。這個(gè)函數(shù)模擬一次中斷(在51里沒有軟中斷,我用子程序調(diào)用模擬,效果相同),好象程序被中斷打斷了,其實(shí)是OS故意制造的假象,目的是為了任務(wù)切換。既然是中斷,那么返回地址(即緊鄰OS_TASK_SW()的下一條匯編指令的PC地址)就被自動(dòng)壓入堆棧,接著在中斷程序里保存CPU寄存器(PUSHALL)……。堆棧結(jié)構(gòu)不是任意的,而是嚴(yán)格按照uCOSII規(guī)范處理。OS每次切換都會(huì)保存和恢復(fù)全部現(xiàn)場(chǎng)信息(POPALL),然后用RETI回到任務(wù)斷點(diǎn)繼續(xù)執(zhí)行。這個(gè)斷點(diǎn)就是OSSched()函數(shù)里的緊鄰OS_TASK_SW()的下一條匯編指令的PC地址。切換的整個(gè)過程就是,用戶任務(wù)程序調(diào)用系統(tǒng)API函數(shù),API調(diào)用OSSched(),OSSched()調(diào)用軟中斷OS_TASK_SW()即OSCtxSw,返回地址(PC值)壓棧,進(jìn)入OSCtxSw中斷處理子程序內(nèi)部。反之,切換程序調(diào)用RETI返回緊鄰OS_TASK_SW()的下一條匯編指令的PC地址,進(jìn)而返回OSSched()下一句,再返回API下一句,即用戶程序斷點(diǎn)。因此,如果任務(wù)從運(yùn)行到就緒再到運(yùn)行,它是從調(diào)度前的斷點(diǎn)處運(yùn)行。

(2)中斷會(huì)引發(fā)條件變化,在退出前必須進(jìn)行任務(wù)調(diào)度。uCOSII要求中斷的堆棧結(jié)構(gòu)符合規(guī)范,以便正確協(xié)調(diào)中斷退出和任務(wù)切換。前面已經(jīng)說到任務(wù)切換實(shí)際是模擬一次中斷事件,而在真正的中斷里省去了模擬(本身就是中斷嘛)。只要規(guī)定中斷堆棧結(jié)構(gòu)和uCOSII模擬的堆棧結(jié)構(gòu)一樣,就能保證在中斷里進(jìn)行正確的切換。任務(wù)切換發(fā)生在中斷退出前,此時(shí)還沒有返回中斷斷點(diǎn)。仔細(xì)觀察中斷程序和切換程序最后兩句,它們是一模一樣的,POPALL+RETI。即要么直接從中斷程序退出,返回?cái)帱c(diǎn);要么先保存現(xiàn)場(chǎng)到TCB,等到恢復(fù)現(xiàn)場(chǎng)時(shí)再從切換函數(shù)返回原來的中斷斷點(diǎn)(由于中斷和切換函數(shù)遵循共同的堆棧結(jié)構(gòu),所以退出操作相同,效果也相同)。用戶編寫的中斷子程序必須按照uCOSII規(guī)范書寫。任務(wù)調(diào)度發(fā)生在中斷退出前,是非常及時(shí)的,不會(huì)等到下一時(shí)間片才處理。OSIntCtxSw()函數(shù)對(duì)堆棧指針做了簡(jiǎn)單調(diào)整,以保證所有掛起任務(wù)的棧結(jié)構(gòu)看起來是一樣的。

(3)在uCOSII里,任務(wù)必須寫成兩種形式之一(《uCOSII中文版》p99頁)。在有些RTOS開發(fā)環(huán)境里沒有要求顯式調(diào)用OSTaskDel(),這是因?yàn)殚_發(fā)環(huán)境自動(dòng)做了處理,實(shí)際原理都是一樣的。uCOSII的開發(fā)依賴于編譯器,目前沒有專用開發(fā)環(huán)境,所以出現(xiàn)這些不便之處是可以理解的。

移植過程:

(1)拷貝書后附贈(zèng)光盤sourcecode目錄下的內(nèi)容到C:YY下,刪除不必要的文件和EX1L.C,只剩下p187(《uCOSII》)上列出的文件。

(2)改寫最簡(jiǎn)單的OS_CPU.H

數(shù)據(jù)類型的設(shè)定見C51.PDF第176頁。注意BOOLEAN要定義成unsigned char 類型,因?yàn)閎it類型為C51特有,不能用在結(jié)構(gòu)體里。

EA=0關(guān)中斷;EA=1開中斷。這樣定義即減少了程序行數(shù),又避免了退出臨界區(qū)后關(guān)中斷造成的死機(jī)。

MCS-51堆棧從下往上增長(zhǎng)(1=向下,0=向上),OS_STK_GROWTH定義為0#define OS_TASK_SW() OSCtxSw() 因?yàn)镸CS-51沒有軟中斷指令,所以用程序調(diào)用代替。兩者的堆棧格式相同,RETI指令復(fù)位中斷系統(tǒng),RET則沒有。實(shí)踐表明,對(duì)于MCS-51,用子程序調(diào)用入棧,用中斷返回指令RETI出棧是沒有問題的,反之中斷入棧RET出棧則不行??傊?,對(duì)于入棧,子程序調(diào)用與中斷調(diào)用效果是一樣的,可以混用。在沒有中斷發(fā)生的情況下復(fù)位中斷系統(tǒng)也不會(huì)影響系統(tǒng)正常運(yùn)行。詳見《uC/OS-II》第八章193頁第12行

(3)改寫OS_CPU_C.C

我設(shè)計(jì)的堆棧結(jié)構(gòu)如下圖所示:

TCB結(jié)構(gòu)體中OSTCBStkPtr總是指向用戶堆棧最低地址,該地址空間內(nèi)存放用戶堆棧長(zhǎng)度,其上空間存放系統(tǒng)堆棧映像,即:用戶堆棧空間大小=系統(tǒng)堆??臻g大小+1。

SP總是先加1再存數(shù)據(jù),因此,SP初始時(shí)指向系統(tǒng)堆棧起始地址(OSStack)減1處(OSStkStart)。很明顯系統(tǒng)堆棧存儲(chǔ)空間大小=SP-OSStkStart。

任務(wù)切換時(shí),先保存當(dāng)前任務(wù)堆棧內(nèi)容。方法是:用SP-OSStkStart得出保存字節(jié)數(shù),將其寫入用戶堆棧最低地址內(nèi),以用戶堆棧最低地址為起址,以O(shè)SStkStart為系統(tǒng)堆棧起址,由系統(tǒng)棧向用戶??截悢?shù)據(jù),循環(huán)SP-OSStkStart次,每次拷貝前先將各自棧指針增1。[!--empirenews.page--]

其次,恢復(fù)最高優(yōu)先級(jí)任務(wù)系統(tǒng)堆棧。方法是:獲得最高優(yōu)先級(jí)任務(wù)用戶堆棧最低地址,從中取出“長(zhǎng)度”,以最高優(yōu)先級(jí)任務(wù)用戶堆棧最低地址為起址,以O(shè)SStkStart為系統(tǒng)堆棧起址,由用戶棧向系統(tǒng)??截悢?shù)據(jù),循環(huán)“長(zhǎng)度”數(shù)值指示的次數(shù),每次拷貝前先將各自棧指針增1。

用戶堆棧初始化時(shí)從下向上依次保存:用戶堆棧長(zhǎng)度(15),PCL,PCH,PSW,ACC,B,DPL,DPH,R0,R1,R2,R3,R4,R5,R6,R7。不保存SP,任務(wù)切換時(shí)根據(jù)用戶堆棧長(zhǎng)度計(jì)算得出。

OSTaskStkInit函數(shù)總是返回用戶棧最低地址。

操作系統(tǒng)tick時(shí)鐘我使用了51單片機(jī)的T0定時(shí)器,它的初始化代碼用C寫在了本文件中。

最后還有幾點(diǎn)必須注意的事項(xiàng)。本來原則上我們不用修改與處理器無關(guān)的代碼,但是由于KEIL編譯器的特殊性,這些代碼仍要多處改動(dòng)。因?yàn)镵EIL缺省情況下編譯的代碼不可重入,而多任務(wù)系統(tǒng)要求并發(fā)操作導(dǎo)致重入,所以要在每個(gè)C函數(shù)及其聲明后標(biāo)注reentrant關(guān)鍵字。另外,“pdata”、“data”在uCOS中用做一些函數(shù)的形參,但它同時(shí)又是KEIL的關(guān)鍵字,會(huì)導(dǎo)致編譯錯(cuò)誤,我通過把“pdata”改成“ppdata”,“data”改成“ddata”解決了此問題。OSTCBCur、OSTCBHighRdy、OSRunning、OSPrioCur、OSPrioHighRdy這幾個(gè)變量在匯編程序中用到了,為了使用Ri訪問而不用DPTR,應(yīng)該用KEIL擴(kuò)展關(guān)鍵字IDATA將它們定義在內(nèi)部RAM中。

(4)重寫OS_CPU_A.ASM

A51宏匯編的大致結(jié)構(gòu)如下:

NAME 模塊名 ;與文件名無關(guān)

定義重定位段 必須按照C51格式定義,匯編遵守C51規(guī)范。段名格式為:?PR?函數(shù)名?模塊名

聲明引用全局變量和外部子程序 注意關(guān)鍵字為“EXTRN”沒有‘E’

全局變量名直接引用

無參數(shù)/無寄存器參數(shù)函數(shù) FUNC

帶寄存器參數(shù)函數(shù) _FUNC

重入函數(shù) _?FUNC

分配堆??臻g

只關(guān)心大小,堆棧起點(diǎn)由keil決定,通過標(biāo)號(hào)可以獲得keil分配的SP起點(diǎn)。切莫自己分配堆棧起點(diǎn),只要用DS通知KEIL預(yù)留堆棧空間即可。

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

加利福尼亞庫爾弗城2024年7月16日 /美通社/ --?Snail, Inc. (納斯達(dá)克股票代碼: SNAL) (以下簡(jiǎn)稱"蝸牛游戲"或"公司")是一家領(lǐng)先的全球獨(dú)立開發(fā)商和發(fā)行商,專注于互動(dòng)數(shù)字娛樂,今日宣布方舟:...

關(guān)鍵字: iOS 安卓系統(tǒng) 移植 移動(dòng)平臺(tái)

上海2023年2月16日 /美通社/ -- 近日,諾華中國宣布與中國紅十字基金會(huì)正式啟動(dòng)"中國地中海貧血救助項(xiàng)目"廣西地區(qū)專項(xiàng)援助,將在當(dāng)?shù)囟ㄏ蛸Y助困難家庭地中海貧血患兒,同時(shí)通過相關(guān)醫(yī)生培...

關(guān)鍵字: BSP 控制 移植 大眾

北京2022年12月7日 /美通社/ -- 2022年12月3日,由高博醫(yī)學(xué)(血液病)廣東研究中心南方春富(兒童)血液病研究院、南方醫(yī)科大學(xué)南方醫(yī)院共同主辦的高博醫(yī)學(xué)論壇·華南造血干細(xì)胞移植論壇通過線下線上...

關(guān)鍵字: 移植 HD PID 血細(xì)胞

捐款近4000萬 上海2022年12月7日 /美通社/ -- 2022年12月7日下午,中芯國際"芯肝寶貝計(jì)劃"十年紀(jì)念暨2022年度捐贈(zèng)儀式在上海仁濟(jì)醫(yī)院舉行。十年來,該項(xiàng)目捐贈(zèng)善款總額近4000...

關(guān)鍵字: 中芯國際 移植

北京2022年11月14日 /美通社/ -- 2022年10月,高博醫(yī)學(xué)(血液?。┍本┭芯恐行谋本└卟┎┤梳t(yī)院造血干細(xì)胞移植科迎來了五周歲"生日"。在吳彤主任帶領(lǐng)下,移植科于2017年從無到有,歷經(jīng)五...

關(guān)鍵字: 移植 OS MT CD

上海2022年11月6日 /美通社/ -- 在第五屆中國國際進(jìn)口博覽會(huì)期間,武田制藥攜5款創(chuàng)新產(chǎn)品亮相武田罕見遺傳與血液疾病領(lǐng)域?qū)?chǎng)發(fā)布會(huì)。用于移植后抗巨細(xì)胞病毒(CMV)感染或疾病治療[1]的馬立巴韋[2]迎來&quo...

關(guān)鍵字: 移植 BSP CD FDA

亙喜生物科技集團(tuán)宣布正在中國開展的、旨在全面評(píng)估GC007g治療復(fù)發(fā)/難治性急性B淋巴細(xì)胞白血病效果的1/2期注冊(cè)性臨床試驗(yàn)順利進(jìn)入2期研究階段,首例入組患者已給藥。GC007g是亙喜生物旗下的一款靶向CD19的供者來源...

關(guān)鍵字: 移植 CD

北京2022年9月9日 /美通社/ -- 諾誠健華(香港聯(lián)交所代碼:09969)今天宣布,tafasitamab (Minjuvi®)聯(lián)合來那度胺治療不適合自體干細(xì)胞移植 (ASCT) 條件的復(fù)發(fā)/難治彌漫性大B...

關(guān)鍵字: VI NJU BSP 移植

蘇州2022年8月19日 /美通社/ -- 近日,華中科技大學(xué)同濟(jì)醫(yī)學(xué)院附屬協(xié)和醫(yī)院心外科董念國教授團(tuán)隊(duì)運(yùn)用與心擎醫(yī)療聯(lián)合研發(fā)的短中期體外全磁懸浮心室輔助裝置MoyoAssist®,成功救治三例危重的終...

關(guān)鍵字: 磁懸浮 移植 IC 靜脈

上海2022年8月17日 /美通社/ -- 2022年8月16日,聚焦于基因和細(xì)胞治療的上海邦耀生物科技有限公司(以下簡(jiǎn)稱"邦耀生物")宣布,其...

關(guān)鍵字: CD 移植 BSP ISP
關(guān)閉