




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、所有 ©非經(jīng)本公司播。技術(shù),任何2018。 保留一切權(quán)利。和個人不得擅自摘抄、本文檔內(nèi)容的部分或全部,并不得以傳商標(biāo)和其他商標(biāo)均為技術(shù)的商標(biāo)。本文檔提及的其他所有商標(biāo)或商標(biāo),由各自的所有人擁有。注意您的、服務(wù)或特性等應(yīng)受公司商業(yè)合同和條款的約束,本文檔中描述的全部或部分、服務(wù)或特性可能不在您的明或保證。或使用范圍之內(nèi)。除非合同另有約定,公司對本文檔內(nèi)容不做任何明示或默示的聲由于版本升級或其他,本文檔內(nèi)容會不定期進(jìn)行更新。除非另有約定,本文檔僅作為使用指導(dǎo),本文檔中的所有陳述、信息和建議不任何明示或暗示的擔(dān)保。技術(shù)地址:市龍崗區(qū)坂田總部辦公樓:518129:客戶服務(wù)郵箱: suppor
2、客戶服務(wù):文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)iLiteOS開發(fā)指南目 錄目 錄1 知識共享協(xié)議說明12 前言23 概述43.1 背景介紹43.2 支持的核63.3 使用約束74 基礎(chǔ)內(nèi)核84.1 任務(wù)84.1.1 概述84.1.2 開發(fā)指導(dǎo)114.1.3 注意事項154.1.4 編程實例164.2 內(nèi)存184.2.1 概述184.2.2 動態(tài)內(nèi)存 開發(fā)指導(dǎo) 注意事項 編程實例234.2.3 靜態(tài)內(nèi)存 開發(fā)指導(dǎo) 注意事項 編程實例254.3
3、中斷機(jī)制274.3.1 概述274.3.2 開發(fā)指導(dǎo)294.3.3 注意事項294.3.4 編程實例294.4 隊列304.4.1 概述314.4.2 開發(fā)指導(dǎo)324.4.3 注意事項364.4.4 編程實例36文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)iiLiteOS開發(fā)指南目 錄4. 384.5.1 概述394.5.2 開發(fā)指導(dǎo)404.5.3 注意事項424.5.4 編程實例434.6 互斥鎖444.6.1 概述454.6.2 開發(fā)指導(dǎo)454.6.3 注意事項484.6.4 編程實例484.7 信號量514.7.1 概述514.7.2 開發(fā)指導(dǎo)524.7.3
4、注意事項544.7.4 編程實例544.8 時間管理574.8.1 概述574.8.2 開發(fā)指導(dǎo)574.8.3 注意事項584.8.4 編程實例584.9 軟件定時器604.9.1 概述604.9.2 開發(fā)指導(dǎo)614.9.3 注意事項644.9.4 編程實例644.10 雙向鏈表674.10.1 概述674.10.2 開發(fā)指導(dǎo)674.10.3 注意事項684.10.4 編程實例685 AgentTiny.705.1 概述705.2 開發(fā)指導(dǎo)715.3 注意事項725.4 編程實例73文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)iiiLiteOS開發(fā)指南1 知識共享協(xié)
5、議說明1 知識共享協(xié)議說明您可以自由地:在任何媒介以、本演繹 修改、轉(zhuǎn)換或以本為基礎(chǔ)進(jìn)行創(chuàng)作只要你遵守協(xié)議條款,人就無法收回你的這些權(quán)利。惟須遵守下列條件:署名 您必須提供適當(dāng)?shù)?,提供一個到證,并指示是否作出更改。您可以以任何合理的方式這樣做,但不是以任何方式表明,方贊同您或您的使用。非商業(yè)性使用 您不得將本用于商業(yè)目的。相同方式共享 如果您的修改、轉(zhuǎn)換,或以本為基礎(chǔ)進(jìn)行創(chuàng)作,僅得依本素材的授權(quán)條款來散布您的貢獻(xiàn)。沒有附加限制 您不能增設(shè)法律條款或科技措施,來限制別人依為。條款本已的作:當(dāng)您使用本素材中屬于公眾領(lǐng)域的元素,或當(dāng)法律有例外或限制條款您的使用,則您不需要遵守本條款。未提供保證。本
6、權(quán)、隱私權(quán)、著作條款未必能完全提供您預(yù)期用途所需要的所有 權(quán)等其他權(quán)利,可能限制您如何使用本素材。例如:形象注意為了方便用戶理解,這是協(xié)議的概述. 可以licenses/by-sa/3.0/legalcode了解完整協(xié)議內(nèi)容.文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)1LiteOS開發(fā)指南2 前言2 前言目的本文檔介紹LiteOS的體系結(jié)構(gòu),并介紹如何進(jìn)行內(nèi)核相關(guān)的開發(fā)和調(diào)試。讀者對象本文檔主要適用于LiteOS Kernel的開發(fā)者。本文檔主要適用于以下對象:ll物聯(lián)網(wǎng)端側(cè)軟件開發(fā)工程師物聯(lián)網(wǎng)架構(gòu)設(shè)計師符號約定在本文中可能出現(xiàn)下列標(biāo)志,它們所代表的含義如下。文檔
7、版本 01 (2018-04-24)專有和所有 ©信息技術(shù)2符號說明用于警示緊急的情形,若不避免,將會導(dǎo)致死亡或嚴(yán)重的人身用于警示潛在的情形,若不避免,可能會導(dǎo)致或嚴(yán)重的人身用于警示潛在的情形,若不避免,可能會導(dǎo)致中度或輕微的人身用于傳遞設(shè)備或環(huán)境安全警示信息,若不避免,可能會導(dǎo)致設(shè)備損壞、數(shù)據(jù)丟失、設(shè)備性能降低或其它不可預(yù)知的結(jié)果,“注意”不涉及人身說明“說明”不是安全警示信息,不涉及人身、設(shè)備及環(huán)境信息LiteOS開發(fā)指南2 前言修訂修改 內(nèi)容。累積了每次文檔更新的說明。最新版本的文檔包含以前所有文檔版本的更新文檔版本 01 (2018-04-24)專有和所有 ©信息技
8、術(shù)3日期修訂版本描述2018年03月30日C50社區(qū)開源版本LiteOS開發(fā)指南3 概述3 概述3.1 背景介紹3.2 支持的核3.3 使用約束3.1 背景介紹LiteOS是輕量級的實時操作系統(tǒng),Kernel是IOT OS的內(nèi)核。文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)4LiteOS開發(fā)指南3 概述圖 3-1LiteOS Kernel 的基本框架圖LiteOS基礎(chǔ)內(nèi)核是最精簡的LiteOS操作系統(tǒng)代碼,包括任務(wù)管理、內(nèi)存管理、時間管理、通信機(jī)制、中斷管理、隊列管理、礎(chǔ)組件,可以單獨(dú)運(yùn)行。管理、定時器等操作系統(tǒng)基LiteOS Kernel 的優(yōu)勢l l l ll高
9、實時性,高穩(wěn)定性。超小內(nèi)核,基礎(chǔ)內(nèi)核體積可以裁剪至不到10K。低功耗。支持動態(tài)加載、分散加載。支持功能靜態(tài)裁剪。各模塊簡介任務(wù)提供任務(wù)的創(chuàng)建、刪除、延遲、掛起、恢復(fù)等功能,以及鎖定和任務(wù)按優(yōu)先級高低的搶占調(diào)度及同優(yōu)先級時間片輪轉(zhuǎn)調(diào)度。任務(wù)調(diào)度。支持任務(wù)同步文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)5LiteOS開發(fā)指南3 概述ll信號量:支持信號量的創(chuàng)建、刪除、申請和互斥鎖:支持互斥鎖的創(chuàng)建、刪除、申請和等功能。等功能。硬件相關(guān)提供中斷、定時器等功能。ll中斷:提供中斷的創(chuàng)建、刪除、使能、請求位的清除等功能。定時器:提供定時器的創(chuàng)建、刪除、啟動、停止等功能。IPC
10、通信提供、消息隊列功能。ll:支持讀和寫功能。消息隊列:支持消息隊列的創(chuàng)建、刪除、和接收功能。時間管理ll系統(tǒng)時間:系統(tǒng)時間是由定時/計數(shù)器產(chǎn)生的輸出脈沖觸發(fā)中斷而產(chǎn)生的。Tick時間:Tick是操作系統(tǒng)調(diào)度的基本時間Tick數(shù)決定,由用戶配置。,對應(yīng)的時長由系統(tǒng)主頻及每秒l軟件定時器:以Tick為建的Tick軟中斷中被調(diào)用。的定時器功能,軟件定時器的超時處理函數(shù)在系統(tǒng)創(chuàng)內(nèi)存管理l提供靜態(tài)內(nèi)存和動態(tài)內(nèi)存兩種算法,支持內(nèi)存申請、。目前支持的內(nèi)存管理算法有固定大小的BOX算法、動態(tài)申請SLAB、DLINK算法。l提供內(nèi)存統(tǒng)計、內(nèi)存越界檢測功能。3.2 支持的核表 3-1LiteOS 開源 Kern
11、el 支持的核文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)6支持的核Cortex-M0STM32L053R8Tx ATSAMD21G18A ATSAMD21J18A ATSAMR21G18A EFM32HG322F64 MKL26Z128 MKW41Z512 LPC824M201JHI33 MM32L073PF nRF51822 NANO130KE3BNLiteOS開發(fā)指南3 概述3.3 使用約束lLiteOS提供一套致,但混用CMSIS和 接口申請信號量,但用開發(fā)驅(qū)動程序只能用LiteOS接口,同時支持CMSIS接口,它們功能一LiteOS接口可能會導(dǎo)致不可預(yù)知的
12、錯誤,例如用CMSISLiteOS接口信號量。lLiteOS的接口,上層APP建議用CMSIS接口。文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)7支持的核Cortex-M3STM32F103RB ATSAM4SD32C EFM32GG990F1024 GD32F103VCT6 GD32150R8 GD32F190R8 GD32F207VC MM32F103CBT6 MM32L373PSCortex-M4STM32F411RE STM32F412ZG STM32F429ZI STM32F429IG STM32F476RG EFM32PG1B200F256GM48 GD
13、32F450IKCC3220SF LPC54114j256BD64:M4 nRF52840nRF52832 NUC472HI8AE ATSAMG55J19 ADuCM4050LFCortex-M7STM32F746ZG ATSAME70Q21LiteOS開發(fā)指南4 基礎(chǔ)內(nèi)核4 基礎(chǔ)內(nèi)核4.1 任務(wù)4.2 內(nèi)存4.3 中斷機(jī)制4.4 隊列4.4.6 互斥鎖4.7 信號量4.8 時間管理4.9 軟件定時器4.10 雙向鏈表4.1 任務(wù)4.1.1 概述基本概念從系統(tǒng)的角度看,任務(wù)是競爭系統(tǒng)的最小運(yùn)行單元。任務(wù)可以使用或等待CPU、使用內(nèi)存空間等系統(tǒng),并于其它任務(wù)運(yùn)行。LiteOS的任務(wù)模塊可以給用戶
14、提供多個任務(wù),實現(xiàn)了任務(wù)之間的切換和通信, 幫助用戶管理業(yè)務(wù)程序流程。這樣用戶可以將的精力投入到業(yè)務(wù)功能的實現(xiàn)中。LiteOS是一個支持多任務(wù)的操作系統(tǒng)。在LiteOS中,一個任務(wù)表示一個線程。LiteOS中的任務(wù)是搶占式調(diào)度機(jī)制,同時支持時間片輪轉(zhuǎn)調(diào)度方式。高優(yōu)先級的任務(wù)可打斷低優(yōu)先級任務(wù),低優(yōu)先級任務(wù)必須在高優(yōu)先級任務(wù)阻塞或結(jié)束后才能得到調(diào)度。文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)8LiteOS開發(fā)指南4 基礎(chǔ)內(nèi)核LiteOS的任務(wù)一共有32個優(yōu)先級(0-31),最高優(yōu)先級為0,最低優(yōu)先級為31。任務(wù)相關(guān)概念任務(wù)狀態(tài)LiteOS系統(tǒng)中的每一任務(wù)都有多種運(yùn)行
15、狀態(tài)。系統(tǒng)初始化完成后,創(chuàng)建的任務(wù)就可以在系統(tǒng)中競爭一定的,由內(nèi)核進(jìn)行調(diào)度。任務(wù)狀態(tài)通常分為以下四種:l ll就緒(Ready):該任務(wù)在就緒列表中,只等待CPU。運(yùn)行(Running):該任務(wù)正在執(zhí)行。阻塞(Blocked):該任務(wù)不在就緒列表中。包含任務(wù)被掛起、任務(wù)被延時、任務(wù)正在等待信號量、讀寫隊列或者等待讀寫等。l態(tài)(Dead):該任務(wù)運(yùn)行結(jié)束,等待系統(tǒng)回收。圖 4-1 任務(wù)狀態(tài)示意圖任務(wù)狀態(tài)遷移說明:l就緒態(tài)運(yùn)行態(tài):任務(wù)創(chuàng)建后進(jìn)入就緒態(tài),發(fā)生任務(wù)切換時,就緒列表中最高優(yōu)先級的任務(wù)被執(zhí)行,從而進(jìn)入運(yùn)行態(tài),但此刻該任務(wù)依舊在就緒列表中。l運(yùn)行態(tài)阻塞態(tài):正在運(yùn)行的任務(wù)發(fā)生阻塞(掛起、延時、
16、獲取互斥鎖、讀消息、讀信號量等待等) 時,該任務(wù)會從就緒列表中刪除,任務(wù)狀態(tài)由運(yùn)行態(tài)變成阻塞態(tài),然后發(fā)生任務(wù)切換,運(yùn)行就緒列表中剩余最高優(yōu)先級任務(wù)。l阻塞態(tài)就緒態(tài)(阻塞態(tài)運(yùn)行態(tài)):阻塞的任務(wù)被恢復(fù)后(任務(wù)恢復(fù)、延時時間超時、讀信號量超時或讀到信號量等), 此時被恢復(fù)的任務(wù)會被加入就緒列表,從而由阻塞態(tài)變成就緒態(tài);此時如果被恢復(fù)任務(wù)的優(yōu)先級高于正在運(yùn)行任務(wù)的優(yōu)先級,則會發(fā)生任務(wù)切換,將該任務(wù)由就緒態(tài)變成運(yùn)行態(tài)。l就緒態(tài)阻塞態(tài):任務(wù)也有可能在就緒態(tài)時被阻塞(掛起),此時任務(wù)狀態(tài)會由就緒態(tài)轉(zhuǎn)變?yōu)樽枞麘B(tài),該任務(wù)從就緒列表中刪除,參與任務(wù)調(diào)度,直到該任務(wù)被恢復(fù)。l運(yùn)行態(tài)就緒態(tài):有更高優(yōu)先級任務(wù)創(chuàng)建或者恢
17、復(fù)后,會發(fā)生任務(wù)調(diào)度,此刻就緒列表中最高優(yōu)先級任務(wù)變?yōu)檫\(yùn)行態(tài),那么原先運(yùn)行的任務(wù)由運(yùn)行態(tài)變?yōu)榫途w態(tài),依然在就緒列表中。文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)9LiteOS開發(fā)指南4 基礎(chǔ)內(nèi)核l運(yùn)行態(tài)態(tài)運(yùn)行中的任務(wù)運(yùn)行結(jié)束,內(nèi)核自動將此任務(wù)刪除,任務(wù)狀態(tài)由運(yùn)行態(tài)變?yōu)閼B(tài)。l阻塞態(tài)態(tài)阻塞的任務(wù)調(diào)用刪除接口,任務(wù)狀態(tài)由阻塞態(tài)變?yōu)閼B(tài)。任務(wù)ID任務(wù)ID,在任務(wù)創(chuàng)建時通過參數(shù)返回給用戶,作為任務(wù)的一個非常重要的標(biāo)識。用戶可以通過任務(wù)ID對指定任務(wù)進(jìn)行任務(wù)掛起、任務(wù)恢復(fù)、任務(wù)優(yōu)先級任務(wù)名等操作。優(yōu)先級表示任務(wù)執(zhí)行的優(yōu)先順序。任務(wù)的優(yōu)先級決定了在發(fā)生任務(wù)切換時即將要執(zhí)行的任務(wù)。
18、在就緒列表中的最高優(yōu)先級的任務(wù)將得到執(zhí)行。任務(wù)函數(shù)每個新任務(wù)得到調(diào)度后將執(zhí)行的函數(shù)。該函數(shù)由用戶實現(xiàn),在任務(wù)創(chuàng)建時,通過任務(wù)創(chuàng)建結(jié)構(gòu)體指定。任務(wù)塊TCB每一個任務(wù)都含有一個任務(wù)塊(TCB)。TCB包含了任務(wù)上下文棧指針(stack pointer)、任務(wù)狀態(tài)、任務(wù)優(yōu)先級、任務(wù)ID、任務(wù)名、任務(wù)棧大小等信息。TCB可以反映出每個任務(wù)運(yùn)行情況。任務(wù)棧每一個任務(wù)都擁有一個的棧空間,我們稱為任務(wù)棧。??臻g里保存的信息包含局部變量、寄存器、函數(shù)參數(shù)、函數(shù)返回地址等。任務(wù)在任務(wù)切換時會將切出任務(wù)的上下文信息保存在自身的任務(wù)棧空間里面,以便任務(wù)恢復(fù)時還原現(xiàn)場,從而在任務(wù)恢復(fù)后在切出點繼續(xù)開始執(zhí)行。任務(wù)上下文
19、任務(wù)在運(yùn)行過使用到的一些,如寄存器等,我們稱為任務(wù)上下文。當(dāng)這個任務(wù)掛起時,其他任務(wù)繼續(xù)執(zhí)行,在任務(wù)恢復(fù)后,如果沒有把任務(wù)上下文保存下來,有可能任務(wù)切換會修改寄存器中的值,從而導(dǎo)致未知錯誤。因此,LiteOS在任務(wù)掛起的時候會將本任務(wù)的任務(wù)上下文信息,保存在的任務(wù)棧里面,以便任務(wù)恢復(fù)后,從??臻g中恢復(fù)掛起時的上下文信息,從而繼續(xù)執(zhí)行被掛起時被打斷的代碼。任務(wù)切換任務(wù)切換包含獲取就緒列表中最高優(yōu)先級任務(wù)、切出任務(wù)上下文保存、切入任務(wù)上下文恢復(fù)等動作。機(jī)制LiteOS任務(wù)管理模塊提供任務(wù)創(chuàng)建、任務(wù)刪除、任務(wù)延時、任務(wù)掛起和任務(wù)恢復(fù)、更改任務(wù)優(yōu)先級、鎖任務(wù)調(diào)度和任務(wù)調(diào)度、根據(jù)任務(wù)塊任務(wù)ID、根據(jù)ID
20、任務(wù)塊信息功能。在任務(wù)模塊初始化時,系統(tǒng)會先申請任務(wù)塊需要的內(nèi)存空間,如果系統(tǒng)可用的內(nèi)存空間小于其所需要的內(nèi)存空間,任務(wù)模塊就會初始化失敗。如果任務(wù)初始化,則系統(tǒng)對任務(wù)塊內(nèi)容進(jìn)行初始化。文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)10LiteOS開發(fā)指南4 基礎(chǔ)內(nèi)核用戶創(chuàng)建任務(wù)時,系統(tǒng)會將任務(wù)棧進(jìn)行初始化,預(yù)置上下文。此外,系統(tǒng)還會將“任務(wù)函數(shù)”地址放在相應(yīng)位置。這樣在任務(wù)第一次啟動進(jìn)入運(yùn)行態(tài)時,將會執(zhí)行“任務(wù)函數(shù)”。4.1.2 開發(fā)指導(dǎo)使用場景任務(wù)創(chuàng)建后,內(nèi)核可以執(zhí)行鎖任務(wù)調(diào)度,任務(wù)調(diào)度,掛起,恢復(fù),操作,同時也可以設(shè)置任務(wù)優(yōu)先級,獲取任務(wù)優(yōu)先級。任務(wù)結(jié)束的時候,
21、則進(jìn)行當(dāng)前任務(wù)自刪除操作。功能LiteOS 系統(tǒng)中的任務(wù)管理模塊為用戶提供下面幾種功能。文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)11功能分類接口名描述任務(wù)的創(chuàng)建和刪除LOS_TaskCreateOnly創(chuàng)建任務(wù),并使該任務(wù)進(jìn)入suspend狀態(tài),并不調(diào)度LOS_TaskCreate創(chuàng)建任務(wù),并使該任務(wù)進(jìn)入ready狀態(tài),并調(diào)度LOS_TaskDelete刪除指定的任務(wù)任務(wù)狀態(tài)LOS_TaskResume恢復(fù)掛起的任務(wù)LOS_TaskSuspend掛起指定的任務(wù)LOS_TaskDelay任務(wù)待LOS_TaskYield顯式放權(quán),調(diào)整指定優(yōu)先級的任務(wù)調(diào)度順序任務(wù)調(diào)度
22、的LOS_TaskLock鎖任務(wù)調(diào)度LOS_TaskUnlock任務(wù)調(diào)度任務(wù)優(yōu)先級的LOS_CurTaskPriSet設(shè)置當(dāng)前任務(wù)的優(yōu)先級LOS_TaskPriSet設(shè)置指定任務(wù)的優(yōu)先級LOS_TaskPriGet獲取指定任務(wù)的優(yōu)先級任務(wù)信息獲取LOS_CurTaskIDGet獲取當(dāng)前任務(wù)的IDLOS_TaskInfoGet獲取指定任務(wù)的信息LOS_TaskStatusGet獲取指定任務(wù)的狀態(tài)LOS_TaskNameGet獲取指定任務(wù)的名稱LOS_TaskInfoMonitor所有任務(wù),獲取所有任務(wù)的信息LOS_NextTaskIDGet獲取即將被調(diào)度的任務(wù)的IDLiteOS開發(fā)指南4 基礎(chǔ)內(nèi)
23、核開發(fā)流程以創(chuàng)建任務(wù)為例,講解開發(fā)流程。1.在los_config.h中配置任務(wù)模塊。配置LOSCFG_BASE_CORE_TSK_LIMIT系統(tǒng)支持最大任務(wù)數(shù),這個可以根據(jù)需求配置。配置LOSCFG_BASE_CORE_TSK_IDLE_STACK_SIZE 空閑(IDLE)任務(wù)棧大小,這個默認(rèn)即可。配置LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE默認(rèn)任務(wù)棧大小,用戶根據(jù)的需求進(jìn)行配置,在用戶創(chuàng)建任務(wù)時,可以進(jìn)行性設(shè)置。配置LOSCFG_BASE_CORE_TIMESLICE時間片開關(guān)為YES。配置LOSCFG_BASE_CORE_TIMESLICE_TIM
24、EOUT時間片,根據(jù)實際情況配置。配置LOSCFG_BASE_CORE_TSK_MONITOR任務(wù)監(jiān)測模塊裁剪開關(guān),可選擇是否打開。鎖任務(wù)LOS_TaskLock,鎖住任務(wù),防止高優(yōu)先級任務(wù)調(diào)度。創(chuàng)建任務(wù)LOS_TaskCreate。任務(wù)LOS_TaskUnlock,讓任務(wù)按照優(yōu)先級進(jìn)行調(diào)度。.6.7.延時任務(wù)LOS_TaskDelay,任務(wù)待。掛起指定的任務(wù)LOS_TaskSuspend,任務(wù)掛起等待恢復(fù)操作?;謴?fù)掛起的任務(wù)LOS_TaskResume。TASK 狀態(tài)LiteOS任務(wù)的狀態(tài)由內(nèi)核自動維護(hù),對用戶不可見,不需要用戶去操作。用戶在調(diào)用LOS_TaskCreate接口
25、創(chuàng)建任務(wù)時,需要將創(chuàng)建任務(wù)的TSK_INIT_PARAM_S 參數(shù)的uwResved域設(shè)置為LOS_TASK_STATUS_DETACHED,即自刪除狀態(tài),設(shè)置成自刪除狀態(tài)的任務(wù)會在運(yùn)行完成時進(jìn)行自刪除動作。注意在調(diào)用內(nèi)核LOS_TaskCreate接口創(chuàng)建任務(wù)時,默認(rèn)必須要將任務(wù)狀態(tài)設(shè)置為LOS_TASK_STATUS_DETACHED。TASK 錯誤碼對任務(wù)存在失敗可能性的操作,包括創(chuàng)建任務(wù)、刪除任務(wù)、掛起任務(wù)、恢復(fù)任務(wù)、延時任務(wù)等等,均需要返回對應(yīng)的錯誤碼,以便快速錯誤。文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)12序號定義實際數(shù)值描述參考解決方案1LOS_
26、ERRNO_TSK_ NO_MEMORY0x03000200內(nèi)存空間不足分配更大的內(nèi)存分區(qū)LiteOS開發(fā)指南4 基礎(chǔ)內(nèi)核文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)13序號定義實際數(shù)值描述參考解決方案2LOS_ERRNO_TSK_ PTR_NULL0x02000201任務(wù)參數(shù)為空檢查任務(wù)參數(shù)3LOS_ERRNO_TSK_ STKSZ_NOT_ALIG N0x02000202任務(wù)棧大小未對齊對齊任務(wù)棧4LOS_ERRNO_TSK_ PRIOR_ERROR0x02000203不正確的任務(wù)優(yōu)先級檢查任務(wù)優(yōu)先級5LOS_ERRNO_TSK_ ENTRY_NULL0x020
27、00204任務(wù)函數(shù)為空定義任務(wù)函數(shù)6LOS_ERRNO_TSK_ NAME_EMPTY0x02000205任務(wù)名為空設(shè)置任務(wù)名7LOS_ERRNO_TSK_ STKSZ_TOO_SMAL L0x02000206任務(wù)棧太小擴(kuò)大任務(wù)棧8LOS_ERRNO_TSK_I D_INVALID0x02000207無效的任務(wù)ID檢查任務(wù)ID9LOS_ERRNO_TSK_ ALREADY_SUSPEN DED0x02000208任務(wù)已經(jīng)被掛起等待這個任務(wù)被恢復(fù)后,再去嘗試掛起這個任務(wù)10LOS_ERRNO_TSK_ NOT_SUSPENDED0x02000209任務(wù)未被掛起掛起這個任務(wù)11LOS_ERRNO_
28、TSK_ NOT_CREATED0x0200020a任務(wù)未被創(chuàng)建創(chuàng)建這個任務(wù)12LOS_ERRNO_TSK_ OPERATE_SWTMR0x02000222不操作軟件定時器任務(wù)用戶不要試圖去操作軟件定時器任務(wù)的設(shè)置13LOS_ERRNO_TSK_ MSG_NONZERO0x0200020c任務(wù)信息非零暫不使用該錯誤碼14LOS_ERRNO_TSK_ DELAY_IN_INT0x0300020d中斷期間,進(jìn)行任務(wù)延時等待中斷后再進(jìn)行延時操作15LOS_ERRNO_TSK_ DELAY_IN_LOCK0x0200020e任務(wù)被鎖的狀態(tài)下,進(jìn)行延時等待任務(wù)之后再進(jìn)行延時操作16LOS_ERRNO_T
29、SK_ YIELD_INVALID_T ASK0x0200020f將被排入行程的任務(wù)是無效的檢查這個任務(wù)17LOS_ERRNO_TSK_ YIELD_NOT_ENOU GH_TASK0x02000210沒有或者僅有一個可用任務(wù)能進(jìn)行行程安排增加任務(wù)數(shù)LiteOS開發(fā)指南4 基礎(chǔ)內(nèi)核文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)14序號定義實際數(shù)值描述參考解決方案18LOS_ERRNO_TSK_ TCB_UNAVAILABL E0x02000211沒有空閑的任務(wù)塊可用增加任務(wù)塊數(shù)量19LOS_ERRNO_TSK_ HOOK_NOT_MATC H0x02000212任務(wù)的
30、鉤子函數(shù)不匹配暫不使用該錯誤碼20LOS_ERRNO_TSK_ HOOK_IS_FULL0x02000213任務(wù)的鉤子函數(shù)數(shù)量超過界限暫不使用該錯誤碼21LOS_ERRNO_TSK_ OPERATE_IDLE0x02000214這是個IDLE任務(wù)檢查任務(wù)ID,不要試圖操作IDLE任務(wù)22LOS_ERRNO_TSK_ SUSPEND_LOCKED0x03000215將被掛起的任務(wù)處于被鎖狀態(tài)等待任務(wù)后再嘗試掛起任務(wù)23LOS_ERRNO_TSK_ FREE_STACK_FAIL ED0x02000217任務(wù)棧free失敗該錯誤碼暫不使用24LOS_ERRNO_TSK_ STKAREA_TOO_S
31、 MALL0x02000218任務(wù)棧區(qū)域太小該錯誤碼暫不使用25LOS_ERRNO_TSK_ ACTIVE_FAILED0x03000219任務(wù)觸發(fā)失敗創(chuàng)建一個IDLE任務(wù)后執(zhí)行任務(wù)轉(zhuǎn)換26LOS_ERRNO_TSK_ CONFIG_TOO_MA NY0x0200021a過多的任務(wù)配置項該錯誤碼暫不使用27LOS_ERRNO_TSK_ CP_SAVE_AREA_N OT_ALIGN0x0200021b暫無該錯誤碼暫不使用28LOS_ERRNO_TSK_ MSG_Q_TOO_MAN Y0x0200021d暫無該錯誤碼暫不使用29LOS_ERRNO_TSK_ CP_SAVE_AREA_N ULL0
32、x0200021e暫無該錯誤碼暫不使用30LOS_ERRNO_TSK_ SELF_DELETE_ERR0x0200021f暫無該錯誤碼暫不使用31LOS_ERRNO_TSK_ STKSZ_TOO_LARG E0x02000220任務(wù)棧大小設(shè)置過大減小任務(wù)棧大小32LOS_ERRNO_TSK_ SUSPEND_SWTMR_NOT_ALLOWED0x02000221不掛起軟件定時器任務(wù)檢查任務(wù)ID, 不要試圖掛起軟件定時器任務(wù)LiteOS開發(fā)指南4 基礎(chǔ)內(nèi)核錯誤碼定義:錯誤碼是一個32位的單元,3124位表示錯誤等級,2316位表示錯誤碼標(biāo)志,158位代表錯誤碼所屬模塊,70位表示錯誤碼序號,如下
33、例如:注意錯誤碼序號 0x16、0x1c、0x0b,未被定義,不可用。平臺差異性無。4.1.3 注意事項l創(chuàng)建新任務(wù)時,會對之前自刪除任務(wù)的任務(wù)塊和任務(wù)棧進(jìn)行回收,非自刪除任務(wù)的塊和棧在任務(wù)刪除的時候已經(jīng)回收。l任務(wù)名是指針沒有分配空間,在設(shè)置任務(wù)名時, 務(wù)名指針。若指定的任務(wù)棧大小為0,則使用配置項將局部變量的地址賦值給任lLOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE指定默認(rèn)的任務(wù)棧大小。任務(wù)棧的大小按8字節(jié)大小對齊。確定任務(wù)棧大小的原則是,夠用就行:多了浪費(fèi),少了任務(wù)棧溢出。掛起任務(wù)的時候若為當(dāng)前任務(wù)且已鎖任務(wù),則不能被掛起??臻e(IDLE)任務(wù)及軟件定時
34、器任務(wù)不能被掛起或者刪除。ll l l l l ll在中斷處理函數(shù)中或者在鎖任務(wù)的情,執(zhí)行LOS_TaskDelay操作會失敗。鎖任務(wù)調(diào)度,并不關(guān)中斷,因此任務(wù)仍可被中斷打斷。鎖任務(wù)調(diào)度必須和任務(wù)調(diào)度配合使用。設(shè)置任務(wù)優(yōu)先級的時候可能會發(fā)生任務(wù)調(diào)度。除去空閑(IDLE)任務(wù)以外,系統(tǒng)可配置的任務(wù)個數(shù)是指:整個系統(tǒng)的任務(wù)總個數(shù),而非用戶能使用的任務(wù)個數(shù)。例如:系統(tǒng)軟件定時器多占用一個任務(wù)數(shù),那么系統(tǒng)可配置的任務(wù)就會減少一個。l ll為了防止系統(tǒng)出現(xiàn)問題,系統(tǒng)對軟件定時器任務(wù)優(yōu)先級進(jìn)行修改。LOS_CurTaskPriSet和LOS_TaskPriSet接口不能在中斷中使用。LOS_TaskPri
35、Get接口傳入的task ID對應(yīng)的任務(wù)未創(chuàng)建或者超過最大任務(wù)數(shù),統(tǒng)一返回0xffff。文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)15LOS_ERRNO_TSK_NO_MEMORY LOS_ERRNO_OS_FATAL(LOS_MOD_TSK, 0x00)#define LOS_ERRNO_OS_NORMAL(MID,ERRNO) (LOS_ERRTYPE_NORMAL | LOS_ERRNO_OS_ID | (UINT32)(MID) << 8) | (ERRNO)LOS_ERRTYPE_NORMAL :Define the error level
36、as critical LOS_ERRNO_OS_ID :OS error code flag.MID:OS_MOUDLE_IDERRNO:error ID numberLiteOS開發(fā)指南4 基礎(chǔ)內(nèi)核l在刪除任務(wù)時要保證任務(wù)申請的(如互斥鎖、信號量等)已被。4.1.4 編程實例實例描述下面的示例介紹任務(wù)的基本操作方法,包含任務(wù)創(chuàng)建、任務(wù)延時、任務(wù)鎖與調(diào)度、掛起和恢復(fù)、當(dāng)前任務(wù)PID、根據(jù)PID 調(diào)度的機(jī)制以及各接口的應(yīng)用。任務(wù)信息等操作,闡述任務(wù)優(yōu)先級1.2.3.創(chuàng)建了2個任務(wù):TaskHi和TaskLo。TaskHi為高優(yōu)先級任務(wù)。TaskLo為低優(yōu)先級任務(wù)。編程示例文檔版本 01 (20
37、18-04-24)專有和所有 ©信息技術(shù)16static UINT32 g_uwTskHiID; static UINT32 g_uwTskLoID;#define TSK_PRIOR_HI 4#define TSK_PRIOR_LO 5static UINT32 Example_TaskHi(VOID)UINT32 uwRet = LOS_OK;dprintf("Enter TaskHi Handler.rn");/*延時5個Tick,延時后該任務(wù)會掛起,執(zhí)行剩余任務(wù)中高優(yōu)先級的任務(wù)(g_uwTskLoID任務(wù))*/ uwRet = LOS_TaskDelay(
38、5);if (uwRet != LOS_OK)dprintf("Delay Task Failed.rn"); return LOS_NOK;/*2個tick時間到了后,該任務(wù)恢復(fù),繼續(xù)執(zhí)行*/ dprintf("TaskHi LOS_TaskDelay Done.rn");/*掛起自身任務(wù)*/uwRet = LOS_TaskSuspend(g_uwTskHiID); if (uwRet != LOS_OK)dprintf("Suspend TaskHi Failed.rn");uwRet = LOS_InspectStatusSet
39、ByID(LOS_INSPECT_TASK,LOS_INSPECT_STU_ERROR); if (LOS_OK != uwRet)dprintf("Set Inspect Status Errn");return LOS_NOK;dprintf("TaskHi LOS_TaskResume Success.rn");uwRet = LOS_InspectStatusSetByID(LOS_INSPECT_TASK,LOS_INSPECT_STU_SUCCESS); if (LOS_OK != uwRet)dprintf("Set Inspec
40、t Status Errn");/*刪除任務(wù)*/if(LOS_OK != LOS_TaskDelete(g_uwTskHiID)LiteOS開發(fā)指南4 基礎(chǔ)內(nèi)核結(jié)果驗證編譯運(yùn)行得到的結(jié)果為:完整實例代碼los_api_task.c文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)17dprintf("TaskHi delete failed .n"); return LOS_NOK;return LOS_OK;/*低優(yōu)先級任務(wù)函數(shù)*/static UINT32 Example_TaskLo(VOID)UINT32 uwRet;dprintf(
41、"Enter TaskLo Handler.rn");/*延時10個Tick,延時后該任務(wù)會掛起,執(zhí)行剩余任務(wù)中就高優(yōu)先級的任務(wù)(背景任務(wù))*/ uwRet = LOS_TaskDelay(10);if (uwRet != LOS_OK)dprintf("Delay TaskLo Failed.rn"); return LOS_NOK;dprintf("TaskHi LOS_TaskSuspend Success.rn");/*恢復(fù)被掛起的任務(wù)g_uwTskHiID*/ uwRet = LOS_TaskResume(g_uwTskHi
42、ID); if (uwRet != LOS_OK)dprintf("Resume TaskHi Failed.rn");uwRet = LOS_InspectStatusSetByID(LOS_INSPECT_TASK,LOS_INSPECT_STU_ERROR); if (LOS_OK != uwRet)dprintf("Set Inspect Status Errn");return LOS_NOK;/*刪除任務(wù)*/if(LOS_OK != LOS_TaskDelete(g_uwTskLoID)dprintf("TaskLete faile
43、d .n");return LOS_NOK;return LOS_OK;LiteOS開發(fā)指南4 基礎(chǔ)內(nèi)核4.2 內(nèi)存4.2.1 概述基本概念內(nèi)存管理模塊管理系統(tǒng)的內(nèi)存,它是操作系統(tǒng)的模塊之一。主要包括內(nèi)存的初始化、分配以及。在系統(tǒng)運(yùn)行過,內(nèi)存管理模塊通過對內(nèi)存的申請/操作,來管理用戶和OS對內(nèi)存的使用,使內(nèi)存的利用率和使用效率達(dá)到最優(yōu),同時最大限度地解決系統(tǒng)的內(nèi)存碎片問題。LiteOS的內(nèi)存管理分為靜態(tài)內(nèi)存管理和動態(tài)內(nèi)存管理,提供內(nèi)存初始化、分配、l等功能。動態(tài)內(nèi)存:在動態(tài)內(nèi)存 優(yōu)點:按需分配。分配用戶指定大小的內(nèi)存塊。 缺點:內(nèi)存可能出現(xiàn)碎片。l靜態(tài)內(nèi)存:在靜態(tài)內(nèi)存 優(yōu)點:分配和分
44、配用戶初始化時預(yù)設(shè)(固定)大小的內(nèi)存塊。效率高,靜態(tài)內(nèi)存無碎片。 缺點:只能申請到初始化預(yù)設(shè)大小的內(nèi)存塊,不能按需申請。動態(tài)內(nèi)存機(jī)制動態(tài)內(nèi)存管理,即在內(nèi)存充足的情,從系統(tǒng)配置的一塊比較大的連續(xù)內(nèi)存(內(nèi)存池),根據(jù)用戶需求,分配任意大小的內(nèi)存塊。當(dāng)用戶不需要該內(nèi)存塊時,又可以供下一次使用。與靜態(tài)內(nèi)存相比,動態(tài)內(nèi)存管理的好處是按需分配,缺點是內(nèi)存LiteOS動態(tài)內(nèi)存支持DLINK和BEST LITTLE兩種標(biāo)準(zhǔn)算法。容易出現(xiàn)碎片。1.DLINKDLINK動態(tài)內(nèi)存管理結(jié)構(gòu)如圖1所示:圖 4-2文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)18LiteOS開發(fā)指南4 基礎(chǔ)內(nèi)核
45、第一部分:堆內(nèi)存(也稱內(nèi)存池)的起始地址及堆區(qū)域總大小第二部分:本身是一個數(shù)組,每個元素是一個雙向鏈表,所有free節(jié)點的分類掛在這個數(shù)組的雙向鏈表中。頭都會被假設(shè)內(nèi)存的最小節(jié)點為2min字節(jié),則數(shù)組的第一個雙向鏈表的是所有size為2min<size< 2min+1的free節(jié)點,第二個雙向鏈表的是所有size為2min+1<size< 2min+2的free節(jié)點,依次類推第n個雙向鏈表的是所有size為2min+n-1<size< 2min+n的free節(jié)點。每次申請內(nèi)存的時候,會從這個數(shù)組檢索最合適大小的free節(jié)點,進(jìn)行分配內(nèi)存。每次內(nèi)存時,會將該片
46、內(nèi)存作為free節(jié)點至這個數(shù)組,以便下次再利用。第三部分:占用內(nèi)存大部分的空間,是用于存放各節(jié)點的實際區(qū)域。以下是LOS_MEM_DYN_NODE節(jié)點結(jié)構(gòu)體申明以及簡單介紹: typedef struct tagLOS_MEM_DYN_NODELOS_DL_LIST stFreeNodeInfo;struct tagLOS_MEM_DYN_NODE *pstPreNode; UINT32 uwSizeAndFlag;LOS_MEM_DYN_NODE;圖 4-32.BEST LITTLELiteOS的動態(tài)內(nèi)存分配支持最佳適配算法,即BEST LITTLE,每次分配時選擇內(nèi)存池中最小最適合的內(nèi)存塊
47、進(jìn)行分配。LiteOS動態(tài)內(nèi)存管理在最佳適配算法的基礎(chǔ)上加入了SLAB機(jī)制,用于分配固定大小的內(nèi)存塊,進(jìn)而減小產(chǎn)生內(nèi)存碎片的可能性。LiteOS內(nèi)存管理中的SLAB機(jī)制支持可配置的SLAB CLASS數(shù)目及每個CLASS的最大空間,現(xiàn)以SLAB CLASS數(shù)目為4,每個CLASS的最大空間為512字節(jié)為例說明SLAB機(jī)制。在內(nèi)存共有4個SLAB CLASS,每個SLAB CLASS的總共可分配大小為512字節(jié),第一個SLAB CLASS被分為32個16字節(jié)的SLAB塊,第二個SLAB CLASS被分為16 個32字節(jié)的SLAB塊,第三個SLAB CLASS被分為8個64字節(jié)的SLAB塊,第四個
48、SLAB CLASS被分為4個128字節(jié)的SLAB塊。這4個SLAB CLASS是從內(nèi)存按照最佳適配算法分配出來的。初始化內(nèi)存管理時,首先初始化內(nèi)存池,然后在初始化后的內(nèi)存按照最佳適配算法申請4個SLAB CLASS,再逐個按照SLAB內(nèi)存管理機(jī)制初始化4個SLAB CLASS。文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)19LiteOS開發(fā)指南4 基礎(chǔ)內(nèi)核每次申請內(nèi)存時,先在滿足申請大小的最佳SLAB CLASS中申請,(比如用戶申請20字節(jié)內(nèi)存,就在SLAB塊大小為32字節(jié)的SLAB CLASS中申請),如果申請,就將SLAB內(nèi)存塊整塊返回給用戶,時整塊回收。如
49、果滿足條件的SLAB CLASS中已無可以分配的內(nèi)存塊,則繼續(xù)向內(nèi)存池按照最佳適配算法申請。需要注意的是,如果當(dāng)前的SLAB CLASS中無可用SLAB塊了,則直接向內(nèi)存池申請,而SLAB塊空間的SLAB CLASS申請。繼續(xù)向有著更大內(nèi)存時,先檢查的內(nèi)存塊是否屬于SLAB CLASS,如果是SLAB CLASS的內(nèi)存塊,則還回對應(yīng)的SLAB CLASS中,否則還回內(nèi)存。靜態(tài)內(nèi)存機(jī)制靜態(tài)內(nèi)存實質(zhì)上是一塊靜態(tài)數(shù)組,靜態(tài)內(nèi)存池內(nèi)的塊大小在初始化時設(shè)定,初始化后塊大小不可變更。靜態(tài)內(nèi)存一個塊和若干相同大小的內(nèi)存塊。塊位于內(nèi)存池頭部,用于內(nèi)存塊管理。內(nèi)存塊的申請和以塊大小為粒度。圖 4-4 靜態(tài)內(nèi)存示
50、意圖4.2.2 動態(tài)內(nèi)存 開發(fā)指導(dǎo)使用場景內(nèi)存管理的主要工作是動態(tài)的劃分并管理用戶分配好的內(nèi)存區(qū)間。動態(tài)內(nèi)存管理主要是在用戶需要使用大小不等的內(nèi)存塊的場景中使用。當(dāng)用戶需要分配內(nèi)存時,可以通過操作系統(tǒng)的動態(tài)內(nèi)存申請函數(shù)索取指定大小內(nèi)存塊,一旦使用完畢,通過動態(tài)內(nèi)存函數(shù)歸還所占用內(nèi)存,使之可以重復(fù)使用。文檔版本 01 (2018-04-24)專有和所有 ©信息技術(shù)20LiteOS開發(fā)指南4 基礎(chǔ)內(nèi)核功能LiteOS系統(tǒng)中的動態(tài)內(nèi)存管理模塊為用戶提供下面幾種功能,具體的API詳見接口手冊。DLINK 開發(fā)流程1.配置:OS_SYS_MEM_ADDR:系統(tǒng)動態(tài)內(nèi)存池起始地址,
51、一般不需要修改OS_SYS_MEM_SIZE:系統(tǒng)動態(tài)內(nèi)存池大小,以byte為后未使用的空間,系統(tǒng)默認(rèn)分配DDRLOSCFG_BASE_MEM_NODE_INTEGRITY_CHECK:內(nèi)存越界檢測開關(guān),默認(rèn)關(guān)閉。打開后,每次申請動態(tài)內(nèi)存時執(zhí)行動態(tài)內(nèi)存塊越界檢查;每次存時執(zhí)行靜態(tài)內(nèi)存塊越界檢查。初始化LOS_MemInit。靜態(tài)內(nèi)2.初始一個內(nèi)存如圖,生成一個 EndNode,并且剩余的內(nèi)存全部被標(biāo)記為FreeNode節(jié)點。注:EndNode作為內(nèi)存池末尾的節(jié)點,size為0。3.申請任意大小的動態(tài)內(nèi)存LOS_MemAlloc。動態(tài)內(nèi)存是否存在申請量大小的空間,若存在,則劃出一塊內(nèi)存塊,以指針形式返回,若不存在,返回NULL。調(diào)用三次LOS_MemAlloc函數(shù)可以創(chuàng)建三個節(jié)點,假設(shè)名稱分別為UsedA,UsedB, UsedC,大小分別
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 探究實踐:“EC”混合式教學(xué)
- 內(nèi)蒙古辦酒類管理辦法
- 機(jī)器人運(yùn)動學(xué)建模與控制研究
- 冬季取暖安全管理辦法
- 基于“崗課賽證”視角的高職模塊化教學(xué)改革研究與實踐
- 動物基因表達(dá)研究
- 創(chuàng)新驅(qū)動:產(chǎn)品設(shè)計全流程管控體系構(gòu)建與實踐
- 交通事故和解協(xié)議書正式版-1
- 及時如實報告生產(chǎn)安全事故是誰的責(zé)任
- 通信網(wǎng)絡(luò)建設(shè)安全管理體系與實施細(xì)節(jié)
- 數(shù)與代數(shù)課件
- 工會審計實務(wù)課件
- 預(yù)防艾滋病、梅毒和乙肝母嬰傳播相關(guān)報表、上報流程和要求
- 《鐵路技術(shù)管理規(guī)程》(普速鐵路部分)-14年新版
- 食用油儲存期品質(zhì)變化的太赫茲光譜無損識別
- 胎盤早剝預(yù)案演練腳本
- 五山文學(xué)全集第一卷
- 聚磷腈功能高分子材料的合成及應(yīng)用
- 中國鐵路總公司《鐵路技術(shù)管理規(guī)程》(高速鐵路部分)2014年7月
- 鈣加維生素Dppt課件(PPT 14頁)
- TRD深基坑止水帷幕施工方案(22頁)
評論
0/150
提交評論