日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为STM32F0搭建FreeRTOS实录

發布時間:2023/12/31 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为STM32F0搭建FreeRTOS实录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近為實現小應用囤了一點尚屬低價的STM32F030C8T6單片機,自制了最小系統板,也就順帶搗鼓在這種小芯片上如何移植FreeRTOS。其實由于這款單片機SRAM容量太小,再上FreeRTOS有點不劃算了,但這個移植的過程卻對入門FreeRTOS很有幫助。

工具鏈:Keil MDK 5.34 + STM32CubeMX 6.3.0 + 自制最小系統板(如圖)

一、配置管腳+生成代碼

打開Keil,選擇單片機(我這里就選STM32F030C8T6),接著在Manage Run-Time Environment中選擇軟件組件,選中CMSIS->CORE、Device->STM32CubeHAL、Device->Startup以及下面STM32Cube Framework (API)里的STM32CubeMX。注意,不要馬上點擊確定!!!

我們先要點STM32CubeMX旁邊的綠色啟動按鈕,啟動CubeMX配置。CubeMX要從意法半導體官網下載安裝。

作為一個簡單的例子,我們可以只配置最少的管腳,并且只用片內振蕩器。我在PC13上掛了一個LED,將該管腳配置為GPIO_Output,然后啟用USART1,配置為異步(UART)模式,波特率115200Bits/s。默認條件下,PA9被設置為TX,PA10為RX。
(配置GPIO和UART)

接著我們用STM32CubeMX生成FreeRTOS的代碼。左側目錄中點開Middleware,就有FreeRTOS,點中它,接口(Interface)選擇CMSIS_V2。在下面設置參數中內存管理里,設置總堆大小(TOTAL_HEAP_SIZE)為2048字節,內存管理方法(Memory Management scheme)為heap_1。
(配置FreeRTOS)

這里我們插句嘴,說明一下我們在設置什么。盡管我們要用FreeRTOS,ARM為Cortex M系列的芯片還另外開發了一套API,就是CMSIS,這樣,即使內核操作系統不同,在用戶級的代碼卻可以共享同一套API,降低了代碼移植的難度。待會我們也可以看到,我們是用CMSIS的API創建任務線程,而非直接用FreeRTOS的API;但本質上,只是一層封裝,最后還是要調用FreeRTOS的API的。

內存管理是這里的關鍵。FreeRTOS提供了多種內存管理方式,我們這次就用最簡單的Heap_1,它只支持malloc,不支持free,也就是說建立線程之后,即使要刪除該線程,也沒法釋放其資源,但對我們已經足夠。

接著我們點Tasks and Queues選項卡,去創建任務。這里面已經有一個defaultTask,我把它改名Task1,并把入口函數改名task1fxn;再創建第二個任務task2,入口函數task2fxn。

現在我們看一下FreeRTOS Heap Usage,可以看到每個任務都占了632字節的RAM,堆棧還剩784字節。

至此,其實STM32CubeMX中的設置已經基本完畢。點擊GENERATE CODE,它給出提示,在使用RTOS時,強烈建議改用HAL Timebase Source而非直接用Systick。這里我暫時不知道為什么,不過為了盡快拉通,就按它說的做,把Timebase Source改為TIM1。然后生成代碼,退出STM32CubeMX,在Keil中Manage Run-Time Environment點擊OK。

二、FreeRTOS代碼加入工作區

此時代碼已經生成,但FreeRTOS的代碼卻還沒加進來。在Project欄中,為我們的工程加入幾個分組:CMSIS_V2、FreeRTOS_src和FreeRTOS_inc。命名并不一定如此,只是看著方便。然后找到生成的FreeRTOS代碼,在(工程目錄)\RTE\Device\STM32F030C8Tx\ STCubeGenerated\Middlewares\Third_Party\FreeRTOS\Source中(對的,非常深)。

其中,CMSIS_RTOS_V2文件夾下定義的就是CMSIS_V2的API,加入CMSIS_V2分組中;這個目錄下所有.c文件都是FreeRTOS的代碼,加入FreeRTOS_src分組;…/protable/MemMang文件夾下是FreeRTOS的5種內存管理方式源代碼,我們采用Heap_1,就把heap_1.c加入FreeRTOS_src,別的不管;接著在…/protable/RVDS/ARM_CM0下是與硬件接口相關的代碼,prot.c加入FreeRTOS_src,portmacro.h加入FreeRTOS_inc,再把…/include文件夾下的所有.h文件都加入FreeRTOS中。最后,在編譯器選項中把包含了FreeRTOS頭文件的3個文件夾加入Include Paths。


此時配置本該成功了,可以編譯一次,卻編譯錯誤,所有錯誤都來自port.c。原來,這個接口代碼有大量的c語言中嵌套匯編的操作,這些匯編指令編譯器都沒有被正確識別。查詢網上的信息,似乎老版本的MDK編譯器還是可以編譯這些代碼的,STM32CubeMX卻還是按老版本生成代碼的,但最新的反而不支持了。

