![記事本OsSchTblInit調(diào)度表初始化連續(xù)性_第1頁](http://file4.renrendoc.com/view/6df08acb4c3e673c0ff47f9ef44e1648/6df08acb4c3e673c0ff47f9ef44e16481.gif)
![記事本OsSchTblInit調(diào)度表初始化連續(xù)性_第2頁](http://file4.renrendoc.com/view/6df08acb4c3e673c0ff47f9ef44e1648/6df08acb4c3e673c0ff47f9ef44e16482.gif)
![記事本OsSchTblInit調(diào)度表初始化連續(xù)性_第3頁](http://file4.renrendoc.com/view/6df08acb4c3e673c0ff47f9ef44e1648/6df08acb4c3e673c0ff47f9ef44e16483.gif)
![記事本OsSchTblInit調(diào)度表初始化連續(xù)性_第4頁](http://file4.renrendoc.com/view/6df08acb4c3e673c0ff47f9ef44e1648/6df08acb4c3e673c0ff47f9ef44e16484.gif)
![記事本OsSchTblInit調(diào)度表初始化連續(xù)性_第5頁](http://file4.renrendoc.com/view/6df08acb4c3e673c0ff47f9ef44e1648/6df08acb4c3e673c0ff47f9ef44e16485.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
---osinit---OsCounterInit()---SLIST_INSERT_HEAD()計數(shù)器初始化------osstart()---OsSchTblAutostart()---StartScheduleTableAbs()---OsStartHighRdy()高優(yōu)先級任務(wù)就緒每次時鐘中斷都會調(diào)用時鐘服務(wù)程序OSTimeTick(),該函數(shù)都會讓所有處于延時狀態(tài)的任務(wù)減少一個Tick,并尋找延時為0的所有任務(wù)中優(yōu)先級的任務(wù),將其就緒。計數(shù)器計時函數(shù)也包含在OSTimeTick內(nèi),每次時鐘中斷調(diào)用OStimeTick時則將計數(shù)器計數(shù)值1,并對調(diào)度表進行Check,當(dāng)配置的終結(jié)點的Tick值=OScounter時,則開始執(zhí)行該終結(jié)}在os_core中不插入代碼,只在os_init()Os_SchTblInit(),在OsTimeTick()Os_Tick()OsTimeTick()將延1,此時通過調(diào)用Os_Tick()Tick1,并且CheckTick值同預(yù)先配置的EP對應(yīng)的Tick值進行比較,如果兩者相同,則開始執(zhí)行調(diào)度表中的任務(wù)或者設(shè)置等。對各個文件進行分類,加入os_config_macros.h,os.h和os_cfg.h等頭文件,根據(jù)函數(shù)的具體需求調(diào)用其他函數(shù),避免因函數(shù)種類,降低了開發(fā)難度。系統(tǒng)的具體配置均放在os_cfg.cEP的個數(shù),每個EP對應(yīng)的offset,調(diào)度表所關(guān)聯(lián)的計數(shù)器等,其他參數(shù)放置在os_cfg.h頭文件中,比如計數(shù)器個數(shù),計數(shù)器名稱定義,調(diào)度表個數(shù)等。1.目前暫時不考慮時間機制,因此os_SchTblCheck()中將機制部分刪除。另外刪除對同2個EP2,8個Tick,如果直接將OsTimeTick()Time++當(dāng)作Tick8過后,即使在配置文件中設(shè)置為repeating和duration10時,仍然有。因此必須將Time和Tick的概念區(qū)別開來。(看代碼后,認(rèn)為OsTimeTick()Time和OsTick()中的計數(shù)值沒有必然的聯(lián)系,計數(shù)值通過 dd()curr<=max,則val+1;val=0,即又開始從頭2:在原來UCOS中有ostime.c其中有個獲取當(dāng)前時間的一個函數(shù)叫OsTimeGet(),然后讓Ticks=Time,因為在oscore.c中的中斷服務(wù)程序函數(shù)OStimeTick()Time++,是不是每次每次Time++后,這邊的tick也跟著++。如果要和OScounter關(guān)聯(lián)起來,怎么樣銜接一個指向整型的指針變量=OsTimeGet()tick,其中tick也是整型,INT32UTick;}2個EP,分別為EP1(20個offset,A15),EP2(80個offset,B10)21(20),任2(21)。系統(tǒng)啟動時會先尋早優(yōu)先級較高的任務(wù)并開始執(zhí)行,即系統(tǒng)開始后會220個時鐘滴答時,OsTick()OsSchTblCheck(),偵測到當(dāng)前的計數(shù)器值等于第一個EP所對應(yīng)的offsetEP12掛起,執(zhí)行優(yōu)先級低的A任務(wù)。當(dāng)A2,802執(zhí)行完畢,那么系統(tǒng)將尋找當(dāng)前的優(yōu)先級最高的任務(wù),即1280個時鐘滴答時,同樣這EP所對應(yīng)的offset1掛起,去執(zhí)行優(yōu)先級低的B任務(wù)。我在一個結(jié)構(gòu)體里面有個表示計數(shù)器值的整型變量value,當(dāng)?shù)谝淮问褂谜咦兞康臅r候并沒有對他賦值,而是val=val+1,這樣的話,val2么?第一次進入OsTick()時,對計數(shù)器初始化,然后當(dāng)前val賦值。OsCounterTypeint //將計數(shù)器中的valfirst_val=OSTimeGet();}else //經(jīng)過初始化后的OSTime=0,11OsTick()val}在系統(tǒng)初始化時OS_InitMisc(),會對當(dāng)前時鐘計數(shù),即OSTime=0,此后在OSTimeTick()OSTime++OSTime=1OSTick()val=1,再通過表達(dá)cPtr->val=Os_Coundd(cPtr->val,OsCounterGetMaxValue(cPtr),1)val1=2,與系統(tǒng)時1個時鐘滴答的出入,因此cPtr->val=0。在首次啟動系統(tǒng)時,Os_SchTblInit()調(diào)用目前調(diào)度表連續(xù)性檢查函數(shù)=+根據(jù)代碼,當(dāng)c_p->valsTblPtr->expire_val時,第一個EP當(dāng)?shù)谝粋€EP處理后,在Os_SchTblUpdateState(OsSchTblType*stbl中將和expire_val在ucos_ii.h中定義oscounter的結(jié)構(gòu)體,并加入#if預(yù)編譯(#if 在OsCore.c中加入OsTick(),在寫OsCoundd()時加入了預(yù)編譯, T在OsCfg.h中定義,同時MAXALLOWVALUE也在OsCfg.h中定義。Error:C1008:Typedefnameexpected問題解決:添加頭文件“os_cpu.h”,因為該頭文件中LinkerrorOsTick()inoscore.c.oisundefine問題解決,當(dāng)ostick()c文件時,在oscore中要取消其oscore中的函數(shù),并且在ostick()所在C文件中,不要加static在C- 中模擬了當(dāng)計數(shù)器值=當(dāng)前EP的offset時,依次處理EP中的任務(wù)。但是存在一個問題,即目前在EP結(jié)構(gòu)體定義中固定了任務(wù)的個數(shù),需日后解決。上述問題已經(jīng)解決:在os_cfg.h#define //在Os_SchTblCheck()if(sched_obj->expire_curr_indexT)//如果當(dāng)前處理的EP小于EP *int//指向當(dāng)前EP鏈表的中的將被處理的 //指向EPEPfor(i=0;i<SIZE_OF_ARRAY(action->Tasklist);i++){}Externschedtbl.h中進行定義結(jié)構(gòu)體,在os_cfg.c中配置結(jié)構(gòu)體中具體參數(shù),當(dāng)其他c文件里面的函數(shù),需要調(diào)用os_cfg.c中的結(jié)構(gòu)體中的參數(shù)時,在該函數(shù)之前進行變量。如:externstructos_schedtbllist[];Linkerror1808:Os_CounterGetValue()…duplicatedinschedtbl.candcounter.c;解決該問題的解決辦法,在Os_Coun dd()函數(shù)定義前面加上static修飾符。Linkerror:OsCoun dd()…inCounter.cundefined;解決辦法,一般是函數(shù)名錯誤,找不到在配置文件中,配置好調(diào)度表鏈表,每個調(diào)度表結(jié)構(gòu)體中包含了一個EP結(jié)構(gòu)體的數(shù)組,每個EP結(jié)構(gòu)體里又包含了offset和任務(wù)的優(yōu)先等級,Os_SchTblGetInitialOffset(int16id)中,id是調(diào)度表的編號,系統(tǒng)運行時根據(jù)調(diào)度表的id該結(jié)構(gòu)體中的各項參數(shù)。Os_SchTblGetFinalOffset(_int16id)同樣如此,但是通過一個if函數(shù)判定EP結(jié)構(gòu)體鏈表中下一個結(jié)構(gòu)體中的offset0EP的offset。staticint16 Os_SchTblGetFinalOffset(int16id){structOsSched*Sptr;structOsScheduleTableExpiryPoint*ep; //此處增加調(diào)度表id,根據(jù)id{}return(ep->offset);#defineGEN_SCHTBL_AUTOSTART_NAME(_id)&AutoStart_##_id#defineGEN_SCHTBL_AUTOSTART(_id,_type,_offset)\structautostart}2015.04.07Dailiangyu:配置調(diào)度表時,指向下一個調(diào)度表的指針*next在初始化時可以這2015.04.10考慮將EP結(jié)構(gòu)體中的INT16UTasklist[]INT16U*TaskList(*TaskList指向該EPTasks數(shù)組地址)#defineGEN_SCHTBL_EXPIRY_POINT_HEAD(id)OsScheduleTableExpiryPointType //到期點結(jié)構(gòu)體數(shù)組宏#defineGEN_SCHTBL_EXPIRY_POINT_W_TASK_EVENT(_id,_offset)structOsScheduleTableExpiryPointEP_##_id={.Tasklist=Os_SchTblTaskList_##_id##_##t=ARRAY_SIZE(Os_SchTblTaskList_##_id##_##}#defineGEN_SCHTBL_TASK_LIST_HEAD(_id,_offset)\constTaskTypeOs_SchTblTaskList_##_id##_##_offset[]#defineGEN_SCHTBL_EP_LIST(_id) &Os_SchTblExpPointList_##_id//EP結(jié)構(gòu)體數(shù)組地址//EP//某個調(diào)度表中的EPGEN_SCHTBL_EXPIRY_POINT_W_TASK_EVENT(0,10),GEN_SCHTBL_EXPIRY_POINT_W_TASK_EVENT(0,20)}structOsSched{int16//修改為:INT16U*expire_list;structos_counter*counter;#defineGEN_SCHTBL(_id,_expire_list_ref)\structOsSched }struct //第一個EP_offset=2 //任務(wù)優(yōu)先級分別為 //第二個任務(wù) //任務(wù)優(yōu)先級分別},//修改為 //12015.04.13 pleted_2015.04.13.cOsCounter結(jié)構(gòu)體中的Int16valOsTick()val賦值,因為默認(rèn)的val=0OsTick()中,可以這樣:IntOsCounterType在第一次調(diào)用時,因為沒有對i0作為默認(rèn)值,所以可以直接C語言是從上往下運行,所以在函數(shù)調(diào)用時,被調(diào)用的函數(shù)在下面,則需要在
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年纖維球精密過濾器項目可行性研究報告
- 2025年電力球監(jiān)控系統(tǒng)項目可行性研究報告
- 2025至2031年中國溶劑綠行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國標(biāo)準(zhǔn)型捆包機行業(yè)投資前景及策略咨詢研究報告
- 2025年掛墻式燈箱項目可行性研究報告
- 2025至2031年中國噴鋁卡行業(yè)投資前景及策略咨詢研究報告
- 2025年雙面防粘紙項目可行性研究報告
- 2025年全自動電加熱器項目可行性研究報告
- 2025至2030年中國駐極體傳聲器數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國靜電噴漆成套設(shè)備數(shù)據(jù)監(jiān)測研究報告
- 綜采工作面過空巷安全技術(shù)措施
- 云南省麗江市2025屆高三上學(xué)期復(fù)習(xí)統(tǒng)一檢測試題 物理 含解析
- 建材材料合作合同范例
- 2025年集體經(jīng)濟發(fā)展計劃
- 數(shù)據(jù)安全重要數(shù)據(jù)風(fēng)險評估報告
- 病歷書寫規(guī)范細(xì)則(2024年版)
- 2024-2025學(xué)年人教版八年級上冊地理期末測試卷(二)(含答案)
- 做賬實操-牙科診所的賬務(wù)處理
- 雙方共同買車合同范例
- 01-衛(wèi)生法學(xué)與衛(wèi)生法概述課件
- 汽車智能制造技術(shù)課件
評論
0/150
提交評論