FreeRTOS內(nèi)核實現(xiàn)與應(yīng)用開發(fā)實戰(zhàn)指南:基于STM32_第1頁
FreeRTOS內(nèi)核實現(xiàn)與應(yīng)用開發(fā)實戰(zhàn)指南:基于STM32_第2頁
FreeRTOS內(nèi)核實現(xiàn)與應(yīng)用開發(fā)實戰(zhàn)指南:基于STM32_第3頁
FreeRTOS內(nèi)核實現(xiàn)與應(yīng)用開發(fā)實戰(zhàn)指南:基于STM32_第4頁
FreeRTOS內(nèi)核實現(xiàn)與應(yīng)用開發(fā)實戰(zhàn)指南:基于STM32_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

FreeRTOS內(nèi)核實現(xiàn)與應(yīng)用開發(fā)實戰(zhàn)指南:基于STM32一、本文概述1、介紹FreeRTOS和STM32FreeRTOS和STM32是嵌入式系統(tǒng)開發(fā)中的兩個重要概念。FreeRTOS是一個輕量級的實時操作系統(tǒng)(RTOS),適用于各種嵌入式應(yīng)用,如物聯(lián)網(wǎng)設(shè)備、智能家居、機器人等。STM32則是的一款高性能的微控制器系列,被廣泛應(yīng)用于各種嵌入式設(shè)備中,如機器人、工業(yè)自動化、醫(yī)療器械等。了解FreeRTOS和STM32的基本概念和原理,以及它們之間的優(yōu)缺點對比,對于嵌入式系統(tǒng)開發(fā)人員來說非常重要。

FreeRTOS是一個開源的實時操作系統(tǒng),它提供了一個高可靠性的環(huán)境,可以在此環(huán)境中開發(fā)應(yīng)用程序。FreeRTOS內(nèi)核的主要特點是輕量級、可裁剪、可移植性強和高性能。它支持多任務(wù)調(diào)度、中斷處理、時間片輪轉(zhuǎn)等功能,可以滿足實時性要求較高的應(yīng)用需求。

STM32微控制器是基于ARMCortex-M系列內(nèi)核的高性能微控制器系列。它具有高性能、低功耗、豐富的外設(shè)接口等特點,可以滿足各種嵌入式應(yīng)用的需求。與FreeRTOS相比,STM32的優(yōu)點在于其高性能和豐富的外設(shè)接口,但實時性較差。

在選擇FreeRTOS和STM32時,需要根據(jù)應(yīng)用場景進行權(quán)衡。對于需要實時性要求較高、資源有限的應(yīng)用,可以選擇FreeRTOS作為操作系統(tǒng)。而對于需要高性能、低功耗、豐富外設(shè)接口的應(yīng)用,則可以選擇STM32作為微控制器。

總之,F(xiàn)reeRTOS和STM32在嵌入式系統(tǒng)開發(fā)中都是非常重要的概念。了解它們的基本概念和原理,以及它們之間的優(yōu)缺點對比,可以幫助開發(fā)人員更好地選擇合適的工具和技術(shù),提高嵌入式系統(tǒng)的可靠性和性能。2、為什么使用FreeRTOS和STM32進行開發(fā)FreeRTOS和STM32是嵌入式系統(tǒng)開發(fā)領(lǐng)域的兩個重要角色。FreeRTOS是一個實時操作系統(tǒng)(RTOS),它為開發(fā)者提供了一個簡潔、可擴展和易于使用的軟件平臺,用于管理嵌入式系統(tǒng)的資源并實現(xiàn)多任務(wù)調(diào)度。STM32則是ARMCortex-M系列微控制器的統(tǒng)稱,具有高性能、低功耗、豐富外設(shè)接口等特點,被廣泛應(yīng)用于各種嵌入式應(yīng)用中。

我們選擇FreeRTOS和STM32進行開發(fā)的原因有以下幾點:

1、易用性和可移植性:FreeRTOS具有豐富的文檔和社區(qū)支持,使得開發(fā)者可以更加便捷地進行移植和定制。同時,STM32提供了豐富的中間件和開發(fā)工具,使得開發(fā)者可以快速上手并進行原型開發(fā)。

2、實時性和響應(yīng)速度:FreeRTOS是一個實時操作系統(tǒng),可以保證任務(wù)的及時響應(yīng)和處理。STM32的高性能處理器可以確保任務(wù)的快速執(zhí)行和實時響應(yīng),適用于對實時性要求較高的場景。

3、成本效益:STM32系列微控制器具有較高的性價比,可以降低開發(fā)成本。FreeRTOS則是一個輕量級、開源的RTOS,同樣具有成本效益優(yōu)勢。

4、可擴展性和靈活性:FreeRTOS支持多種處理器架構(gòu),包括ARMCortex-M、Cortex-A和RISC架構(gòu)等。STM32系列微控制器也提供了多種型號和外設(shè)接口,可以根據(jù)項目需求進行靈活的定制和擴展。

綜上所述,我們選擇FreeRTOS和STM32進行開發(fā),可以充分利用它們在實時性、高性能、易用性、成本效益和可擴展性等方面的優(yōu)勢,實現(xiàn)對嵌入式系統(tǒng)的快速原型開發(fā)和高效能優(yōu)化。3、本文的目的和結(jié)構(gòu)3、本文的目的和結(jié)構(gòu)

本文的主要目的是深入探討STM32單片機的FreeRTOS內(nèi)核實現(xiàn)與應(yīng)用開發(fā),旨在幫助讀者更好地理解并掌握FreeRTOS在STM32上的應(yīng)用,提高實際開發(fā)效率。本文的結(jié)構(gòu)安排如下:首先,我們將簡要介紹STM32單片機的特點和應(yīng)用場景;接著,闡述本文的寫作目的和意義;最后,重點探討STM32單片機的FreeRTOS內(nèi)核實現(xiàn)和應(yīng)用程序開發(fā)的相關(guān)知識與技術(shù),并結(jié)合實際案例進行分析與說明。

4、STM32單片機的特點和應(yīng)用場景

STM32單片機作為一款具有高性能、低功耗、豐富外設(shè)接口等特點的微控制器,被廣泛應(yīng)用于各種嵌入式系統(tǒng)開發(fā)中,如智能家居、智能工業(yè)、醫(yī)療器械、汽車電子等。其強大的處理能力和豐富的外設(shè)接口,使得STM32單片機能夠滿足各種復(fù)雜的應(yīng)用需求。

