娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

基于STM32F103系統(tǒng)的FreeRTOS程序移植

發(fā)布者:GoldenHarmony最新更新時(shí)間:2024-09-03 來源: elecfans關(guān)鍵字:FreeRTOS  程序移植 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

1

FreeRTOS移植及配置


在程序中,移植了正點(diǎn)原子的基于STM32的FreeRTOS程序,編寫了自己的內(nèi)存管理程序malloc.c,程序主要結(jié)構(gòu)如下:

圖片

FreeRTOS_CORE中是FreeRTOS的核心文件,包括與協(xié)程有關(guān)的croutine.c,與事件組有關(guān)的event_groups.c,與列表有關(guān)的list.c,與隊(duì)列有關(guān)的queue.c,與任務(wù)有關(guān)的tasks.c,與定時(shí)器時(shí)鐘有關(guān)的timers.c。


FreeRTOS_PORTABLE中是與FreeRTOS內(nèi)存管理有關(guān)的文件,包括port.c和heap_4.c,port.c中主要包含一些與中斷有關(guān)的函數(shù),heap_4.c上一篇文章有詳細(xì)介紹,與內(nèi)存分配釋放有關(guān)。


在FreeRTOSConfig.h文件中,對FreeRTOS的很多參數(shù)進(jìn)行了配置,用戶可以修改其中的文件對程序參量進(jìn)行配置并對程序功能進(jìn)行選擇使用。


先聲明了一個(gè)斷言,方便提示用戶,當(dāng)程序出錯(cuò)時(shí)在FreeRTOS的那個(gè)程序哪一行出錯(cuò)。


//斷言

#define vAssertCalled(char,int) printf('Error:%s,%drn',char,int)

#define configASSERT(x) if((x)==0) vAssertCalled(__FILE__,__LINE__)

然后是與任務(wù)調(diào)度算法相關(guān)的配置選項(xiàng),主要的是configUSE_PREEMPTION和configUSE_TIME_SLICING,不過一般都開啟,置1就行。


/***************************************************************************************************************/

/*                                           調(diào)度算法配置選項(xiàng)                                                  */

/***************************************************************************************************************/

#define configUSE_PREEMPTION          1                       //1使用搶占式內(nèi)核,0使用協(xié)程

#define configUSE_TIME_SLICING          1            //1使能時(shí)間片調(diào)度(默認(rèn)是使能的),同等優(yōu)先級是否交替執(zhí)行

#define configUSE_PORT_OPTIMISED_TASK_SELECTION  1                       //1啟用特殊方法(使用硬件方法)來選擇下一個(gè)要運(yùn)行的任務(wù)

                                                                        //一般是硬件計(jì)算前導(dǎo)零指令,如果所使用的

                                                                        //MCU沒有這些硬件指令的話此宏應(yīng)該設(shè)置為0!

#define configUSE_TICKLESS_IDLE          0                       //1啟用低功耗tickless模式

然后是基礎(chǔ)配置選項(xiàng),重要的幾個(gè)是configUSE_QUEUE_SETS、configCPU_CLOCK_HZ、configTICK_RATE_HZ、configMAX_TASK_NAME_LEN、configUSE_16_BIT_TICKS,其他保持默認(rèn),configCPU_CLOCK_HZ要改成我們單片機(jī)的時(shí)鐘頻率,這里使用了代碼定義的量SystemCoreClock,configTICK_RATE_HZ時(shí)鐘節(jié)拍頻率設(shè)置為1000,也就是周期為1ms,任務(wù)名字字符串長度configMAX_TASK_NAME_LEN如果你創(chuàng)建任務(wù)時(shí)的命名很長,需要改一下,configUSE_16_BIT_TICKS使用的時(shí)鐘位數(shù),需要和單片機(jī)一致,STM32為32位,這里需要將這個(gè)宏定義為0。


/***************************************************************************************************************/

/*                                        FreeRTOS基礎(chǔ)配置配置選項(xiàng)                                               */

/***************************************************************************************************************/

#define configUSE_QUEUE_SETS          1                       //為1時(shí)啟用隊(duì)列

#define configCPU_CLOCK_HZ            (SystemCoreClock)       //CPU頻率

#define configTICK_RATE_HZ            (1000)                  //時(shí)鐘節(jié)拍頻率,這里設(shè)置為1000,周期就是1ms

#define configMAX_PRIORITIES          (32)                    //可使用的最大優(yōu)先級

