




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、COS-II常用概念理解COS-II系統(tǒng)創(chuàng)建-標準-常用句柄首先我人為,句柄不是指針(哪怕說是指針的指針,要知道指針包含了太多的信息),若說句柄含有指針的某些意思(或在某種模式情況下就是指針)似乎更好; 而把句柄當做一個人的名字,并可以通過名字(句柄),實現(xiàn)對句子的引用和訪問,感覺這種比喻好象貼近,但問題是可能有許多人叫同一個名字,但句柄所以有意義正因為它具有唯一性,所以這種比喻也有問題,如果換個說法,說句柄是表示你的進程與外界的i/o連接,把它當作是一個連接的名字是不是更恰當些? 至于文件句柄么,記得曾有資料給出這樣的解釋(大意):它類似于門把手,有它你可找到“門”這個對象,就可以控制對象門
2、了,但覺得把它類比于門把手似乎并不貼切,感覺象是直譯句柄這個詞的詞意,我們知道,其實文件句柄是一個十六位長度的二進制代碼(Windows95后為32位無符號整數(shù)),代表一個已被打開文件的通道號,借助于這個句柄,你的應(yīng)用程序即可使用這個相應(yīng)的句柄對文件進行隨意存取操作,說白了文件句柄其實是一串代表著特殊含義的號碼; 當然其實系統(tǒng)是用句柄與一些資源聯(lián)系起來的,當由系統(tǒng)管理,動態(tài)分配給你應(yīng)用程序的某些資源的代句柄和指針的區(qū)別打個比方: 你朋友給你寫信,他直接寫你名字郵局是找不到你的,他就寫出你家的門牌號,郵局通過門牌就能找到你了,那么門牌就是指針,而你本身就是指針指向的內(nèi)存值. 你由于去砸110車窗
3、戶被關(guān)進局子(打比方呵呵,別打我),和你一起的有老外,有外星人,大家名字都很長,很難記,監(jiān)獄長為了方便,給每個犯人一個標號,比如你是0001,而另一個火星人是0002,那么以后監(jiān)獄長碰到0001就知道是你了,不會去找火星人麻煩的.那么這個編號就是句柄,而你就是0001所代表的資源. 一個是指向,一個是代表,2個有很大的區(qū)別.代表的話,我用0001是代表,用abcdef還是代表,而門牌,就要按照規(guī)矩來,你不能用0003來代表XX街XX號的門牌 就是這個意思呵呵,希望我的比方對LZ有幫助Z:就是將線程的物理地址映射為唯一的句柄,知道句柄后,可以在某一固定的列表里查到到與之對應(yīng)的線程物理地址與句柄相
4、關(guān)的函數(shù)得到當前線程句柄: GetCurrentThread(void)得到當前線程ID: GetCurrentThreadId(void)根據(jù)句柄得到線程ID: GetThreadId根據(jù)窗口句柄得到此窗口所在線程的ID(同時得到進程的ID): GetWindowThreadProcessId根據(jù)ID得到線程句柄: OpenThread(unsigned long)掛起用SuspendThread喚醒用ResumeThread(強制)結(jié)束TerminateThread主線程切換上下文事件的流水賬記錄如下:(1)任務(wù)A呼叫SVC來請求任務(wù)切換(例如,等待某些工作完成)(2)OS接收到請求,做好
5、上下文切換的準備,并且懸起一個PendSV異常。(3)當CPU退出SVC后,它立即進入PendSV,從而執(zhí)行上下文切換。(4)當PendSV執(zhí)行完畢后,將返回到任務(wù)B,同時進入線程模式。(5)發(fā)生了一個中斷,并且中斷服務(wù)程序開始執(zhí)行(6)在ISR執(zhí)行過程中,發(fā)生SysTick異常,并且搶占了該ISR。(7)OS執(zhí)行必要的操作,然后懸起PendSV異常以作好上下文切換的準備。(8)當SysTick退出后,回到先前被搶占的ISR中,ISR繼續(xù)執(zhí)行(9)ISR執(zhí)行完畢并退出后,PendSV服務(wù)例程開始執(zhí)行,并且在里面執(zhí)行上下文切換(10)當PendSV執(zhí)行完畢后,回到任務(wù)A,同時系統(tǒng)再次進入線程模式
6、時間調(diào)度假如:有兩個任務(wù):任務(wù)1的優(yōu)先級高于任務(wù)2任務(wù)1void Task1(void *pdata)pdata = pdata;/ 避免編譯警告while(1)GPIO_SetBits(GPIOF, GPIO_Pin_6);OSTimeDly(100);任務(wù)2void Task2(void *pdata)pdata = pdata;/ 避免編譯警告while(1)GPIO_ResetBits(GPIOF, GPIO_Pin_6);OSTimeDly(80);開始執(zhí)行任務(wù)1 當執(zhí)行到OSTimeDly(100);時,將任務(wù)掛起,然后每個OSTimeDly進行任務(wù)調(diào)度,查找當前最高優(yōu)先級的任務(wù),
7、即任務(wù)2,那么當執(zhí)行到任務(wù)2的 OSTimeDly(80);時,此時任務(wù)一的OSTimeDly(100); 和OSTimeDly(80);是否沖突;請高手指點看到了就回答一下。任務(wù)調(diào)用OSTimeDly后被掛起了,不再占用CPU,你說的沖突是說這個函數(shù)同時被兩個任務(wù)調(diào)用會不會沖突吧,拋棄以前的那種單片機編程吧,調(diào)用OSTimeDly后,延時時間被寫入對應(yīng)任務(wù)的任務(wù)管理塊TCB中,去看看TCB結(jié)構(gòu),里面會有一個參數(shù)來保存延時ticks的。系統(tǒng)定時器中斷會對所有任務(wù)的延時ticks進行減操作,如任務(wù)的ticks減到0并且沒有等待其他資源(如信號量,郵箱等就會加入到就緒隊列等待被調(diào)度器調(diào)度)而不是像
8、我們以前的那種裸機的延時(任務(wù)自己對某一個變量進行減操作來消耗CPU時間),所以不存在你說的沖突,也即是兩個函數(shù)同時在運行OSTimeDly函數(shù)COS-II常用函數(shù)理解COS-II系統(tǒng)創(chuàng)建-標準-常用void VCInit(void);void VCInit(void)HANDLE cp,ct; /句柄Context.ContextFlags = CONTEXT_CONTROL;cp = GetCurrentProcess();/得到當前進程句柄ct = GetCurrentThread();/得到當前線程偽句柄DuplicateHandle(cp, ct, cp, &mainhandle,
9、0, TRUE, 2);/偽句柄轉(zhuǎn)換,得到線程真句柄Z:與句柄相關(guān)的操作,具體作用不明Void OSInit();在uC/OS II的學(xué)習(xí)中,OSInit( );是一個重要的函數(shù),它在OS應(yīng)用中的void main();函數(shù)中首先被調(diào)用,是OS運行的第一個函數(shù),它完成各初始變量的初始化,建立任務(wù)空閑鍵表OSTCBFreeList, 建立事件空閑鍵表OSEventFreeList.創(chuàng)建一個空閑任務(wù)OS_TaskIdle,以及初始化其它如果有用到的功能 Q,MEM等。我個人的理解也是從這里開始的。通過空閑任務(wù)的創(chuàng)建基本上涉及到OS中任務(wù)塊和事件塊的管理。我想這也是理解了OS在內(nèi)核結(jié)構(gòu)上的一半以上。
10、/系統(tǒng)主函數(shù)void main (void)OSInit( );/第一個OS內(nèi)核運行函數(shù).Targetinit( );/目標板初始化.OSTaskCreate(.); / 在OSStart( );前必須至少創(chuàng)建一個任務(wù)OSStart( );/啟動操作系統(tǒng)void OSInit(void)函數(shù)在 SOURCEOS_CPRE.C里,原形如下:Void OSInit(void)OS_InitMisc( ); /完成一般變量初始化OS_InitRdyList( );/就緒列表初始化OS_InitTCBList( );/空閑任務(wù)鍵表OSTCBFreeList建立OS_InitEventList( );/事件空閑鍵表OSEventFreeLi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 休養(yǎng)所老年公寓設(shè)計與運營創(chuàng)新策略考核試卷
- 意外傷害保險與保險行業(yè)的風(fēng)險管理與案例分析研究分析考核試卷
- 家用紡織品的供應(yīng)鏈管理與物流優(yōu)化考核試卷
- 車險理賠合規(guī)培訓(xùn)課件
- 花生銷售合同范本
- 裝修押金轉(zhuǎn)讓合同范本
- 抵押的車位合同范本
- 寄養(yǎng)羊合同范本
- 小學(xué)生態(tài)平衡課件
- 超市促銷培訓(xùn)課件
- 海南省澄邁縣2024-2025學(xué)年七年級上學(xué)期期末考試地理試題(含答案)
- 2025年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 部編人教版五年級下冊小學(xué)數(shù)學(xué)全冊教案
- 2024年世界職業(yè)院校技能大賽高職組“聲樂、器樂表演組”賽項參考試題庫(含答案)
- 2024年共青團入團考試題庫及答案
- 2024解析:第十二章機械效率-講核心(原卷版)
- 2023年國家公務(wù)員錄用考試《申論》真題(副省卷)及答案解析
- 2024-2030年中國醫(yī)療器械維修設(shè)備行業(yè)供需狀況及發(fā)展策略分析報告
- 中國心力衰竭診斷和治療指南2024解讀(完整版)
- 女性健康知識講座課件
- DB11T 1787-2020 二氧化碳排放核算和報告要求 其他行業(yè)
評論
0/150
提交評論