5、本文的目的和意義

本文旨在深入探討STM32單片機的FreeRTOS內(nèi)核實現(xiàn)與應(yīng)用開發(fā),幫助讀者理解并掌握FreeRTOS在STM32上的應(yīng)用,提高實際開發(fā)效率。FreeRTOS作為一種流行的實時操作系統(tǒng),能夠提供多任務(wù)管理、任務(wù)調(diào)度、中斷管理、內(nèi)存管理等功能,可以有效提高嵌入式系統(tǒng)的開發(fā)效率和穩(wěn)定性。掌握FreeRTOS在STM32上的應(yīng)用,將使開發(fā)者能夠更加便捷地進行嵌入式系統(tǒng)開發(fā),提高產(chǎn)品性能和競爭力。

6、STM32單片機的FreeRTOS內(nèi)核實現(xiàn)和應(yīng)用開發(fā)的相關(guān)知識與技術(shù)

本節(jié)將重點介紹STM32單片機的FreeRTOS內(nèi)核實現(xiàn)和應(yīng)用開發(fā)的相關(guān)知識與技術(shù),包括FreeRTOS的原理、任務(wù)管理、調(diào)度算法、中斷管理、內(nèi)存管理等方面。我們將結(jié)合STM32的特點和實際應(yīng)用場景,對FreeRTOS的應(yīng)用進行深入剖析。二、FreeRTOS內(nèi)核實現(xiàn)任務(wù)創(chuàng)建和管理1、FreeRTOS概述FreeRTOS是一個流行的嵌入式操作系統(tǒng)內(nèi)核,專門為資源受限的嵌入式系統(tǒng)設(shè)計。它提供了實時任務(wù)調(diào)度、內(nèi)存管理、中斷處理、設(shè)備驅(qū)動程序等基本功能,使得開發(fā)者可以更加高效地開發(fā)嵌入式應(yīng)用程序。FreeRTOS內(nèi)核具有可移植性、可擴展性和易用性等特點,支持多種處理器架構(gòu)和硬件平臺,因此被廣泛應(yīng)用于各種嵌入式領(lǐng)域,如航空航天、工業(yè)控制、智能家居等。

FreeRTOS內(nèi)核的主要特點包括:

(1)輕量級:FreeRTOS內(nèi)核不依賴于任何外部庫或硬件設(shè)備,只占用很小的內(nèi)存空間,使得其在資源受限的系統(tǒng)中具有很好的適用性。

(2)可移植性:FreeRTOS內(nèi)核支持多種處理器架構(gòu)和硬件平臺,使得其可以方便地適用于各種不同的嵌入式系統(tǒng)。

(3)實時性:FreeRTOS內(nèi)核具有實時任務(wù)調(diào)度功能,可以保證實時任務(wù)的及時響應(yīng)和處理。

(4)可擴展性:FreeRTOS內(nèi)核提供了豐富的API函數(shù)和數(shù)據(jù)結(jié)構(gòu),方便開發(fā)者擴展和定制內(nèi)核功能,以滿足不同的應(yīng)用需求。

(5)易用性:FreeRTOS內(nèi)核具有簡單易用的編程接口,開發(fā)者可以快速上手并使用FreeRTOS內(nèi)核進行應(yīng)用程序開發(fā)。2、FreeRTOS內(nèi)核原理FreeRTOS內(nèi)核是專門為實時操作系統(tǒng)(RTOS)設(shè)計的,其核心目的是提供輕量級、可移植、可擴展的實時多任務(wù)操作系統(tǒng)。FreeRTOS內(nèi)核以其高可靠性和卓越的性能,廣泛應(yīng)用于各種嵌入式系統(tǒng)和物聯(lián)網(wǎng)設(shè)備,尤其適用于STM32單片機。在深入探討FreeRTOS內(nèi)核應(yīng)用實戰(zhàn)之前,我們首先來了解一下FreeRTOS內(nèi)核的基本原理。

FreeRTOS內(nèi)核主要由以下幾個部分組成:

1、調(diào)度器(Scheduler):負(fù)責(zé)根據(jù)優(yōu)先級調(diào)度多個任務(wù),并確保任務(wù)按照預(yù)期的順序執(zhí)行。調(diào)度器是實時操作系統(tǒng)的核心,需要能夠在確定的時間內(nèi)對任務(wù)進行響應(yīng)。

2、中斷管理器(InterruptManager):用于管理硬件中斷,將中斷處理程序(也稱為中斷服務(wù)程序)正確地映射到對應(yīng)的硬件設(shè)備上,同時保證中斷處理的高效性和實時性。

3、任務(wù)管理(TaskManagement):提供創(chuàng)建、刪除、切換等操作,對任務(wù)的生命周期進行管理。同時,任務(wù)管理還負(fù)責(zé)任務(wù)的同步與通信,提供消息隊列、信號量、互斥鎖等機制。

4、時間管理(TimeManagement):提供定時器和定時器節(jié)拍功能,用于實現(xiàn)任務(wù)的定時觸發(fā)和時間同步。

5、內(nèi)存管理(MemoryManagement):負(fù)責(zé)內(nèi)存的分配、釋放和保護,確保多任務(wù)環(huán)境下不會出現(xiàn)內(nèi)存泄漏和數(shù)據(jù)競爭等問題。

FreeRTOS內(nèi)核的設(shè)計思路是將硬件資源抽象成任務(wù)能夠獨立調(diào)用的API函數(shù),以實現(xiàn)任務(wù)的隔離和互斥。內(nèi)核通過寄存器、程序計數(shù)器和控制流水線等機制,實現(xiàn)對任務(wù)的管理和調(diào)度。

寄存器:FreeRTOS內(nèi)核通過使用特定的寄存器來實現(xiàn)對硬件資源的訪問和操作。這些寄存器包括任務(wù)狀態(tài)寄存器、中斷寄存器、定時器寄存器等,內(nèi)核通過這些寄存器來維護和管理任務(wù)的執(zhí)行狀態(tài)以及硬件資源的狀態(tài)。

