FreeRTOS系列推文很久之前就完結(jié)了,最近在GD32進(jìn)行相關(guān)移植,發(fā)現(xiàn)還有更好的移植方案,比起直接修改啟動文件更加實用,這里只簡單做下介紹和總結(jié);
第一步:準(zhǔn)備一個裸機(jī)工程文件,最好配置了GPIO和串口,因為這兩個是最方便查看效果的;
第二步:把FreeRTOS的源碼直接復(fù)制到工程目錄下,這樣就算沒安裝支持包都可以直接使用,也方便相關(guān)管理和維護(hù):
第三步:添加分組,然后把相關(guān)源碼添加進(jìn)去:
注意: 配置文件可以在官方demo中找到:
第四步:添加路徑:
第五步:在FreeRTOSConfig.h進(jìn)行適當(dāng)修改:
第六步:屏蔽三個中斷函數(shù):
第七步:編寫任務(wù)函數(shù):
#include "hal_led.h" #include "hal_log.h" #include "hal_usart.h" #include "hal_printf.h" #include "FreeRTOS.h" #include "task.h" #define START_TASK_PRIO 1 //任務(wù)優(yōu)先級 #define START_STK_SIZE 128 //任務(wù)堆棧大小 TaskHandle_t StartTask_Handler; //任務(wù)句柄 void start_task(void *pvParameters);//任務(wù)函數(shù) #define LED0_TASK_PRIO 2 //任務(wù)優(yōu)先級 #define LED0_STK_SIZE 50 //任務(wù)堆棧大小 TaskHandle_t LED0Task_Handler; //任務(wù)句柄 void led0_task(void *p_arg); //任務(wù)函數(shù) // 外設(shè)初始化 void hal_device_init(void) { hal_led_init(); hal_log_init(); hal_usart_init(); } // 主循環(huán) int main( void ) { // 設(shè)置系統(tǒng)中斷優(yōu)先級分組 4 nvic_priority_group_set(NVIC_PRIGROUP_PRE0_SUB4); // 外設(shè)初始化 hal_device_init(); //創(chuàng)建開始任務(wù) xTaskCreate( (TaskFunction_t )start_task, //任務(wù)函數(shù) (const char* )"start_task", //任務(wù)名稱 (uint16_t )START_STK_SIZE, //任務(wù)堆棧大小 (void* )NULL, //傳遞給任務(wù)函數(shù)的參數(shù) (UBaseType_t )START_TASK_PRIO, //任務(wù)優(yōu)先級 (TaskHandle_t* )&StartTask_Handler //任務(wù)句柄 ); vTaskStartScheduler(); //開啟調(diào)度 while(1); } //開始任務(wù)函數(shù) void start_task(void *pvParameters) { taskENTER_CRITICAL(); //進(jìn)入臨界區(qū) //創(chuàng)建 LED0 任務(wù) xTaskCreate( (TaskFunction_t )led0_task, (const char* )"led0_task", (uint16_t )LED0_STK_SIZE, (void* )NULL, (UBaseType_t )LED0_TASK_PRIO, (TaskHandle_t* )&LED0Task_Handler ); vTaskDelete(StartTask_Handler); //刪除開始任務(wù) taskEXIT_CRITICAL(); //退出臨界區(qū) } //LED0 任務(wù)函數(shù) void led0_task(void *pvParameters) { while(1) { /* 測試精度*/ if(RESET == gpio_input_bit_get(GPIOC, GPIO_PIN_6)){ gpio_bit_write(GPIOC, GPIO_PIN_6, SET); }else{ gpio_bit_write(GPIOC, GPIO_PIN_6, RESET); } usert_printf(USART0, "USART0 "); vTaskDelay(1000); } }
第八步:看效果:
這種移植方案與以前的方案最大的不同就是不修改啟動文件, 對于不懂匯編和啟動文件的讀者比較友好, 也比較推薦這種方案來使用FreeRTOS;解決問題的方法千千萬萬, 選擇自己喜歡的就好, 也沒有什么不可。
審核編輯:湯梓紅
-
移植
+關(guān)注
關(guān)注
1文章
383瀏覽量
28193 -
源碼
+關(guān)注
關(guān)注
8文章
652瀏覽量
29452 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62395 -
GD32
+關(guān)注
關(guān)注
7文章
413瀏覽量
24469
原文標(biāo)題:FreeRTOS|再次移植
文章出處:【微信號:玩轉(zhuǎn)單片機(jī),微信公眾號:玩轉(zhuǎn)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論