#define configMINIMAL_STACK_SIZE        ((unsigned short)130)   //空閑任務(wù)使用的堆棧大小

#define configMAX_TASK_NAME_LEN          (20)                    //任務(wù)名字字符串長度


#define configUSE_16_BIT_TICKS          0                       //系統(tǒng)節(jié)拍計(jì)數(shù)器變量數(shù)據(jù)類型,

                                                                        //1表示為16位無符號整形,0表示為32位無符號整形

#define configIDLE_SHOULD_YIELD          1                       //為1時(shí)空閑任務(wù)放棄CPU使用權(quán)給其他同優(yōu)先級的用戶任務(wù)

#define configUSE_TASK_NOTIFICATIONS            1                       //為1時(shí)開啟任務(wù)通知功能,默認(rèn)開啟

#define configUSE_MUTEXES            1                       //為1時(shí)使用互斥信號量

#define configQUEUE_REGISTRY_SIZE        8                       //不為0時(shí)表示啟用隊(duì)列記錄,具體的值是可以

                                                                        //記錄的隊(duì)列和信號量最大數(shù)目。

#define configCHECK_FOR_STACK_OVERFLOW      0                       //大于0時(shí)啟用堆棧溢出檢測功能,如果使用此功能

                                                                        //用戶必須提供一個(gè)棧溢出鉤子函數(shù),如果使用的話

                                                                        //此值可以為1或者2,因?yàn)橛袃煞N棧溢出檢測方法。

#define configUSE_RECURSIVE_MUTEXES        1                       //為1時(shí)使用遞歸互斥信號量

#define configUSE_MALLOC_FAILED_HOOK      0                       //1使用內(nèi)存申請失敗鉤子函數(shù)

#define configUSE_APPLICATION_TASK_TAG      0                       //1為每個(gè)任務(wù)分配一個(gè)“標(biāo)簽”值,標(biāo)簽鉤子函數(shù)

#define configUSE_COUNTING_SEMAPHORES      1                       //為1時(shí)使用計(jì)數(shù)信號量

然后是與內(nèi)存申請有關(guān)配置選項(xiàng),一般保持默認(rèn)就行,系統(tǒng)總堆大小可能需要微調(diào)。


/***************************************************************************************************************/

#define configSUPPORT_DYNAMIC_ALLOCATION        1                       //支持動(dòng)態(tài)內(nèi)存申請

#define configTOTAL_HEAP_SIZE          ((size_t)(20*1024))     //系統(tǒng)所有總的堆大小

然后是與鉤子函數(shù)有關(guān)的配置選項(xiàng),我們不需要使用鉤子函數(shù),也不建議初學(xué)者用,因?yàn)榭臻e任務(wù)的鉤子函數(shù)需要寫的很高效率盡量不阻塞。


#define configUSE_IDLE_HOOK            0                       //1,使用空閑鉤子;0,不使用

#define configUSE_TICK_HOOK            0                       //1,使用時(shí)間片鉤子;0,不使用

與運(yùn)行時(shí)間和任務(wù)狀態(tài)收集有關(guān)的配置選項(xiàng) ,這部分主要與調(diào)試代碼有關(guān),測一下代碼運(yùn)行時(shí)間,觀察效率等。


/***************************************************************************************************************/

/*                                FreeRTOS與運(yùn)行時(shí)間和任務(wù)狀態(tài)收集有關(guān)的配置選項(xiàng)                                 */

/***************************************************************************************************************/

#define configGENERATE_RUN_TIME_STATS                  0                               //為1時(shí)啟用運(yùn)行時(shí)間統(tǒng)計(jì)功能

#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()        ConfigureTimeForRunTimeStats()  //定時(shí)器3提供時(shí)間統(tǒng)計(jì)的時(shí)基,頻率為10K,即周期為100us

#define portGET_RUN_TIME_COUNTER_VALUE()            FreeRTOSRunTimeTicks          //獲取時(shí)間統(tǒng)計(jì)時(shí)間值


#define configUSE_TRACE_FACILITY                1                       //為1啟用可視化跟蹤調(diào)試

#define configUSE_STATS_FORMATTING_FUNCTIONS          1                       //與宏configUSE_TRACE_FACILITY同時(shí)為1時(shí)會(huì)編譯下面3個(gè)函數(shù)

與協(xié)程有關(guān)的配置選項(xiàng),保持默認(rèn),我們用不到協(xié)程。