程序計數(shù)器:FreeRTOS內(nèi)核使用程序計數(shù)器(PC)來跟蹤當(dāng)前執(zhí)行的指令地址。當(dāng)發(fā)生任務(wù)切換時,內(nèi)核會保存當(dāng)前任務(wù)的程序計數(shù)器,并將下一個任務(wù)的程序計數(shù)器加載到CPU中,以實現(xiàn)任務(wù)的切換和執(zhí)行。

控制流水線:FreeRTOS內(nèi)核通過控制CPU的流水線來實現(xiàn)任務(wù)的切換和執(zhí)行。當(dāng)一個任務(wù)正在執(zhí)行時,如果調(diào)度器決定切換到另一個任務(wù),它會通過修改程序計數(shù)器和相關(guān)的寄存器來控制CPU的執(zhí)行流,使得CPU可以執(zhí)行新的任務(wù)。3、FreeRTOS在STM32上的移植3、FreeRTOS在STM32上的移植

要在STM32上移植FreeRTOS內(nèi)核,首先需要了解FreeRTOS的特點和原理。FreeRTOS是一個輕量級的實時操作系統(tǒng)(RTOS),它具有可移植性、可擴展性和可定制性,廣泛應(yīng)用于嵌入式系統(tǒng)開發(fā)。在STM32上移植FreeRTOS,需要對其內(nèi)核進行定制和優(yōu)化,以適應(yīng)STM32的硬件環(huán)境和資源限制。

FreeRTOS內(nèi)核的主要組成部分包括:

1)任務(wù)調(diào)度器(TaskScheduler):負(fù)責(zé)調(diào)度和管理任務(wù),實現(xiàn)多任務(wù)的并發(fā)執(zhí)行。

2)中斷管理器(InterruptManager):負(fù)責(zé)處理硬件中斷,并在必要時喚醒任務(wù)。

3)時間片輪轉(zhuǎn)調(diào)度器(Round-RobinScheduler):負(fù)責(zé)在任務(wù)間進行時間片輪轉(zhuǎn)調(diào)度,以確保每個任務(wù)都能得到執(zhí)行。

4)內(nèi)存管理器(MemoryManager):負(fù)責(zé)分配和管理內(nèi)存資源,以支持任務(wù)的運行。

5)消息隊列(MessageQueue):用于任務(wù)之間的通信和同步。

在進行FreeRTOS在STM32上的移植時,需要注意以下幾點:

1)環(huán)境搭建:首先需要搭建適合STM32開發(fā)的環(huán)境,配置開發(fā)工具鏈、下載器和調(diào)試器等。

2)硬件抽象層(HAL):為了使FreeRTOS更好地適應(yīng)STM32的硬件環(huán)境,需要編寫硬件抽象層(HAL)來封裝STM32的硬件接口和功能,以便于任務(wù)調(diào)用來訪問硬件資源。

3)中斷處理:STM32的中斷處理與傳統(tǒng)的馮·諾依曼架構(gòu)不同,因此需要針對STM32的特點進行中斷處理程序的編寫。

4)任務(wù)調(diào)度:根據(jù)具體應(yīng)用場景的需求,定制適合的任務(wù)調(diào)度策略,例如時間片輪轉(zhuǎn)、優(yōu)先級調(diào)度等。

5)內(nèi)存管理:根據(jù)STM32的內(nèi)存資源情況,制定合適的內(nèi)存管理策略,以支持多任務(wù)的并發(fā)執(zhí)行。

6)調(diào)試與仿真:在移植過程中需要進行仿真調(diào)試,以便及時發(fā)現(xiàn)和解決問題。

在具體實現(xiàn)上,可以參考以下步驟:

1)安裝STM32的開發(fā)環(huán)境(例如KeilMDK或IAREmbeddedWorkbench)。

2)配置開發(fā)工具鏈和下載器,設(shè)置調(diào)試器參數(shù)。

3)編寫HAL層代碼,封裝STM32的硬件接口和功能。

4)根據(jù)具體應(yīng)用場景的需求,定制任務(wù)調(diào)度策略和中斷處理程序。

5)編寫FreeRTOS的初始化代碼,配置中斷、任務(wù)調(diào)度器和時間片等組件。

6)編寫應(yīng)用程序代碼,創(chuàng)建任務(wù)、消息隊列和同步機制等必要組件。

7)編譯、鏈接和下載應(yīng)用程序到STM32上,進行仿真調(diào)試和測試。

總之,STM32上移植FreeRTOS需要對其內(nèi)核進行定制和優(yōu)化,以適應(yīng)STM32的硬件環(huán)境和資源限制。通過編寫HAL層代碼、定制任務(wù)調(diào)度策略和中斷處理程序等步驟,可以實現(xiàn)FreeRTOS在STM32上的成功移植和應(yīng)用。4、實戰(zhàn):創(chuàng)建一個簡單的FreeRTOS任務(wù)在理解了FreeRTOS內(nèi)核的基本概念和STM32的相關(guān)知識后,我們現(xiàn)在來實戰(zhàn)創(chuàng)建一個簡單的FreeRTOS任務(wù)。本節(jié)將通過一個簡單的例子,演示如何使用FreeRTOS創(chuàng)建任務(wù)、調(diào)度任務(wù)以及任務(wù)之間的通信。

首先,我們需要包含F(xiàn)reeRTOS的頭文件。在STM32的工程中,通常包含F(xiàn)reeRTOS/include/FreeRTOS.h和FreeRTOS/include/task.h。在我們的例子中,我們需要使用FreeRTOS.h中的portmacro.h和portable.h,以及task.h。

接下來,我們需要定義一個任務(wù)函數(shù)。任務(wù)函數(shù)是一個由FreeRTOS調(diào)用的函數(shù),它可以在調(diào)度器運行時反復(fù)執(zhí)行。以下是一個簡單的任務(wù)函數(shù)的例子:

這個函數(shù)有一個參數(shù)pvParameter,它是任務(wù)函數(shù)的參數(shù)。這個參數(shù)可以在任務(wù)創(chuàng)建時指定,也可以在任務(wù)運行時通過vTaskSetPriority()函數(shù)更改。

要創(chuàng)建任務(wù),我們需要調(diào)用xTaskCreate()函數(shù)。以下是一個簡單的例子:

在這個例子中,我們創(chuàng)建了一個名為"MyTask"的任務(wù),它執(zhí)行vTaskFunction函數(shù)。任務(wù)的堆棧大小為configMINIMAL_STACK_SIZE,優(yōu)先級為tskIDLE_PRIORITY,任務(wù)句柄存儲在xTask中。如果任務(wù)創(chuàng)建成功,xTaskCreate()函數(shù)將返回非空的任務(wù)句柄,否則返回NULL。

最后,我們需要通過調(diào)用vTaskStartScheduler()函數(shù)啟動調(diào)度器。這將導(dǎo)致調(diào)度器開始運行,并調(diào)度各個任務(wù)。以下是一個簡單的例子:

在這個例子中,如果調(diào)度器啟動成功,xTaskStartScheduler()函數(shù)將返回pdPASS,否則返回其他值。

通過這個簡單的例子,我們可以看到FreeRTOS任務(wù)的創(chuàng)建、調(diào)度和通信是非常靈活和強大的。大家可以根據(jù)大家的具體需求和應(yīng)用場景,創(chuàng)建不同的任務(wù)來滿足大家的項目需求。FreeRTOS還提供了很多其他的任務(wù)管理和調(diào)度功能,比如優(yōu)先級調(diào)度、時間片輪轉(zhuǎn)、任務(wù)撤銷等等,這些功能都可以根據(jù)大家的需求進行配置和使用。三、FreeRTOS應(yīng)用開發(fā)1、實戰(zhàn):使用FreeRTOS的任務(wù)管理功能在這個實戰(zhàn)部分,我們將深入探討FreeRTOS的任務(wù)管理功能,并展示如何將其應(yīng)用于STM32微控制器的應(yīng)用開發(fā)中。首先,我們來了解FreeRTOS的任務(wù)管理功能。

FreeRTOS的任務(wù)管理功能是其核心特性之一,它允許多個任務(wù)同時運行,并且每個任務(wù)都可以獨立地執(zhí)行。任務(wù)可以是任何可執(zhí)行代碼塊,例如中斷服務(wù)程序、用戶自定義的函數(shù)等。

在FreeRTOS中,任務(wù)管理功能的實現(xiàn)主要涉及以下幾個步驟:

(1)任務(wù)創(chuàng)建:通過調(diào)用xTaskCreate()函數(shù)來創(chuàng)建一個新任務(wù)。這個函數(shù)需要傳入任務(wù)函數(shù)、任務(wù)名稱、任務(wù)優(yōu)先級等參數(shù)。

(2)任務(wù)調(diào)度:在任務(wù)創(chuàng)建后,F(xiàn)reeRTOS會通過輪詢機制根據(jù)任務(wù)的優(yōu)先級來調(diào)度任務(wù)。當(dāng)一個任務(wù)獲得CPU使用權(quán)時,它就可以執(zhí)行相應(yīng)的任務(wù)函數(shù)。

(3)任務(wù)執(zhí)行:當(dāng)任務(wù)獲得CPU使用權(quán)后,它就會執(zhí)行相應(yīng)的任務(wù)函數(shù),直到任務(wù)函數(shù)執(zhí)行完成或者發(fā)生中斷。

在STM32應(yīng)用開發(fā)中,我們可以利用FreeRTOS的任務(wù)管理功能來提高工作效率。例如,我們可以通過創(chuàng)建多個任務(wù)來實現(xiàn)多傳感器數(shù)據(jù)采集、多路PWM輸出等功能。下面是一個使用FreeRTOS任務(wù)管理功能的示例:

假設(shè)我們要設(shè)計一個基于STM32和FreeRTOS的任務(wù)管理示例,以實現(xiàn)多路PWM信號輸出。首先,我們需要引入FreeRTOS內(nèi)核和STM32的相關(guān)庫文件。然后,創(chuàng)建一個名為“pwm_task”的任務(wù)來負(fù)責(zé)PWM信號的輸出。該任務(wù)的具體實現(xiàn)代碼如下:

在上述代碼中,我們首先定義了一個名為“pwm_task”的任務(wù)。在該任務(wù)中,我們使用STM32的HAL庫來配置TIM1的PWM模式,并設(shè)置PWM信號的周期和占空比。然后,通過調(diào)用vTaskDelay()函數(shù)來實現(xiàn)延時,從而控制PWM信號的輸出占空比。在本例中,我們將PWM信號的周期設(shè)置為1ms,并將占空比在0和50%之間交替變化。

最后,我們可以在mn()函數(shù)中使用xTaskCreate()函數(shù)來創(chuàng)建pwm_task任務(wù),并調(diào)用vTaskStartScheduler()函數(shù)來啟動任務(wù)調(diào)度器。這樣,F(xiàn)reeRTOS就會根據(jù)任務(wù)的優(yōu)先級和調(diào)度規(guī)則來調(diào)度pwm_task任務(wù)的執(zhí)行,從而實現(xiàn)多路PWM信號的輸出。2、實戰(zhàn):使用FreeRTOS的同步和通信機制FreeRTOS是一個流行的實時操作系統(tǒng)(RTOS),它為嵌入式系統(tǒng)提供了多任務(wù)管理、中斷處理、隊列管理、時間管理等功能。在前面的章節(jié)中,我們已經(jīng)了解了FreeRTOS的核心理念和基本使用方法。本節(jié)我們將通過一些實例來探討FreeRTOS的同步和通信機制。

FreeRTOS提供了多種同步和通信機制,包括:

1、消息隊列:消息隊列是一種線程間的通信方式,可以用于不同任務(wù)之間的數(shù)據(jù)共享和消息傳遞。FreeRTOS提供了隊列緩沖區(qū)管理函數(shù),可以創(chuàng)建、銷毀、查詢隊列,以及發(fā)送和接收消息。

2、事件組:事件組是一種同步機制,可以用于多個任務(wù)之間的協(xié)同工作。每個任務(wù)都可以分配一個或多個事件,并且可以使用事件組來等待這些事件的發(fā)生。當(dāng)事件發(fā)生時,任務(wù)將被喚醒并繼續(xù)執(zhí)行。

3、互斥鎖:互斥鎖是一種同步機制,可以用于保護共享資源的訪問。當(dāng)一個任務(wù)正在訪問共享資源時,其他任務(wù)將被阻塞,直到共享資源被釋放。

