版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
嵌入式系統(tǒng)及應(yīng)用嵌入式系統(tǒng)及應(yīng)用1第七章
時(shí)間管理第七章
時(shí)間管理2主要內(nèi)容硬件時(shí)鐘設(shè)備時(shí)間管理主要內(nèi)容硬件時(shí)鐘設(shè)備3時(shí)間管理一般具有以下功能:維持日歷時(shí)間;任務(wù)有限等待的計(jì)時(shí);軟定時(shí)器的定時(shí)管理;維持系統(tǒng)時(shí)間片輪轉(zhuǎn)調(diào)度。時(shí)間管理時(shí)間管理一般具有以下功能:時(shí)間管理4硬件時(shí)鐘設(shè)備
大多數(shù)嵌入式系統(tǒng)有兩種時(shí)鐘源:實(shí)時(shí)時(shí)鐘(realtimeclock,RTC)定時(shí)器/計(jì)數(shù)器實(shí)時(shí)時(shí)鐘:一般靠電池供電,即使系統(tǒng)斷電,也可以維持日期和時(shí)間。實(shí)時(shí)時(shí)鐘獨(dú)立于操作系統(tǒng),所以也被稱為硬件時(shí)鐘,為整個(gè)系統(tǒng)提供一個(gè)計(jì)時(shí)標(biāo)準(zhǔn)。定時(shí)器/計(jì)數(shù)器:實(shí)時(shí)內(nèi)核需要一個(gè)定時(shí)器作為系統(tǒng)時(shí)鐘(或稱OS時(shí)鐘),并由實(shí)時(shí)內(nèi)核控制系統(tǒng)時(shí)鐘工作。一般情況下,系統(tǒng)時(shí)鐘的最小粒度是由應(yīng)用和操作系統(tǒng)的特點(diǎn)決定的。硬件時(shí)鐘設(shè)備大多數(shù)嵌入式系統(tǒng)有兩種時(shí)鐘源:5三星44B0X(ARM7)芯片中的RTC在系統(tǒng)沒有上電的情況下,可由后備電池供電;可以通過ARM的STRB/LDRB操作獲取RTC以二進(jìn)制編碼的十進(jìn)制數(shù)據(jù)格式向CPU提供8比特?cái)?shù)據(jù)。數(shù)據(jù)包含秒、分、小時(shí)、日、月和年等內(nèi)容;使用一個(gè)外部的32.768KHz晶振;包括一個(gè)閏年產(chǎn)生器;提供告警中斷或是從掉電模式中喚醒的告警功能:;能夠避免2000年問題(即千年蟲問題);獨(dú)立的電源引腳;能夠?yàn)閷?shí)時(shí)內(nèi)核的系統(tǒng)時(shí)鐘提供毫秒級(jí)的時(shí)間中斷;能夠進(jìn)行循環(huán)復(fù)位。TimeTickGenerator26ClockDividerResetRegisterLeapYearGeneratorSECMINHOURDATEDAYMONYEARAlarmGeneratorControlRegister128Hz1HzRTCRSTTIMETICKRTCCONPMWKUPPWDNALMNTRTCALMTICNTXTALEXTAL三星44B0X(ARM7)芯片中的RTCTimeTick6硬件時(shí)鐘設(shè)備在不同的操作系統(tǒng)中,實(shí)時(shí)時(shí)鐘和系統(tǒng)時(shí)鐘之間的關(guān)系是不同的。實(shí)時(shí)時(shí)鐘和系統(tǒng)時(shí)鐘之間的關(guān)系通常也被稱作操作系統(tǒng)的時(shí)鐘運(yùn)作機(jī)制。一般來說,實(shí)時(shí)時(shí)鐘是系統(tǒng)時(shí)鐘的時(shí)間基準(zhǔn),實(shí)時(shí)內(nèi)核通過讀取實(shí)時(shí)時(shí)鐘來初始化系統(tǒng)時(shí)鐘,此后二者保持同步運(yùn)行,共同維系系統(tǒng)時(shí)間。系統(tǒng)時(shí)鐘并不是本質(zhì)意義上的時(shí)鐘,只有當(dāng)系統(tǒng)運(yùn)行起來以后才有效,并且由實(shí)時(shí)內(nèi)核完全控制。硬件時(shí)鐘設(shè)備在不同的操作系統(tǒng)中,實(shí)時(shí)時(shí)鐘和系統(tǒng)時(shí)鐘之間的關(guān)系7硬件時(shí)鐘設(shè)備從硬件的角度來看,定時(shí)器(timer)和計(jì)數(shù)器(counter)的概念是可以互換的,其差別主要體現(xiàn)在硬件在特定應(yīng)用中的使用情況。硬件時(shí)鐘設(shè)備從硬件的角度來看,定時(shí)器(timer)和計(jì)數(shù)器(8一個(gè)簡(jiǎn)單的定時(shí)器/計(jì)數(shù)器包含一個(gè)可裝入的8位計(jì)數(shù)寄存器,一個(gè)時(shí)鐘輸入信號(hào)和一個(gè)輸出脈沖。通過軟件可以把一個(gè)位于0x00和0xFF之間的初始數(shù)據(jù)轉(zhuǎn)入到計(jì)數(shù)寄存器。隨后的每一個(gè)時(shí)鐘輸入信號(hào)都會(huì)導(dǎo)致該值被增加。當(dāng)8位計(jì)數(shù)器溢出時(shí),就產(chǎn)生輸出脈沖。輸出脈沖可以用來觸發(fā)處理器上的一個(gè)中斷,或是在處理器能夠讀取的地方設(shè)置一個(gè)二進(jìn)制位。輸出脈沖是操作系統(tǒng)時(shí)鐘的硬件基礎(chǔ),是因?yàn)檩敵雒}沖將送到中斷控制器上,產(chǎn)生中斷信號(hào),觸發(fā)時(shí)鐘中斷,由時(shí)鐘中斷服務(wù)程序維持操作系統(tǒng)時(shí)鐘的正常工作。為了重啟定時(shí)器,軟件需要重新裝入一個(gè)相同或不同的初始數(shù)據(jù)到計(jì)數(shù)寄存器。
一個(gè)簡(jiǎn)單的定時(shí)器/計(jì)數(shù)器9硬件時(shí)鐘設(shè)備在一個(gè)典型的計(jì)數(shù)器中,當(dāng)初始數(shù)據(jù)被裝入后,可以使用一定的方式來啟動(dòng)計(jì)數(shù)器。并且,一個(gè)實(shí)際的計(jì)數(shù)器也需要為處理器提供一種通過數(shù)據(jù)總線讀取計(jì)數(shù)寄存器當(dāng)前值的方式。如果希望定時(shí)器能夠自動(dòng)重新裝入初始數(shù)據(jù),就需要一個(gè)鎖存寄存器,以保存處理器所寫入的計(jì)數(shù)數(shù)據(jù)。當(dāng)處理器向鎖存寄存器寫入數(shù)據(jù)時(shí),計(jì)數(shù)寄存器也被寫入了該數(shù)據(jù)。定時(shí)器溢出時(shí),定時(shí)器產(chǎn)生輸出脈沖,然后自動(dòng)把鎖存寄存器中的數(shù)據(jù)重新裝入到計(jì)數(shù)寄存器。由于鎖存寄存器仍然擁有處理器寫入的數(shù)據(jù),計(jì)數(shù)器將從同樣的初始數(shù)據(jù)重新開始進(jìn)行計(jì)數(shù)。這樣的定時(shí)器能夠產(chǎn)生與時(shí)鐘具有相同精度的規(guī)則性輸出。輸出脈沖產(chǎn)生的周期性中斷可以用于實(shí)時(shí)內(nèi)核需要的tick,或是為UART提供一個(gè)波特率時(shí)鐘,或是驅(qū)動(dòng)需要規(guī)則脈沖的設(shè)備。硬件時(shí)鐘設(shè)備在一個(gè)典型的計(jì)數(shù)器中,當(dāng)初始數(shù)據(jù)被裝入后,可以使10時(shí)間管理
實(shí)時(shí)內(nèi)核的時(shí)間管理以系統(tǒng)時(shí)鐘為基礎(chǔ),系統(tǒng)時(shí)鐘一般定義為整數(shù)或長(zhǎng)整數(shù),提供給應(yīng)用程序所有和時(shí)間有關(guān)的服務(wù)。系統(tǒng)時(shí)鐘是由定時(shí)/計(jì)數(shù)器產(chǎn)生的輸出脈沖觸發(fā)中斷而產(chǎn)生的。輸出脈沖的周期叫做一個(gè)“時(shí)鐘滴答”,也稱為時(shí)標(biāo)、tick。時(shí)間管理實(shí)時(shí)內(nèi)核的時(shí)間管理以系統(tǒng)時(shí)鐘為基礎(chǔ),系統(tǒng)時(shí)鐘一般定11時(shí)間管理tick為系統(tǒng)的相對(duì)時(shí)間單位,也被稱為系統(tǒng)的時(shí)基,來源于定時(shí)器的周期性中斷,一次中斷表示一個(gè)tick。一個(gè)tick與具體時(shí)間的對(duì)應(yīng)關(guān)系可在初始化定時(shí)器時(shí)設(shè)定,也就是說,tick所對(duì)應(yīng)的具體時(shí)間長(zhǎng)度是可以調(diào)整的。一般來說,實(shí)時(shí)內(nèi)核都提供相應(yīng)的調(diào)整機(jī)制,應(yīng)用可以根據(jù)特定情況改變tick對(duì)應(yīng)的時(shí)間長(zhǎng)度。例如,可以使系統(tǒng)5毫秒產(chǎn)生一個(gè)tick,也可以是10毫秒產(chǎn)生一個(gè)tick。tick的大小決定了整個(gè)系統(tǒng)的時(shí)間粒度。時(shí)間管理tick為系統(tǒng)的相對(duì)時(shí)間單位,也被稱為系統(tǒng)的時(shí)基,來12時(shí)間管理通常來說,實(shí)時(shí)內(nèi)核提供以下主要與時(shí)間相關(guān)的管理:維持相對(duì)時(shí)間(時(shí)間單位為tick)和日歷時(shí)間;任務(wù)有限等待的計(jì)時(shí);定時(shí)功能;時(shí)間片輪轉(zhuǎn)調(diào)度的計(jì)時(shí)。時(shí)間管理通常來說,實(shí)時(shí)內(nèi)核提供以下主要與時(shí)間相關(guān)的管理:13voidOSTimeDly(INT16Uticks){/*AllocatestorageforCPUstatusregister*/#ifOS_CRITICAL_METHOD==3OS_CPU_SRcpu_sr;#endifif(ticks>0){/*0meansnodelay!*/OS_ENTER_CRITICAL();if((OSRdyTbl[OSTCBCur->OSTCBY]&=~OSTCBCur->OSTCBBitX)==0){/*Delaycurrenttask*/OSRdyGrp&=~OSTCBCur->OSTCBBitY;}OSTCBCur->OSTCBDly=ticks;/*LoadticksinTCB*/OS_EXIT_CRITICAL();OS_Sched();/*Findnexttasktorun!*/}}OSTimeDlyUnderuC/OS-IIvoidOSTimeDly(INT16Uticks)14theresolutionofadelayisbetween0and1tick.Inotherwords,ifyoutrytodelayforonlyonetick,youcouldendupwithadelaybetween0and1tick.theresolutionofadelayisb15時(shí)間管理管理功能是通過tick處理程序來實(shí)現(xiàn)的。定時(shí)器發(fā)生中斷后,執(zhí)行系統(tǒng)時(shí)鐘中斷處理程序,并在中斷處理程序中調(diào)用tick處理程序,實(shí)現(xiàn)系統(tǒng)中與時(shí)間和定時(shí)相關(guān)的操作。tick處理程序作為實(shí)時(shí)內(nèi)核的一部分,與具體的定時(shí)器/計(jì)數(shù)器硬件無關(guān),由系統(tǒng)時(shí)鐘中斷處理程序調(diào)用,使實(shí)時(shí)內(nèi)核具有對(duì)不同定時(shí)器/計(jì)數(shù)器硬件的適應(yīng)性。時(shí)間管理管理功能是通過tick處理程序來實(shí)現(xiàn)的。16…tick處理程序……相對(duì)時(shí)間處理…任務(wù)時(shí)間片處理…時(shí)間等待鏈處理…軟件定時(shí)器處理…日歷時(shí)間處理…任務(wù)調(diào)度處理系統(tǒng)時(shí)鐘中斷服務(wù)程序tick處理程序tick處理程序……系統(tǒng)時(shí)鐘中斷服務(wù)程序tick處理程序tick處理程17voidOSTickISR(void){Saveprocessorregisters;CallOSIntEnter()orincrementOSIntNesting;if(OSIntNesting==1){OSTCBCur->OSTCBStkPtr=SP;}CallOSTimeTick();Clearinterruptingdevice;Re-enableinterrupts(optional);CallOSIntExit();Restoreprocessorregisters;Executeareturnfrominterruptinstruction;}TickUnderuC/OS-IIvoidOSTickISR(void)TickUnder18voidOSTimeTick(void){#ifOS_CRITICAL_METHOD==3OS_CPU_SRcpu_sr;#endifOS_TCB*ptcb;OSTimeTickHook();(1)#ifOS_TIME_GET_SET_EN>0OS_ENTER_CRITICAL();OSTime++;(2)OS_EXIT_CRITICAL();#endifif(OSRunning==TRUE){ptcb=OSTCBList;(3)while(ptcb->OSTCBPrio!=OS_IDLE_PRIO){(4)OS_ENTER_CRITICAL();if(ptcb->OSTCBDly!=0){if(--ptcb->OSTCBDly==0){if((ptcb->OSTCBStat&OS_STAT_SUSPEND)==0x00){(5)OSRdyGrp|=ptcb->OSTCBBitY;(6)OSRdyTbl[ptcb->OSTCBY]|=ptcb->OSTCBBitX;}else{ptcb->OSTCBDly=1;}}}ptcb=ptcb->OSTCBNext;OS_EXIT_CRITICAL();}}}voidOSTimeTick(void)19voidTickTask(void*pdata){pdata=pdata;for(;;){OSMboxPend(...);/*WaitforsignalfromTickISR*/OSTimeTick();OS_Sched();}}voidOSTickISR(void){Saveprocessorregisters;CallOSIntEnter()orincrementOSIntNesting;if(OSIntNesting==1){OSTCBCur->OSTCBStkPtr=SP;}Posta'dummy'message(e.g.(void*)1)tothetickmailbox;CallOSIntExit();Restoreprocessorregisters;Executeareturnfrominterruptinstruction;}TickUnderuC/OS-IIbasedonDSRvoidTickTask(void*pdata)voi20
OSTickISRPROCFARPUSHA;Saveinterruptedtask'scontextPUSHESPUSHDSMOVAX,SEG_OSIntNesting;ReloadDSMOVDS,AXINCBYTEPTR_OSIntNesting;NotifyuC/OS-IIofISRINT081H;ChainintoDOS'stickISRCALLFARPTR_OSTimeTick;ProcesssystemtickCALLFARPTR_OSIntExit;NotifyuC/OS-IIofendofISRPOPDS;Restoreinterruptedtask'scontextPOPESPOPAIRET;Returntointerruptedtask_OSTickISRENDPOSTickISRUnder80x86OSTickISRPROCFAROSTickIS21時(shí)間管理相對(duì)時(shí)間即系統(tǒng)時(shí)間,是指相對(duì)于系統(tǒng)啟動(dòng)以來的時(shí)間,以tick為單位,每發(fā)生一個(gè)tick,對(duì)系統(tǒng)的相對(duì)時(shí)間進(jìn)行一次加1操作。實(shí)時(shí)內(nèi)核根據(jù)tick對(duì)應(yīng)的時(shí)間長(zhǎng)度,可以把相對(duì)時(shí)間轉(zhuǎn)換為以秒或是毫秒為單位的其他時(shí)間格式,并可根據(jù)實(shí)時(shí)時(shí)鐘獲得日歷時(shí)間。如果對(duì)任務(wù)設(shè)置了時(shí)間片處理方式,需要在tick處理程序中對(duì)當(dāng)前正在運(yùn)行的任務(wù)的已執(zhí)行時(shí)間進(jìn)行更新,使任務(wù)的已執(zhí)行時(shí)間數(shù)值加1。執(zhí)行加1操作后,如果任務(wù)的已執(zhí)行時(shí)間同任務(wù)的時(shí)間片相等,表示任務(wù)使用完一個(gè)時(shí)間片的執(zhí)行時(shí)間,需要結(jié)束當(dāng)前任務(wù)的執(zhí)行,設(shè)置調(diào)度標(biāo)志,把當(dāng)前任務(wù)放置到就緒鏈。時(shí)間管理相對(duì)時(shí)間即系統(tǒng)時(shí)間,是指相對(duì)于系統(tǒng)啟動(dòng)以來的時(shí)間,以22時(shí)間管理時(shí)間等待鏈用來存放需要延遲處理的對(duì)象:產(chǎn)生tick后,需要對(duì)時(shí)間等待鏈中的對(duì)象的剩余等待時(shí)間值進(jìn)行處理。對(duì)于時(shí)間等待的對(duì)象,通常都被組織為差分鏈表的方式進(jìn)行管理,以有效降低時(shí)間等待對(duì)象的管理開銷。在時(shí)間差分鏈中,每個(gè)表項(xiàng)所包含的計(jì)時(shí)值并非當(dāng)前時(shí)刻到表項(xiàng)激活時(shí)刻的絕對(duì)計(jì)數(shù),而是該表項(xiàng)和先于它的所有表項(xiàng)的計(jì)數(shù)值之和。時(shí)間管理時(shí)間等待鏈用來存放需要延遲處理的對(duì)象:233A2B5C4D3A2B3C4D2EA對(duì)象需要等待3個(gè)時(shí)間單位就應(yīng)被激活B對(duì)象需要等待5(3+2)個(gè)時(shí)間單位就應(yīng)被激活C對(duì)象需要等待10(3+2+5)個(gè)時(shí)間單位就應(yīng)被激活D對(duì)象需要等待14(3+2+5+4)個(gè)時(shí)間單位就應(yīng)被激活7E差分鏈由于7-3-2=2,而7-3-2-5=-3,因此E對(duì)象需要插入到差分鏈中介于對(duì)象B和對(duì)象C之間的位置。3A2B5C4D3A2B3C4D2EA對(duì)象需要等待3個(gè)時(shí)間單24時(shí)間管理對(duì)于差分時(shí)間鏈,系統(tǒng)每接收到一個(gè)tick,就修訂鏈?zhǔn)讓?duì)象的時(shí)間值。如果鏈表對(duì)象的時(shí)間單位為tick,則每發(fā)生一個(gè)tick,鏈?zhǔn)讓?duì)象的時(shí)間值就減1,當(dāng)減到0時(shí),鏈?zhǔn)讓?duì)象就被激活,并從差分時(shí)間鏈中取下來,下一個(gè)對(duì)象又成為鏈?zhǔn)讓?duì)象。時(shí)間管理對(duì)于差分時(shí)間鏈,系統(tǒng)每接收到一個(gè)tick,就修訂鏈?zhǔn)?5時(shí)間管理為實(shí)現(xiàn)定時(shí)功能,實(shí)時(shí)內(nèi)核需要提供軟件定時(shí)器管理功能,應(yīng)用程序可根據(jù)需要?jiǎng)?chuàng)建、使用軟件定時(shí)器。軟件定時(shí)器在創(chuàng)建時(shí),由用戶提供定時(shí)值,當(dāng)軟件定時(shí)器的定時(shí)值減法計(jì)數(shù)為0時(shí),觸發(fā)定時(shí)器服務(wù)例程。用戶可在此例程中完成自己需要的操作。在tick處理程序中需要對(duì)軟件定時(shí)器的定時(shí)值進(jìn)行減1操作,并在定時(shí)值為0時(shí),觸發(fā)掛接在該定時(shí)器上的服務(wù)例程。時(shí)間管理為實(shí)現(xiàn)定時(shí)功能,實(shí)時(shí)內(nèi)核需要提供軟件定時(shí)器管理功能,26時(shí)間管理軟件定時(shí)器可用于實(shí)現(xiàn)“看門狗”(watchdog)。在應(yīng)用的某個(gè)地方進(jìn)行軟件定時(shí)器的停止計(jì)時(shí)操作,確保定時(shí)器在系統(tǒng)正常運(yùn)行的情況下不會(huì)到期,即不會(huì)觸發(fā)定時(shí)器服務(wù)例程;如果某個(gè)時(shí)候系統(tǒng)進(jìn)入了定時(shí)器服務(wù)例程,就表示使用停止計(jì)時(shí)操作的地方?jīng)]有執(zhí)行到,系統(tǒng)出現(xiàn)了錯(cuò)誤。如果需要進(jìn)行任務(wù)的重調(diào)度,tick處理程序還需要調(diào)用調(diào)度程序進(jìn)行任務(wù)調(diào)度處理,使需要執(zhí)行的下一個(gè)任務(wù)獲得對(duì)CPU的控制。時(shí)間管理軟件定時(shí)器可用于實(shí)現(xiàn)“看門狗”(watchdog)。27時(shí)間管理在時(shí)間方面,內(nèi)核通常提供以下功能:設(shè)置系統(tǒng)時(shí)間。使應(yīng)用能夠設(shè)置當(dāng)前系統(tǒng)的日期和時(shí)間。獲得系統(tǒng)時(shí)間。以日歷時(shí)間、系統(tǒng)啟動(dòng)以來所經(jīng)歷的tick數(shù)等形式獲得當(dāng)前的系統(tǒng)時(shí)間。維護(hù)系統(tǒng)時(shí)基、處理定時(shí)事件。通過時(shí)鐘中斷,維持系統(tǒng)日志時(shí)間、任務(wù)延遲時(shí)間、超時(shí)、單調(diào)速率周期、實(shí)現(xiàn)時(shí)間片等內(nèi)容。時(shí)間管理在時(shí)間方面,內(nèi)核通常提供以下功能:28typedefstruct{unsigned32year;/*year*/unsigned32month;/*month,1-12*/unsigned32day;/*day,1-31*/unsigned32hour;/*hour,0-23*/unsigned32minute;/*minute,0-59*/unsigned32second;/*second,0-59*/unsigned32ticks;/*elapsedticksbetweensecs*/}TOD;/*TimeOfDay*/日歷時(shí)間數(shù)據(jù)結(jié)構(gòu)typedefstruct日歷時(shí)間數(shù)據(jù)結(jié)構(gòu)29INT32UOSTimeGet(void){INT32Uticks;OS_ENTER_CRITICAL();ticks=OSTime;OS_EXIT_CRITICAL();return(ticks);}voidOSTimeSet(INT32Uticks){OS_ENTER_CRITICAL();OSTime=ticks;OS_EXIT_CRITICAL();}OSTimeGetandOSTimeSet
UnderuC/OS-IIOSTimeGetandOSTimeSetUnder30時(shí)間管理在定時(shí)方面,內(nèi)核通常提供以下功能:創(chuàng)建軟件定時(shí)器。分配一個(gè)定時(shí)器數(shù)據(jù)結(jié)構(gòu),創(chuàng)建一個(gè)軟件定時(shí)器,并為這個(gè)定時(shí)器分配用戶指定的名字。新創(chuàng)建的定時(shí)器沒有被激活,且沒有相應(yīng)的定時(shí)器服務(wù)例程。軟件定時(shí)器創(chuàng)建成功后,將為該定時(shí)器分配一個(gè)ID標(biāo)識(shí)。時(shí)間管理在定時(shí)方面,內(nèi)核通常提供以下功能:31typedefstruct{timer_class class;timer_state state;timer_time initial;timer_time timeRemain;timer_time startTime;timer_service_routine_entry handler;void *usrData;attribute type;unsigned32 repeatCount;unsigned32 repeatRemain;}timerInformation;軟件定時(shí)器數(shù)據(jù)結(jié)構(gòu)class表示所創(chuàng)建定時(shí)器的觸發(fā)時(shí)間類型,可以是相對(duì)時(shí)間觸發(fā),也可以是絕對(duì)時(shí)間觸發(fā)。state表示定時(shí)器的當(dāng)前狀態(tài),可以是活動(dòng)狀態(tài)、非活動(dòng)狀態(tài)或是中間狀態(tài)(如正在進(jìn)行計(jì)時(shí)鏈表的插入操作)。interval表示觸發(fā)時(shí)間間隔。timeRemain表示剩余的觸發(fā)時(shí)間。startTime表示自系統(tǒng)啟動(dòng)以來所經(jīng)歷的時(shí)間。handler表示定時(shí)器需要觸發(fā)的服務(wù)例程。usrData表示需要觸發(fā)的服務(wù)例程的參數(shù)。type表示定時(shí)器的觸發(fā)類型,可以是單次觸發(fā)、多次觸發(fā)或是周期性觸發(fā)。repeatCount表示多次觸發(fā)時(shí)重復(fù)觸發(fā)的次數(shù)。repeatRemain表示多次觸發(fā)情況下的剩余觸發(fā)次數(shù)typedefstruct軟件定時(shí)器數(shù)據(jù)結(jié)構(gòu)32時(shí)間管理啟動(dòng)軟件定時(shí)器。使定時(shí)器在給定的時(shí)間過去后,觸發(fā)定時(shí)器服務(wù)例程。對(duì)于軟件定時(shí)器,通常還可以指定是單次觸發(fā)還是周期觸發(fā)。在單次觸發(fā)中,只觸發(fā)執(zhí)行一次掛接的定時(shí)服務(wù)例程;周期觸發(fā)則可以在每次觸發(fā)服務(wù)例程后,經(jīng)過相同的時(shí)間間隔又會(huì)觸發(fā)掛接在該定時(shí)器上的服務(wù)例程。使軟件定時(shí)器停止計(jì)時(shí)。使指定的軟件定時(shí)器停止工作。因此,對(duì)應(yīng)的定時(shí)器服務(wù)例程不再被觸發(fā),除非定時(shí)器被重新激活;時(shí)間管理啟動(dòng)軟件定時(shí)器。使定時(shí)器在給定的時(shí)間過去后,觸發(fā)定時(shí)33時(shí)間管理復(fù)位軟件定時(shí)器。把定時(shí)器的定時(shí)值恢復(fù)到原來設(shè)定的值。刪除軟件定時(shí)器。用來刪除一個(gè)軟件定時(shí)器。如果定時(shí)器還在工作,則其自動(dòng)停止。該定時(shí)器對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)被返回給系統(tǒng)。時(shí)間管理復(fù)位軟件定時(shí)器。把定時(shí)器的定時(shí)值恢復(fù)到原來設(shè)定的值。34謝謝!謝謝!35嵌入式系統(tǒng)及應(yīng)用嵌入式系統(tǒng)及應(yīng)用36第七章
時(shí)間管理第七章
時(shí)間管理37主要內(nèi)容硬件時(shí)鐘設(shè)備時(shí)間管理主要內(nèi)容硬件時(shí)鐘設(shè)備38時(shí)間管理一般具有以下功能:維持日歷時(shí)間;任務(wù)有限等待的計(jì)時(shí);軟定時(shí)器的定時(shí)管理;維持系統(tǒng)時(shí)間片輪轉(zhuǎn)調(diào)度。時(shí)間管理時(shí)間管理一般具有以下功能:時(shí)間管理39硬件時(shí)鐘設(shè)備
大多數(shù)嵌入式系統(tǒng)有兩種時(shí)鐘源:實(shí)時(shí)時(shí)鐘(realtimeclock,RTC)定時(shí)器/計(jì)數(shù)器實(shí)時(shí)時(shí)鐘:一般靠電池供電,即使系統(tǒng)斷電,也可以維持日期和時(shí)間。實(shí)時(shí)時(shí)鐘獨(dú)立于操作系統(tǒng),所以也被稱為硬件時(shí)鐘,為整個(gè)系統(tǒng)提供一個(gè)計(jì)時(shí)標(biāo)準(zhǔn)。定時(shí)器/計(jì)數(shù)器:實(shí)時(shí)內(nèi)核需要一個(gè)定時(shí)器作為系統(tǒng)時(shí)鐘(或稱OS時(shí)鐘),并由實(shí)時(shí)內(nèi)核控制系統(tǒng)時(shí)鐘工作。一般情況下,系統(tǒng)時(shí)鐘的最小粒度是由應(yīng)用和操作系統(tǒng)的特點(diǎn)決定的。硬件時(shí)鐘設(shè)備大多數(shù)嵌入式系統(tǒng)有兩種時(shí)鐘源:40三星44B0X(ARM7)芯片中的RTC在系統(tǒng)沒有上電的情況下,可由后備電池供電;可以通過ARM的STRB/LDRB操作獲取RTC以二進(jìn)制編碼的十進(jìn)制數(shù)據(jù)格式向CPU提供8比特?cái)?shù)據(jù)。數(shù)據(jù)包含秒、分、小時(shí)、日、月和年等內(nèi)容;使用一個(gè)外部的32.768KHz晶振;包括一個(gè)閏年產(chǎn)生器;提供告警中斷或是從掉電模式中喚醒的告警功能:;能夠避免2000年問題(即千年蟲問題);獨(dú)立的電源引腳;能夠?yàn)閷?shí)時(shí)內(nèi)核的系統(tǒng)時(shí)鐘提供毫秒級(jí)的時(shí)間中斷;能夠進(jìn)行循環(huán)復(fù)位。TimeTickGenerator26ClockDividerResetRegisterLeapYearGeneratorSECMINHOURDATEDAYMONYEARAlarmGeneratorControlRegister128Hz1HzRTCRSTTIMETICKRTCCONPMWKUPPWDNALMNTRTCALMTICNTXTALEXTAL三星44B0X(ARM7)芯片中的RTCTimeTick41硬件時(shí)鐘設(shè)備在不同的操作系統(tǒng)中,實(shí)時(shí)時(shí)鐘和系統(tǒng)時(shí)鐘之間的關(guān)系是不同的。實(shí)時(shí)時(shí)鐘和系統(tǒng)時(shí)鐘之間的關(guān)系通常也被稱作操作系統(tǒng)的時(shí)鐘運(yùn)作機(jī)制。一般來說,實(shí)時(shí)時(shí)鐘是系統(tǒng)時(shí)鐘的時(shí)間基準(zhǔn),實(shí)時(shí)內(nèi)核通過讀取實(shí)時(shí)時(shí)鐘來初始化系統(tǒng)時(shí)鐘,此后二者保持同步運(yùn)行,共同維系系統(tǒng)時(shí)間。系統(tǒng)時(shí)鐘并不是本質(zhì)意義上的時(shí)鐘,只有當(dāng)系統(tǒng)運(yùn)行起來以后才有效,并且由實(shí)時(shí)內(nèi)核完全控制。硬件時(shí)鐘設(shè)備在不同的操作系統(tǒng)中,實(shí)時(shí)時(shí)鐘和系統(tǒng)時(shí)鐘之間的關(guān)系42硬件時(shí)鐘設(shè)備從硬件的角度來看,定時(shí)器(timer)和計(jì)數(shù)器(counter)的概念是可以互換的,其差別主要體現(xiàn)在硬件在特定應(yīng)用中的使用情況。硬件時(shí)鐘設(shè)備從硬件的角度來看,定時(shí)器(timer)和計(jì)數(shù)器(43一個(gè)簡(jiǎn)單的定時(shí)器/計(jì)數(shù)器包含一個(gè)可裝入的8位計(jì)數(shù)寄存器,一個(gè)時(shí)鐘輸入信號(hào)和一個(gè)輸出脈沖。通過軟件可以把一個(gè)位于0x00和0xFF之間的初始數(shù)據(jù)轉(zhuǎn)入到計(jì)數(shù)寄存器。隨后的每一個(gè)時(shí)鐘輸入信號(hào)都會(huì)導(dǎo)致該值被增加。當(dāng)8位計(jì)數(shù)器溢出時(shí),就產(chǎn)生輸出脈沖。輸出脈沖可以用來觸發(fā)處理器上的一個(gè)中斷,或是在處理器能夠讀取的地方設(shè)置一個(gè)二進(jìn)制位。輸出脈沖是操作系統(tǒng)時(shí)鐘的硬件基礎(chǔ),是因?yàn)檩敵雒}沖將送到中斷控制器上,產(chǎn)生中斷信號(hào),觸發(fā)時(shí)鐘中斷,由時(shí)鐘中斷服務(wù)程序維持操作系統(tǒng)時(shí)鐘的正常工作。為了重啟定時(shí)器,軟件需要重新裝入一個(gè)相同或不同的初始數(shù)據(jù)到計(jì)數(shù)寄存器。
一個(gè)簡(jiǎn)單的定時(shí)器/計(jì)數(shù)器44硬件時(shí)鐘設(shè)備在一個(gè)典型的計(jì)數(shù)器中,當(dāng)初始數(shù)據(jù)被裝入后,可以使用一定的方式來啟動(dòng)計(jì)數(shù)器。并且,一個(gè)實(shí)際的計(jì)數(shù)器也需要為處理器提供一種通過數(shù)據(jù)總線讀取計(jì)數(shù)寄存器當(dāng)前值的方式。如果希望定時(shí)器能夠自動(dòng)重新裝入初始數(shù)據(jù),就需要一個(gè)鎖存寄存器,以保存處理器所寫入的計(jì)數(shù)數(shù)據(jù)。當(dāng)處理器向鎖存寄存器寫入數(shù)據(jù)時(shí),計(jì)數(shù)寄存器也被寫入了該數(shù)據(jù)。定時(shí)器溢出時(shí),定時(shí)器產(chǎn)生輸出脈沖,然后自動(dòng)把鎖存寄存器中的數(shù)據(jù)重新裝入到計(jì)數(shù)寄存器。由于鎖存寄存器仍然擁有處理器寫入的數(shù)據(jù),計(jì)數(shù)器將從同樣的初始數(shù)據(jù)重新開始進(jìn)行計(jì)數(shù)。這樣的定時(shí)器能夠產(chǎn)生與時(shí)鐘具有相同精度的規(guī)則性輸出。輸出脈沖產(chǎn)生的周期性中斷可以用于實(shí)時(shí)內(nèi)核需要的tick,或是為UART提供一個(gè)波特率時(shí)鐘,或是驅(qū)動(dòng)需要規(guī)則脈沖的設(shè)備。硬件時(shí)鐘設(shè)備在一個(gè)典型的計(jì)數(shù)器中,當(dāng)初始數(shù)據(jù)被裝入后,可以使45時(shí)間管理
實(shí)時(shí)內(nèi)核的時(shí)間管理以系統(tǒng)時(shí)鐘為基礎(chǔ),系統(tǒng)時(shí)鐘一般定義為整數(shù)或長(zhǎng)整數(shù),提供給應(yīng)用程序所有和時(shí)間有關(guān)的服務(wù)。系統(tǒng)時(shí)鐘是由定時(shí)/計(jì)數(shù)器產(chǎn)生的輸出脈沖觸發(fā)中斷而產(chǎn)生的。輸出脈沖的周期叫做一個(gè)“時(shí)鐘滴答”,也稱為時(shí)標(biāo)、tick。時(shí)間管理實(shí)時(shí)內(nèi)核的時(shí)間管理以系統(tǒng)時(shí)鐘為基礎(chǔ),系統(tǒng)時(shí)鐘一般定46時(shí)間管理tick為系統(tǒng)的相對(duì)時(shí)間單位,也被稱為系統(tǒng)的時(shí)基,來源于定時(shí)器的周期性中斷,一次中斷表示一個(gè)tick。一個(gè)tick與具體時(shí)間的對(duì)應(yīng)關(guān)系可在初始化定時(shí)器時(shí)設(shè)定,也就是說,tick所對(duì)應(yīng)的具體時(shí)間長(zhǎng)度是可以調(diào)整的。一般來說,實(shí)時(shí)內(nèi)核都提供相應(yīng)的調(diào)整機(jī)制,應(yīng)用可以根據(jù)特定情況改變tick對(duì)應(yīng)的時(shí)間長(zhǎng)度。例如,可以使系統(tǒng)5毫秒產(chǎn)生一個(gè)tick,也可以是10毫秒產(chǎn)生一個(gè)tick。tick的大小決定了整個(gè)系統(tǒng)的時(shí)間粒度。時(shí)間管理tick為系統(tǒng)的相對(duì)時(shí)間單位,也被稱為系統(tǒng)的時(shí)基,來47時(shí)間管理通常來說,實(shí)時(shí)內(nèi)核提供以下主要與時(shí)間相關(guān)的管理:維持相對(duì)時(shí)間(時(shí)間單位為tick)和日歷時(shí)間;任務(wù)有限等待的計(jì)時(shí);定時(shí)功能;時(shí)間片輪轉(zhuǎn)調(diào)度的計(jì)時(shí)。時(shí)間管理通常來說,實(shí)時(shí)內(nèi)核提供以下主要與時(shí)間相關(guān)的管理:48voidOSTimeDly(INT16Uticks){/*AllocatestorageforCPUstatusregister*/#ifOS_CRITICAL_METHOD==3OS_CPU_SRcpu_sr;#endifif(ticks>0){/*0meansnodelay!*/OS_ENTER_CRITICAL();if((OSRdyTbl[OSTCBCur->OSTCBY]&=~OSTCBCur->OSTCBBitX)==0){/*Delaycurrenttask*/OSRdyGrp&=~OSTCBCur->OSTCBBitY;}OSTCBCur->OSTCBDly=ticks;/*LoadticksinTCB*/OS_EXIT_CRITICAL();OS_Sched();/*Findnexttasktorun!*/}}OSTimeDlyUnderuC/OS-IIvoidOSTimeDly(INT16Uticks)49theresolutionofadelayisbetween0and1tick.Inotherwords,ifyoutrytodelayforonlyonetick,youcouldendupwithadelaybetween0and1tick.theresolutionofadelayisb50時(shí)間管理管理功能是通過tick處理程序來實(shí)現(xiàn)的。定時(shí)器發(fā)生中斷后,執(zhí)行系統(tǒng)時(shí)鐘中斷處理程序,并在中斷處理程序中調(diào)用tick處理程序,實(shí)現(xiàn)系統(tǒng)中與時(shí)間和定時(shí)相關(guān)的操作。tick處理程序作為實(shí)時(shí)內(nèi)核的一部分,與具體的定時(shí)器/計(jì)數(shù)器硬件無關(guān),由系統(tǒng)時(shí)鐘中斷處理程序調(diào)用,使實(shí)時(shí)內(nèi)核具有對(duì)不同定時(shí)器/計(jì)數(shù)器硬件的適應(yīng)性。時(shí)間管理管理功能是通過tick處理程序來實(shí)現(xiàn)的。51…tick處理程序……相對(duì)時(shí)間處理…任務(wù)時(shí)間片處理…時(shí)間等待鏈處理…軟件定時(shí)器處理…日歷時(shí)間處理…任務(wù)調(diào)度處理系統(tǒng)時(shí)鐘中斷服務(wù)程序tick處理程序tick處理程序……系統(tǒng)時(shí)鐘中斷服務(wù)程序tick處理程序tick處理程52voidOSTickISR(void){Saveprocessorregisters;CallOSIntEnter()orincrementOSIntNesting;if(OSIntNesting==1){OSTCBCur->OSTCBStkPtr=SP;}CallOSTimeTick();Clearinterruptingdevice;Re-enableinterrupts(optional);CallOSIntExit();Restoreprocessorregisters;Executeareturnfrominterruptinstruction;}TickUnderuC/OS-IIvoidOSTickISR(void)TickUnder53voidOSTimeTick(void){#ifOS_CRITICAL_METHOD==3OS_CPU_SRcpu_sr;#endifOS_TCB*ptcb;OSTimeTickHook();(1)#ifOS_TIME_GET_SET_EN>0OS_ENTER_CRITICAL();OSTime++;(2)OS_EXIT_CRITICAL();#endifif(OSRunning==TRUE){ptcb=OSTCBList;(3)while(ptcb->OSTCBPrio!=OS_IDLE_PRIO){(4)OS_ENTER_CRITICAL();if(ptcb->OSTCBDly!=0){if(--ptcb->OSTCBDly==0){if((ptcb->OSTCBStat&OS_STAT_SUSPEND)==0x00){(5)OSRdyGrp|=ptcb->OSTCBBitY;(6)OSRdyTbl[ptcb->OSTCBY]|=ptcb->OSTCBBitX;}else{ptcb->OSTCBDly=1;}}}ptcb=ptcb->OSTCBNext;OS_EXIT_CRITICAL();}}}voidOSTimeTick(void)54voidTickTask(void*pdata){pdata=pdata;for(;;){OSMboxPend(...);/*WaitforsignalfromTickISR*/OSTimeTick();OS_Sched();}}voidOSTickISR(void){Saveprocessorregisters;CallOSIntEnter()orincrementOSIntNesting;if(OSIntNesting==1){OSTCBCur->OSTCBStkPtr=SP;}Posta'dummy'message(e.g.(void*)1)tothetickmailbox;CallOSIntExit();Restoreprocessorregisters;Executeareturnfrominterruptinstruction;}TickUnderuC/OS-IIbasedonDSRvoidTickTask(void*pdata)voi55
OSTickISRPROCFARPUSHA;Saveinterruptedtask'scontextPUSHESPUSHDSMOVAX,SEG_OSIntNesting;ReloadDSMOVDS,AXINCBYTEPTR_OSIntNesting;NotifyuC/OS-IIofISRINT081H;ChainintoDOS'stickISRCALLFARPTR_OSTimeTick;ProcesssystemtickCALLFARPTR_OSIntExit;NotifyuC/OS-IIofendofISRPOPDS;Restoreinterruptedtask'scontextPOPESPOPAIRET;Returntointerruptedtask_OSTickISRENDPOSTickISRUnder80x86OSTickISRPROCFAROSTickIS56時(shí)間管理相對(duì)時(shí)間即系統(tǒng)時(shí)間,是指相對(duì)于系統(tǒng)啟動(dòng)以來的時(shí)間,以tick為單位,每發(fā)生一個(gè)tick,對(duì)系統(tǒng)的相對(duì)時(shí)間進(jìn)行一次加1操作。實(shí)時(shí)內(nèi)核根據(jù)tick對(duì)應(yīng)的時(shí)間長(zhǎng)度,可以把相對(duì)時(shí)間轉(zhuǎn)換為以秒或是毫秒為單位的其他時(shí)間格式,并可根據(jù)實(shí)時(shí)時(shí)鐘獲得日歷時(shí)間。如果對(duì)任務(wù)設(shè)置了時(shí)間片處理方式,需要在tick處理程序中對(duì)當(dāng)前正在運(yùn)行的任務(wù)的已執(zhí)行時(shí)間進(jìn)行更新,使任務(wù)的已執(zhí)行時(shí)間數(shù)值加1。執(zhí)行加1操作后,如果任務(wù)的已執(zhí)行時(shí)間同任務(wù)的時(shí)間片相等,表示任務(wù)使用完一個(gè)時(shí)間片的執(zhí)行時(shí)間,需要結(jié)束當(dāng)前任務(wù)的執(zhí)行,設(shè)置調(diào)度標(biāo)志,把當(dāng)前任務(wù)放置到就緒鏈。時(shí)間管理相對(duì)時(shí)間即系統(tǒng)時(shí)間,是指相對(duì)于系統(tǒng)啟動(dòng)以來的時(shí)間,以57時(shí)間管理時(shí)間等待鏈用來存放需要延遲處理的對(duì)象:產(chǎn)生tick后,需要對(duì)時(shí)間等待鏈中的對(duì)象的剩余等待時(shí)間值進(jìn)行處理。對(duì)于時(shí)間等待的對(duì)象,通常都被組織為差分鏈表的方式進(jìn)行管理,以有效降低時(shí)間等待對(duì)象的管理開銷。在時(shí)間差分鏈中,每個(gè)表項(xiàng)所包含的計(jì)時(shí)值并非當(dāng)前時(shí)刻到表項(xiàng)激活時(shí)刻的絕對(duì)計(jì)數(shù),而是該表項(xiàng)和先于它的所有表項(xiàng)的計(jì)數(shù)值之和。時(shí)間管理時(shí)間等待鏈用來存放需要延遲處理的對(duì)象:583A2B5C4D3A2B3C4D2EA對(duì)象需要等待3個(gè)時(shí)間單位就應(yīng)被激活B對(duì)象需要等待5(3+2)個(gè)時(shí)間單位就應(yīng)被激活C對(duì)象需要等待10(3+2+5)個(gè)時(shí)間單位就應(yīng)被激活D對(duì)象需要等待14(3+2+5+4)個(gè)時(shí)間單位就應(yīng)被激活7E差分鏈由于7-3-2=2,而7-3-2-5=-3,因此E對(duì)象需要插入到差分鏈中介于對(duì)象B和對(duì)象C之間的位置。3A2B5C4D3A2B3C4D2EA對(duì)象需要等待3個(gè)時(shí)間單59時(shí)間管理對(duì)于差分時(shí)間鏈,系統(tǒng)每接收到一個(gè)tick,就修訂鏈?zhǔn)讓?duì)象的時(shí)間值。如果鏈表對(duì)象的時(shí)間單位為tick,則每發(fā)生一個(gè)tick,鏈?zhǔn)讓?duì)象的時(shí)間值就減1,當(dāng)減到0時(shí),鏈?zhǔn)讓?duì)象就被激活,并從差分時(shí)間鏈中取下來,下一個(gè)對(duì)象又成為鏈?zhǔn)讓?duì)象。時(shí)間管理對(duì)于差分時(shí)間鏈,系統(tǒng)每接收到一個(gè)tick,就修訂鏈?zhǔn)?0時(shí)間管理為實(shí)現(xiàn)定時(shí)功能,實(shí)時(shí)內(nèi)核需要提供軟件定時(shí)器管理功能,應(yīng)用程序可根據(jù)需要?jiǎng)?chuàng)建、使用軟件定時(shí)器。軟件定時(shí)器在創(chuàng)建時(shí),由用戶提供定時(shí)值,當(dāng)軟件定時(shí)器的定時(shí)值減法計(jì)數(shù)為0時(shí),觸發(fā)定時(shí)器服務(wù)例程。用戶可在此例程中完成自己需要的操作。在tick處理程序中需要對(duì)軟件定時(shí)器的定時(shí)值進(jìn)行減1操作,并在定時(shí)值為0時(shí),觸發(fā)掛接在該定時(shí)器上的服務(wù)例程。時(shí)間管理為實(shí)現(xiàn)定時(shí)功能,實(shí)時(shí)內(nèi)核需要提供軟件定時(shí)器管理功能,61時(shí)間管理軟件定時(shí)器可用于實(shí)現(xiàn)“看門狗”(watchdog)。在應(yīng)用的某個(gè)地方進(jìn)行軟件定時(shí)器的停止計(jì)時(shí)操作,確保定時(shí)器在系統(tǒng)正常運(yùn)行的情況下不會(huì)到期,即不會(huì)觸發(fā)定時(shí)器服務(wù)例程;如果某個(gè)時(shí)候系統(tǒng)進(jìn)入了定時(shí)器服務(wù)例程,就表示使用停止計(jì)時(shí)操作的地方?jīng)]有執(zhí)行到,系統(tǒng)出現(xiàn)了錯(cuò)誤。如果需要進(jìn)行任務(wù)的重調(diào)度,tick處理程序還需要調(diào)用調(diào)度程序進(jìn)行任務(wù)調(diào)度處理,使需要執(zhí)行的下一個(gè)任務(wù)獲得對(duì)CPU的控制。時(shí)間管理軟件定時(shí)器可用于實(shí)現(xiàn)“看門狗”(watchdog)。62時(shí)間管理在時(shí)間方面,內(nèi)核通常提供以下功能:設(shè)置系統(tǒng)時(shí)間。使應(yīng)用能夠設(shè)置當(dāng)前系統(tǒng)的日期和時(shí)間。獲得系統(tǒng)時(shí)間。以日歷時(shí)間、系統(tǒng)啟動(dòng)以來所經(jīng)歷的tick數(shù)等形式獲得當(dāng)前的系統(tǒng)時(shí)間。維護(hù)系統(tǒng)時(shí)基、處理定時(shí)事件。通過時(shí)鐘中斷,維持系統(tǒng)日志時(shí)間、任務(wù)延遲時(shí)間、超時(shí)、單調(diào)速
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版申通快遞快遞運(yùn)輸服務(wù)協(xié)議范本3篇
- 二零二五年度寵物領(lǐng)養(yǎng)服務(wù)合同標(biāo)準(zhǔn)范本2篇
- 紡織行業(yè)紡織培訓(xùn)
- 二零二五版國(guó)際貨運(yùn)代理業(yè)投資監(jiān)管細(xì)則3篇
- 酒店管理的管理技能
- 二零二五年度物流倉(cāng)儲(chǔ)行業(yè)搬運(yùn)工勞務(wù)派遣服務(wù)協(xié)議3篇
- 二零二五年度個(gè)人與企業(yè)個(gè)人間文化藝術(shù)交流活動(dòng)合同規(guī)范3篇
- 二零二五年度跨境電商品牌授權(quán)區(qū)域代理銷售委托代銷合同3篇
- 二零二五年度個(gè)人教育培訓(xùn)貸款合同模板2篇
- 二零二五年度入學(xué)新生教育法律協(xié)議書(全面創(chuàng)新發(fā)展)3篇
- 《機(jī)器人驅(qū)動(dòng)與運(yùn)動(dòng)控制》全套教學(xué)課件
- 電子信息工程基礎(chǔ)知識(shí)單選題100道及答案解析
- 電子商務(wù)平臺(tái)技術(shù)服務(wù)合同范本1
- 血液透析器課件
- 2024屆清華大學(xué)強(qiáng)基計(jì)劃數(shù)學(xué)學(xué)科筆試試題(附答案)
- 期末 (試題) -2024-2025學(xué)年川教版(三起)英語(yǔ)四年級(jí)上冊(cè)
- 2024年國(guó)家公務(wù)員考試公共基礎(chǔ)知識(shí)復(fù)習(xí)題庫(kù)及答案(共三套)
- 吊車司機(jī)雇傭合同協(xié)議書
- 《社會(huì)工作實(shí)務(wù)》全冊(cè)配套完整課件3
- 致命性大出血急救專家共識(shí)
- 住院成人高血糖患者血糖監(jiān)測(cè)醫(yī)護(hù)協(xié)議處方共識(shí)
評(píng)論
0/150
提交評(píng)論