此時我猜想,Keil應該是把自己的編譯器變得更“標準”導致無法編譯的。那什么是最標準的代碼呢?當然是GCC能編譯的代碼就是最標準的代碼啦~從網絡上下載到FreeRTOSv10.0.1的官方代碼,其中portable文件夾就有十幾種編譯器的代碼,包含GCC,用GCC/ARM_CM0的port.c和portmacro.h替換我們工程下的接口,再編譯,果然成功。

三、線程代碼編寫

為了有比較明顯的實驗現象,我在main.c編寫了一個串口輸出函數:

void UART_print(UART_HandleTypeDef *huart, uint8_t *pData) {uint16_t len = 0;while (pData[len]) len++;HAL_UART_Transmit(huart, pData, len, 0x7fff); // enough time to transmit }

以及兩個線程的函數:

void task1_fxn(void *argument) {/* Infinite loop */for(;;){osDelay(1000); // delay 1000msUART_print(&huart1,"task1: Hello world\n\r");HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);} } void task2_fxn(void *argument) {/* Infinite loop */for(;;){osDelay(1000); // delay 1000msUART_print(&huart1,"task2: Hello world\n\r\n\r");} }

在task1中,我們不僅串口輸出,還改變GPIO的電平;task2中,則會換行兩次方便識別。osDelay()就是CMSIS的API,提供類似sleep的進程掛起作用,延遲單位是ms。接上串口,看到串口輸出數據,表明FreeRTOS已經正常啟動,且兩個線程被輪流調用了,移植成功。

總結

以上是生活随笔為你收集整理的为STM32F0搭建FreeRTOS实录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久99精品视频 | 欧美激情国产在线 | 欧美色交 | 国产精品久久婷婷六月丁香 | 91久久久精品 | 国产一区二区三区视频在线观看 | 亚洲成人基地 | 久久久久久久久一区 | 国产精品性爱在线 | 欧美视频三区 | 国产一区观看 | 久久国产精品久久久久 | 亚洲精品久久久久久久蜜桃 | 奇米四色在线观看 | 国产香蕉在线观看 | 伊人一区二区三区四区 | 男插女动态图 | 国产青青草在线 | 婷婷综合网站 | 少妇太紧太爽又黄又硬又爽小说 | www欧美 | 久久一区二区三区四区五区 | 亚洲一卡一卡 | 织田真子作品 | 波多野结衣一区二区三区中文字幕 | 久久国产乱子伦免费精品 | 羽月希奶水一区二区三区 | 成人av自拍 | 成人a网| 亚洲精品乱码久久久久 | 99在线视频免费观看 | 中文字幕人乱码中文字 | 免费观看一区 | 丝袜美女av | 国产刺激对白 | 日日日干干干 | 在线观看第一页 | 国产一区视频在线播放 | 日本免费在线播放 | 国产涩涩 | 性做久久久久久久久 | 少妇高潮灌满白浆毛片免费看 | 欧美特级视频 | 成人欧美一区二区三区黑人一 | 制服丝袜在线看 | 91成人网页 | 极品熟妇大蝴蝶20p 国产偷自拍视频 | 日韩一卡二卡在线 | 成人黄色电影在线 | 亚洲欧美乱综合图片区小说区 | 3d动漫精品啪啪一区二区三区免费 | 亚洲中文字幕无码av永久 | 影音先锋久久 | 老女人毛片 | 国产精品久久国产精品 | 国产男人的天堂 | 一级片高清 | 国产欧美一区二区三区在线老狼 | 91精品婷婷国产综合久久竹菊 | 免费看一级黄色片 | 成人久久精品 | 91网址在线| 久久久久久无码午夜精品直播 | 成人激情视频在线播放 | 绯色av一区二区 | 欧美三级欧美一级 | 国产一区二区三区四区五区美女 | 四虎国产在线观看 | 91手机在线 | 在线观看麻豆av | 国产成人短视频在线观看 | 色姑娘天天操 | 国产乱国产乱老熟 | 国产三级伦理片 | 91九色丨porny丨国产jk | 图片区偷拍区小说区 | 精品日韩 | 91av视频在线观看 | 国产在线观看免费高清 | 少妇把腿扒开让我舔18 | 国产婷婷一区二区 | 亚洲乱码中文字幕 | 91在线视频免费 | 偷拍视频一区 | 国产视频自拍一区 | 美女国产在线 | 黄色免费在线观看网站 | 欧美一级黄色片网站 | 欧美成人午夜精品免费 | 在线免费观看黄色网址 | 波多野结衣国产 | 亚洲一区二区自偷自拍 | 美少妇av| 国产天堂精品 | 中文字幕在线观看免费视频 | 久久亚洲精品国产 | 隔壁人妻偷人bd中字 | 51嘿嘿嘿国产精品伦理 | 国产成人精品久久二区二区 |