4、條件變量:條件變量是一種同步機制,可以用于實現(xiàn)任務(wù)之間的條件等待。當(dāng)某個條件滿足時,一個或多個任務(wù)將被喚醒并繼續(xù)執(zhí)行。

下面我們通過一個實例來演示如何使用消息隊列實現(xiàn)線程間的通信。

首先,我們需要創(chuàng)建一個隊列緩沖區(qū),如下所示:

接下來,在任務(wù)中發(fā)送和接收消息,如下所示:

在另一個任務(wù)中接收消息,如下所示:

在這個例子中,我們創(chuàng)建了一個隊列緩沖區(qū),并在一個任務(wù)中發(fā)送消息,在另一個任務(wù)中接收消息。通過使用消息隊列,我們可以在不同的任務(wù)之間傳遞數(shù)據(jù)和消息,實現(xiàn)線程間的通信。

除了消息隊列,F(xiàn)reeRTOS還提供了其他同步和通信機制,可以根據(jù)實際需求進行選擇和使用。這些機制可以幫助我們更好地管理嵌入式系統(tǒng)的資源,提高系統(tǒng)的可靠性和穩(wěn)定性。3、實戰(zhàn):使用FreeRTOS進行中斷處理在《FreeRTOS內(nèi)核實現(xiàn)與應(yīng)用開發(fā)實戰(zhàn)指南:基于STM32》中,我們將探討FreeRTOS內(nèi)核實現(xiàn)的關(guān)鍵細(xì)節(jié),以及如何將其應(yīng)用于STM32單片機。在此過程中,我們將深入了解FreeRTOS中斷處理的原理和方法,以便在應(yīng)用開發(fā)中更好地利用。

FreeRTOS是一個流行的實時操作系統(tǒng)(RTOS),它為嵌入式系統(tǒng)開發(fā)提供了豐富的功能和靈活的解決方案。FreeRTOS具有可移植性、可擴展性和可定制性,這使得它成為許多嵌入式開發(fā)項目的理想選擇。而在STM32單片機上,F(xiàn)reeRTOS可以發(fā)揮其強大的處理能力和高效的內(nèi)存管理,幫助我們實現(xiàn)更高級別的任務(wù)調(diào)度和中斷處理。

基于STM32的FreeRTOS中斷處理是通過中斷服務(wù)程序(ISR)實現(xiàn)的。當(dāng)STM32單片機的外部設(shè)備或內(nèi)部定時器觸發(fā)中斷時,相應(yīng)的ISR將被執(zhí)行。在ISR中,我們可以進行快速的任務(wù)切換和關(guān)鍵任務(wù)的執(zhí)行,以保證系統(tǒng)的實時性和響應(yīng)速度。

為了更好地說明如何使用FreeRTOS進行中斷處理,讓我們以一個簡單的例子來說明。假設(shè)我們使用一個STM32單片機的GPIO引腳作為外部中斷源,當(dāng)GPIO引腳電平發(fā)生變化時,觸發(fā)中斷并將任務(wù)從就緒隊列中切換到對應(yīng)的中斷服務(wù)程序。

以下是一段偽代碼,演示了如何使用FreeRTOS進行中斷處理:

在上述示例中,我們首先在中斷處理程序中讀取GPIO狀態(tài)。然后,根據(jù)不同的GPIO狀態(tài)執(zhí)行相應(yīng)的任務(wù)。在此過程中,我們使用xHigherPriorityTaskWoken標(biāo)志位表示是否有更高優(yōu)先級的任務(wù)被喚醒。如果有,我們則在中斷處理程序的最后調(diào)用portYIELD()函數(shù)進行任務(wù)調(diào)度。這樣,F(xiàn)reeRTOS會根據(jù)優(yōu)先級調(diào)度算法切換到更高優(yōu)先級的任務(wù),確保實時性和關(guān)鍵任務(wù)的執(zhí)行。

通過以上實戰(zhàn)示例,我們可以看到使用FreeRTOS進行中斷處理的優(yōu)勢。FreeRTOS提供了豐富的API和可定制的功能,使得我們能夠根據(jù)不同的應(yīng)用場景進行靈活的任務(wù)調(diào)度和中斷處理。FreeRTOS還具備高效的任務(wù)切換和中斷處理機制,以確保系統(tǒng)的實時性和響應(yīng)速度。這些優(yōu)勢使得FreeRTOS成為嵌入式應(yīng)用開發(fā)的強大工具。

總之,《FreeRTOS內(nèi)核實現(xiàn)與應(yīng)用開發(fā)實戰(zhàn)指南:基于STM32》將帶領(lǐng)大家深入了解FreeRTOS的核心概念、API及其實戰(zhàn)應(yīng)用。結(jié)合STM32單片機的特點,我們將共同探討實時任務(wù)調(diào)度、中斷處理等關(guān)鍵技術(shù)的實現(xiàn)方法。通過實戰(zhàn)案例的解析,大家將更加深入地理解FreeRTOS的應(yīng)用技巧和優(yōu)勢。我們也鼓勵大家在閱讀本指南后,積極開展實踐探索,以便更好地掌握FreeRTOS內(nèi)核實現(xiàn)與應(yīng)用開發(fā)的精髓。4、實戰(zhàn):使用FreeRTOS進行時間片輪詢調(diào)度4、實戰(zhàn):使用FreeRTOS進行時間片輪詢調(diào)度

在嵌入式系統(tǒng)中,時間片輪詢調(diào)度是一種非常重要的任務(wù)調(diào)度方法。FreeRTOS作為一種實時操作系統(tǒng),支持時間片輪詢調(diào)度。在FreeRTOS中,每個任務(wù)都被賦予一個優(yōu)先級,并且每個優(yōu)先級都有自己的時間片。在每個時間片結(jié)束時,系統(tǒng)會自動從優(yōu)先級隊列中選取下一個任務(wù)執(zhí)行。

時間片輪詢調(diào)度適用于那些需要公平分享CPU時間資源的場景,如多任務(wù)環(huán)境下的CPU資源分配。下面我們以一個實際案例來說明如何使用FreeRTOS進行時間片輪詢調(diào)度。

假設(shè)我們有一個STM32單片機,需要同時運行多個任務(wù),如按鍵輸入、LED閃爍、串口通信等。為了公平地分配CPU時間資源,我們可以為每個任務(wù)分配不同的優(yōu)先級和時間片。