/***************************************************************************************************************/

/*                                FreeRTOS與協(xié)程有關(guān)的配置選項(xiàng)                                                  */

/***************************************************************************************************************/

#define configUSE_CO_ROUTINES               0                       //為1時(shí)啟用協(xié)程,啟用協(xié)程以后必須添加文件croutine.c

#define configMAX_CO_ROUTINE_PRIORITIES         ( 2 )                   //協(xié)程的有效優(yōu)先級數(shù)目

[1] [2]
關(guān)鍵字:FreeRTOS  程序移植 引用地址:基于STM32F103系統(tǒng)的FreeRTOS程序移植

上一篇:利用STM32CubeMX解讀時(shí)鐘樹
下一篇:STM32單片機(jī)中的C語言基礎(chǔ)知識

推薦閱讀最新更新時(shí)間:2025-04-06 23:24

基于STM32F103和nRF24L01的近程無線數(shù)傳系統(tǒng)設(shè)計(jì)
簡介:近年來, 隨著無線通信技術(shù)的發(fā)展, 無線通訊設(shè)備的集成化越來越高。本文介紹了一種選用高性能、低功耗的32位微處理器STM32F103和射頻收發(fā)芯片nRF24L01來設(shè)計(jì)短距離無線數(shù)據(jù)傳輸系統(tǒng)的具體方法。 1 系統(tǒng)設(shè)計(jì) 短距離無線數(shù)傳系統(tǒng)主要由電源管理器AMC7635、微控制器STM32F103、射頻收發(fā)器nrf24l01三部分組成。下面分別介紹其關(guān)鍵電路。 1.1 電源電路 本設(shè)計(jì)的電源采用3.7V鋰電池供電, 然后經(jīng)低壓降電源管理芯片AMC7635, 以產(chǎn)生3.0V的電壓來為STM32F103和nRF24L01供電, 圖1所示是本系統(tǒng)的供電電路。 圖1 系統(tǒng)供電電路 1.2 微控制器電路 微控制器選用帶AR
[單片機(jī)]
基于<font color='red'>STM32F103</font>和nRF24L01的近程無線數(shù)傳<font color='red'>系統(tǒng)</font>設(shè)計(jì)
基于STM32F103VCT6單片機(jī)的微位移控制系統(tǒng)設(shè)計(jì)
為實(shí)現(xiàn)X-Y-Z三維工作臺的精確定位,設(shè)計(jì)了一種基于STM32F103VCT6單片機(jī)和步進(jìn)電機(jī)的三維微位移控制系統(tǒng)。該系統(tǒng)可與上位機(jī)實(shí)現(xiàn)串口通信,接收上位機(jī)命令并把處理結(jié)果反饋給上位機(jī);根據(jù)光柵傳感器提供的位置反饋信息,系統(tǒng)可以通過對步進(jìn)電機(jī)的方向、速度調(diào)節(jié)來實(shí)現(xiàn)精確定位;采用勻加速和勻減速方式對步進(jìn)電機(jī)的速度進(jìn)行調(diào)節(jié),避免了因步進(jìn)電機(jī)的突然加速和急停所帶來的丟步和沖擊現(xiàn)象。控制系統(tǒng)的測量實(shí)驗(yàn)結(jié)果表明,步進(jìn)電機(jī)運(yùn)行平穩(wěn),噪音低,定位精度高,控制系統(tǒng)性能穩(wěn)定可靠。 微位移控制系統(tǒng)是一種集機(jī)械、光學(xué)、電子和計(jì)算機(jī)等多種技術(shù)于一體的智能化儀器。在先進(jìn)制造技術(shù)與科學(xué)研究中有著極其廣泛的應(yīng)用,也是現(xiàn)代工業(yè)檢測、質(zhì)量控制和制造技術(shù)
[單片機(jī)]
基于<font color='red'>STM32F103</font>VCT6單片機(jī)的微位移控制<font color='red'>系統(tǒng)</font>設(shè)計(jì)
STM32F103攻城筆記】內(nèi)部晶振HSI倍頻設(shè)置系統(tǒng)時(shí)鐘
首先說明,因?yàn)镾TM32芯片的型號不同,所以對于不同芯片有不同頻率的限制,比如某些時(shí)鐘頻率不能大于多少,這是根據(jù)手冊來設(shè)置的!但改變頻率的寄存器都一樣,只是我們設(shè)置頻率大小要受芯片的限制!下面我用的芯片型號是STM32F103VBT6!它就限制了內(nèi)部晶振的倍頻不能大于64MHz(但其實(shí)我實(shí)驗(yàn)出來是52MHz)! 本文是利用內(nèi)部晶振(HSI)來倍頻,與外部晶振倍頻區(qū)分開! 第一步:打開system_STM32f10x.c,找到函數(shù)void SystemInit (void){},把原有的都注釋掉,將下面的代碼復(fù)制進(jìn)去: /* 開啟HSI 即內(nèi)部晶振時(shí)鐘 */ RCC- CR |= (uint32_t)0x
[單片機(jī)]
【<font color='red'>STM32F103</font>攻城筆記】內(nèi)部晶振HSI倍頻設(shè)置<font color='red'>系統(tǒng)</font>時(shí)鐘
STM32程序移植技巧總結(jié)
1. 工程更換不同的STM32芯片 eg:stm32f103rct6 ---- stm32f103c8t6: 1.1. 修改芯片 點(diǎn)擊魔術(shù)棒,在出來的菜單欄里,Device 選項(xiàng)重新選擇芯片 1.2. 修改啟動(dòng)文件 此處舉例是 RCT6 修改為 C8T6,因?yàn)?flash 容量大小不一樣,所以需要對應(yīng)修改啟動(dòng)文件,如果是 flash 大小相同,此步驟不需要。此處由:startup_stm32f10x_hd.s修改為startup_stm32f10x_md.s 1.3. 修改全局宏定義 同樣先點(diǎn)擊魔術(shù)棒,在菜單欄選擇 C/C++。進(jìn)而修改全局宏定義。此處:STM32F10X_HD– STM32F10X_MD
[單片機(jī)]
STM32<font color='red'>程序</font><font color='red'>移植</font>技巧總結(jié)
基于STM32F103和nRF24L01的近程無線數(shù)傳系統(tǒng)設(shè)計(jì)
  近年來,隨著無線通信技術(shù)的發(fā)展,無線通訊設(shè)備的集成化越來越高。本文介紹了一種選用高性能、低功耗的32位微處理器STM32F103和射頻收發(fā)芯片nRF24L01來設(shè)計(jì)短距離無線數(shù)據(jù)傳輸系統(tǒng)的具體方法。   1 系統(tǒng)設(shè)計(jì)   短距離無線數(shù)傳系統(tǒng)主要由電源管理器AMC7635、微控制器STM32F103、射頻收發(fā)器nrf24l01三部分組成。下面分別介紹其關(guān)鍵電路。   1.1 電源電路   本設(shè)計(jì)的電源采用3.7V鋰電池供電, 然后經(jīng)低壓降電源管理芯片AMC7635, 以產(chǎn)生3.0V的電壓來為STM32F103和nRF24L01供電, 圖1所示是本系統(tǒng)的供電電路。 圖1 系統(tǒng)供電電路   1.2 微控制器電路  