首先,我們需要編寫各個任務(wù)的函數(shù),并將它們添加到FreeRTOS的任務(wù)隊列中。例如,以下代碼演示了一個簡單的按鍵輸入任務(wù):

在上面的代碼中,我們使用了FreeRTOS的vTaskDelay函數(shù)來延時一段時間,以等待下一個按鍵狀態(tài)變化。這個延時的時間就是該任務(wù)的時間片。

接下來,我們需要在主函數(shù)中創(chuàng)建FreeRTOS任務(wù),并將它們添加到任務(wù)隊列中。在主函數(shù)中,我們可以使用以下代碼來創(chuàng)建和添加任務(wù):

在上面的代碼中,我們使用xTaskCreate函數(shù)創(chuàng)建了三個任務(wù),并將它們添加到FreeRTOS的任務(wù)隊列中。每個任務(wù)的函數(shù)和參數(shù)都是根據(jù)實際需求編寫的。在這里,我們?yōu)槊總€任務(wù)設(shè)置了不同的優(yōu)先級(1、2、3),并且每個優(yōu)先級的時間片是不同的。

最后,我們使用vTaskStartScheduler函數(shù)啟動FreeRTOS調(diào)度器。一旦調(diào)度器開始運行,系統(tǒng)就會根據(jù)優(yōu)先級和時間片自動分配CPU時間資源給各個任務(wù)。這樣,我們就可以實現(xiàn)時間片輪詢調(diào)度,并公平地分配CPU時間資源給多個任務(wù)。

總之,使用FreeRTOS進行時間片輪詢調(diào)度可以幫助我們在嵌入式系統(tǒng)中實現(xiàn)更加公平、高效的任務(wù)調(diào)度。在實際開發(fā)過程中,我們應(yīng)該根據(jù)實際需求選擇合適的時間片和優(yōu)先級,以確保系統(tǒng)的響應(yīng)速度和穩(wěn)定性。5、實戰(zhàn):使用FreeRTOS實現(xiàn)動態(tài)內(nèi)存分配《FreeRTOS內(nèi)核實現(xiàn)與應(yīng)用開發(fā)實戰(zhàn)指南:基于STM32》之五:實戰(zhàn)——使用FreeRTOS實現(xiàn)動態(tài)內(nèi)存分配

在實際應(yīng)用中,動態(tài)內(nèi)存分配是一種常見的需求。在FreeRTOS系統(tǒng)中,如何使用其內(nèi)核實現(xiàn)動態(tài)內(nèi)存分配呢?本節(jié)將通過分析FreeRTOS內(nèi)存管理機制,探討動態(tài)內(nèi)存分配的實現(xiàn)方法。

FreeRTOS的內(nèi)存管理機制

FreeRTOS具有一套完善的內(nèi)存管理機制,可以滿足實時系統(tǒng)的需求。它支持靜態(tài)內(nèi)存分配和動態(tài)內(nèi)存分配兩種方式。對于動態(tài)內(nèi)存分配,F(xiàn)reeRTOS提供了一組內(nèi)存管理函數(shù),包括:pvPortMalloc、vPortFree、vPortInitialiseMemory等。

使用FreeRTOS實現(xiàn)動態(tài)內(nèi)存分配

在STM32上使用FreeRTOS實現(xiàn)動態(tài)內(nèi)存分配,首先需要初始化FreeRTOS內(nèi)存管理器。這可以通過調(diào)用vPortInitialiseMemory函數(shù)來完成,該函數(shù)會根據(jù)系統(tǒng)內(nèi)存情況,為FreeRTOS的內(nèi)存管理器分配相應(yīng)的內(nèi)存空間。

接下來,我們可以使用pvPortMalloc函數(shù)來進行動態(tài)內(nèi)存分配。pvPortMalloc函數(shù)的原型如下:

void*pvPortMalloc(size_txWantedSize,portMUX_TYPE*pxMutex);

其中,xWantedSize參數(shù)表示申請的內(nèi)存大小,pxMutex參數(shù)是一個指向portMUX_TYPE類型的指針,用于同步內(nèi)存區(qū)域的訪問。

示例代碼如下所示,演示了如何使用pvPortMalloc函數(shù)申請32字節(jié)的內(nèi)存空間:

這段代碼首先通過調(diào)用pvPortMalloc函數(shù)申請32字節(jié)的內(nèi)存空間,并將返回的指針存儲在pvMem變量中。如果申請成功,我們可以在任務(wù)中自由使用pvMem指向的內(nèi)存空間。當(dāng)任務(wù)結(jié)束時,我們通過調(diào)用vPortFree函數(shù)來釋放這塊內(nèi)存。

此外,為了更好地管理內(nèi)存資源,我們還可以使用FreeRTOS提供的內(nèi)存池管理方式。通過預(yù)先分配固定大小的內(nèi)存塊,并使用鏈表將它們鏈接起來,可以在需要時動態(tài)地分配和回收內(nèi)存。這種方式可以提高內(nèi)存利用率和系統(tǒng)性能。

總結(jié)

本節(jié)實戰(zhàn)指南通過分析FreeRTOS的內(nèi)存管理機制,探討了使用FreeRTOS實現(xiàn)動態(tài)內(nèi)存分配的方法。我們展示了如何使用pvPortMalloc函數(shù)申請內(nèi)存空間,并使用vPortFree函數(shù)釋放內(nèi)存。此外,我們還介紹了內(nèi)存池管理方式的優(yōu)勢和應(yīng)用。熟練掌握這些內(nèi)存管理技巧,對于開發(fā)基于STM32和FreeRTOS的應(yīng)用程序具有重要意義。

展望未來,隨著嵌入式系統(tǒng)復(fù)雜性的不斷提高,對內(nèi)存管理效率和應(yīng)用性能的要求也將越來越高。希望本節(jié)實戰(zhàn)指南能為廣大開發(fā)人員提供有益的參考,并引發(fā)大家對嵌入式實時系統(tǒng)內(nèi)存管理的深入思考和研究。6、實戰(zhàn):使用FreeRTOS實現(xiàn)隊列和信號量6、實戰(zhàn):使用FreeRTOS實現(xiàn)隊列和信號量