[單片機(jī)]
基于<font color='red'>STM32F103</font>和nRF24L01的近程無線數(shù)傳<font color='red'>系統(tǒng)</font>設(shè)計(jì)
STM32+FreeRTOS+CUBEMX_學(xué)習(xí)筆記(七 )輸入捕獲
前言 我們可以利用輸入捕獲模式來測量脈沖寬度或者測量頻率。 1、cube設(shè)置 2、函數(shù)詳解: /** * @brief Read the captured value from Capture Compare unit 讀取通道捕獲值 * @param htim TIM handle. * @param Channel TIM Channels to be enabled * This parameter can be one of the following values: * @arg TIM_CHANNEL_1: TIM Channel 1 selected * @arg T
[單片機(jī)]
STM32+<font color='red'>FreeRTOS</font>+CUBEMX_學(xué)習(xí)筆記(七 )輸入捕獲
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 崇礼县| 左贡县| 察隅县| 新邵县| 汕头市| 昌宁县| 黄龙县| 涪陵区| 惠安县| 县级市| 疏勒县| 葵青区| 万年县| 堆龙德庆县| 科尔| 商水县| 崇礼县| 建瓯市| 剑河县| 集安市| 仁化县| 台江县| 鸡东县| 高密市| 达孜县| 黄冈市| 宾川县| 金山区| 胶州市| 鹿邑县| 淮滨县| 丰顺县| 宜宾县| 新和县| 江达县| 五家渠市| 大连市| 青阳县| 古田县| 进贤县| 如皋市|