FreeRTOS是一個流行的實時操作系統(tǒng)(RTOS),可用于STM32等嵌入式系統(tǒng)的開發(fā)。在前面的章節(jié)中,我們已經(jīng)介紹了FreeRTOS的核心理念和基本使用方法。在本章中,我們將通過具體實例來介紹如何使用FreeRTOS實現(xiàn)隊列和信號量,這兩種機制在并發(fā)和同步中非常有用。

隊列(Queue)

隊列是一種特殊的線性表,只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作。隊列中的元素是先進先出(FIFO)的。在FreeRTOS中,我們可以使用xQueueCreate函數(shù)創(chuàng)建一個隊列。以下是一個簡單的例子:

在這個例子中,我們創(chuàng)建了一個大小為10,類型為ulMessage的隊列。如果隊列已滿,xQueueCreate將返回NULL。

信號量(Semaphore)

信號量是一種同步機制,用于控制對臨界資源的訪問。在FreeRTOS中,我們可以使用xSemaphoreCreateBinary函數(shù)創(chuàng)建一個二進制信號量。以下是一個簡單的例子:

在這個例子中,我們創(chuàng)建了一個初始值為1的二進制信號量。信號量的值表示可用的資源數(shù)量。如果一個任務(wù)試圖獲取一個不可用的資源(信號量值為0),那么這個任務(wù)將被阻塞,直到資源可用。當(dāng)任務(wù)釋放資源時,信號量的值將增加1,這會允許其他任務(wù)訪問該資源。7、實戰(zhàn):使用FreeRTOS實現(xiàn)軟件定時器在前面的章節(jié)中,我們已經(jīng)了解了FreeRTOS內(nèi)核的基本概念和STM32的相關(guān)知識。在本節(jié)中,我們將通過一個具體案例來介紹如何使用FreeRTOS實現(xiàn)軟件定時器。

首先,我們需要了解FreeRTOS提供的定時器接口。FreeRTOS提供了兩個定時器API:xTimerCreate和xTimerGenericCommand。其中,xTimerCreate用于創(chuàng)建一個定時器對象,xTimerGenericCommand用于啟動、停止、重置定時器以及設(shè)置定時器回調(diào)函數(shù)。

下面是一個使用FreeRTOS實現(xiàn)軟件定時器的示例代碼,該代碼使用STM32的硬件定時器作為FreeRTOS定時器的底層實現(xiàn):

在這個例子中,我們首先初始化了STM32的硬件定時器。然后,使用xTimerCreate創(chuàng)建了一個名為"MyTimer"的FreeRTOS定時器對象,設(shè)置了定時器的時間間隔為1000毫秒,并將回調(diào)函數(shù)設(shè)置為timerCallback。接著,使用xTimerGenericCommand啟動了定時器。然后,我們創(chuàng)建了一個任務(wù),將回調(diào)函數(shù)設(shè)置為taskCallback,并啟動了任務(wù)調(diào)度器。當(dāng)定時器計時到指定時間時,將觸發(fā)回調(diào)函數(shù)timerCallback。在回調(diào)函數(shù)中,我們可以根據(jù)實際需求來實現(xiàn)相應(yīng)的定時器邏輯。

這個例子只是一個簡單的演示,實際應(yīng)用中可能需要考慮更多因素,例如定時器的精度、中斷處理等。通過這個例子,我們可以看到使用FreeRTOS實現(xiàn)軟件定時器的步驟和優(yōu)勢。FreeRTOS提供了靈活而強大的定時器接口,使得我們可以在不同硬件平臺上輕松地實現(xiàn)定時器功能,并且可以與FreeRTOS的任務(wù)調(diào)度器協(xié)同工作,提高應(yīng)用程序的響應(yīng)速度和可靠性。8、實戰(zhàn):使用FreeRTOS實現(xiàn)互斥量和條件變量8、實戰(zhàn):使用FreeRTOS實現(xiàn)互斥量和條件變量

STM32單片機因其強大的處理能力和靈活的編程方式,廣泛應(yīng)用于各種實時系統(tǒng)中。為了更好地理解和應(yīng)用STM32,本章節(jié)將結(jié)合FreeRTOS內(nèi)核,通過實戰(zhàn)演練,詳細(xì)介紹如何使用FreeRTOS實現(xiàn)互斥量和條件變量。

一、互斥量

互斥量(Mutex)是一種同步機制,用于防止多個任務(wù)同時訪問同一資源,從而導(dǎo)致數(shù)據(jù)不一致。在FreeRTOS中,使用xSemaphoreCreateMutex()函數(shù)創(chuàng)建互斥量。

1、創(chuàng)建互斥量

2、獲取互斥量

3、釋放互斥量

二、條件變量

條件變量(ConditionVariables)是一種同步機制,用于實現(xiàn)任務(wù)間的條件等待。在FreeRTOS中,使用xSemaphoreCreateBinary()函數(shù)創(chuàng)建條件變量。

1、創(chuàng)建條件變量

2、等待條件變量

3、通知條件變量

三、案例分析

本節(jié)將以一個實際應(yīng)用案例來詳細(xì)展示如何使用FreeRTOS實現(xiàn)互斥量和條件變量。案例為一個簡單的生產(chǎn)者-消費者問題,生產(chǎn)者和消費者通過共享緩沖區(qū)交換數(shù)據(jù)。

1、創(chuàng)建互斥量和條件變量

2、生產(chǎn)者代碼9、實戰(zhàn):使用FreeRTOS實現(xiàn)內(nèi)存泄漏檢測在嵌入式系統(tǒng)中,內(nèi)存泄漏是一個常見的問題。內(nèi)存泄漏可能導(dǎo)致系統(tǒng)資源耗盡,甚至導(dǎo)致系統(tǒng)崩潰。因此,對內(nèi)存泄漏進行檢測和預(yù)防是非常重要的。在本實戰(zhàn)中,我們將使用FreeRTOS內(nèi)核實現(xiàn)內(nèi)存泄漏檢測。

FreeRTOS是一個流行的實時操作系統(tǒng),它支持多種處理器和硬件平臺,包括STM32單片機。FreeRTOS內(nèi)核具有高度可配置性,可以方便地支持各種應(yīng)用程序開發(fā)。此外,F(xiàn)reeRTOS還提供了豐富的調(diào)試和測試工具,使得內(nèi)存泄漏檢測變得更加容易。

為了在FreeRTOS內(nèi)核下實現(xiàn)內(nèi)存泄漏檢測,我們首先需要了解FreeRTOS的內(nèi)存管理機制。FreeRTOS內(nèi)核使用了一個自定義的內(nèi)存管理器,它能夠提供動態(tài)內(nèi)存分配和釋放的功能。內(nèi)存泄漏檢測的關(guān)鍵在于跟蹤這些內(nèi)存分配和釋放操作,以便在發(fā)生內(nèi)存泄漏時進行報警。

在具體實現(xiàn)上,我們需要在FreeRTOS的內(nèi)存管理器中添加一些額外的代碼。當(dāng)一個任務(wù)需要分配內(nèi)存時,我們在分配內(nèi)存之前,使用一個靜態(tài)變量記錄下當(dāng)前的內(nèi)存使用情況。當(dāng)任務(wù)釋放內(nèi)存時,我們再更新這個靜態(tài)變量。如果發(fā)現(xiàn)靜態(tài)變量的值在一段時間內(nèi)沒有變化,就說明內(nèi)存沒有被正確釋放,從而發(fā)生了內(nèi)存泄漏。

下面是一個簡單的示例代碼,演示了如何使用FreeRTOS實現(xiàn)內(nèi)存泄漏檢測:

在上述代碼中,我們首先定義了一個靜態(tài)變量currentMemoryUsage用于記錄當(dāng)前內(nèi)存使用情況。然后,我們定義了一個任務(wù)vMemoryLeakDetectionTask,該任務(wù)接收一個參數(shù),即需要分配的內(nèi)存大小。在任務(wù)中,我們首先嘗試為該大小的內(nèi)存進行分配,并更新currentMemoryUsage。然后,我們在釋放內(nèi)存時再次更新currentMemoryUsage。如果發(fā)現(xiàn)分配的內(nèi)存沒有被正確釋放,即currentMemoryUsage的值在一段時間內(nèi)沒有變化,我們就可以判定發(fā)生了內(nèi)存泄漏。在這種情況下,我們可以調(diào)用vApplicationMallocFledHook函數(shù)來處理內(nèi)存泄漏問題。

通過以上方法,我們可以實現(xiàn)基于FreeRTOS內(nèi)核的內(nèi)存泄漏檢測。在實際應(yīng)用中,我們還需要注意以下幾點:首先,我們需要定期檢查currentMemoryUsage的值,以便及時發(fā)現(xiàn)內(nèi)存泄漏問題;其次,我們需要注意處理異常情況,例如在任務(wù)或中斷服務(wù)程序中發(fā)生的內(nèi)存泄漏;最后,我們需要根據(jù)具體的應(yīng)用場景和需求來定制和優(yōu)化內(nèi)存泄漏檢測策略。10、實戰(zhàn):使用FreeRTOS實現(xiàn)動態(tài)電源管理在STM32的應(yīng)用開發(fā)中,動態(tài)電源管理是一個非常重要的技術(shù),它能夠幫助我們有效地降低系統(tǒng)的功耗,延長電池的使用時間,同時還可以根據(jù)系統(tǒng)負(fù)載情況動態(tài)調(diào)整電源策略。在本節(jié)中,我們將基于FreeRTOS內(nèi)核實現(xiàn),探討如何使用動態(tài)電源管理。

FreeRTOS是一個流行的實時操作系統(tǒng)(RTOS),它提供了豐富的中間件和API,可以幫助開發(fā)者快速構(gòu)建穩(wěn)定、高效的嵌入式系統(tǒng)。在STM32上使用FreeRTOS,可以實現(xiàn)多任務(wù)調(diào)度、中斷管理、消息隊列等功能,從而提升系統(tǒng)的響應(yīng)速度和可靠性。

在具體實現(xiàn)動態(tài)電源管理時,我們需要考慮以下步驟:

(1)硬件準(zhǔn)備

首先,我們需要選擇適合STM32的電源模塊和傳感器,以便實時監(jiān)測系統(tǒng)的功耗情況。同時,還需要準(zhǔn)備相應(yīng)的GPIO口,用于控制電源開關(guān)和調(diào)節(jié)器。

(2)軟件設(shè)計

在軟件方面,我們需要根據(jù)具體應(yīng)用場景,設(shè)計合適的電源管理策略。例如,在空閑任務(wù)時關(guān)閉某些設(shè)備、在任務(wù)執(zhí)行過程中動態(tài)調(diào)節(jié)CPU頻率等。此外,還需要編寫相應(yīng)的中斷服務(wù)程序,以便實時響應(yīng)系統(tǒng)狀態(tài)變化。

(3)FreeRTOS任務(wù)調(diào)度

利用FreeRTOS的任務(wù)調(diào)度功能,我們可以將上述電源管理策略封裝成不同的任務(wù),并按照優(yōu)先級進行調(diào)度。例如,高優(yōu)先級的任務(wù)可以是實時性要求較高的設(shè)備控制或數(shù)據(jù)采集,低優(yōu)先級的任務(wù)則可以是功耗較大的設(shè)備關(guān)閉或系統(tǒng)休眠。

(4)動態(tài)電源管理實現(xiàn)

具體實現(xiàn)時,我們可以通過以下FreeRTOSAPI實現(xiàn)動態(tài)電源管理:

1、xTaskCreate:創(chuàng)建任務(wù)并指定任務(wù)的執(zhí)行函數(shù)和優(yōu)先級;

2、vTaskDelay:使任務(wù)延遲一定時間再執(zhí)行;

3、xQueueSend:通過消息隊列傳遞任務(wù)狀態(tài)和控制信號;

4、xSemaphoreTake:獲取信號量以控制電源開關(guān)和調(diào)節(jié)器;

5、FreeRTOS_CLI:通過FreeRTOS命令行接口配置任務(wù)和參數(shù)。

需要注意的是,在動態(tài)電源管理過程中,我們需要密切關(guān)注系統(tǒng)的狀態(tài)和功耗情況,以避免出現(xiàn)意外的錯誤或系統(tǒng)崩潰。因此,需要合理設(shè)置任務(wù)的優(yōu)先級、處理好任務(wù)間的同步和通信關(guān)系,同時還需要對關(guān)鍵代碼進行適當(dāng)?shù)淖⑨尯驼f明。

在實際應(yīng)用中,

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論