微信公眾號(hào)?| strongerHuang
我們今天教大家快速搭建FreeRTOS工程的方法。
早期,軟件工具不那么成熟,搭建FreeRTOS工程都是需要一步一步手動(dòng)移植。很多小伙伴吐槽,移植過(guò)程太繁瑣。
而現(xiàn)在,軟件工具越來(lái)越“先進(jìn)”了,我們搭建工程只需要?jiǎng)觿?dòng)鼠標(biāo)就能搭建一個(gè)完整的工程,很多人說(shuō)通過(guò)配置工具能更快入門RTOS。
市面上這類(快速生成工程的)軟件工具有很多,今天結(jié)合 e2 studio 開發(fā)環(huán)境、RA8D1單片機(jī)給大家講述快速搭建FreeRTOS工程,并創(chuàng)建GPIO(LED)+UART兩個(gè)線程。
準(zhǔn)備工作
開發(fā)RA8D1單片機(jī)需要提前安裝好軟件工具,還有準(zhǔn)備好RA8板卡以及下載調(diào)試器。
1、下載安裝集成開發(fā)環(huán)境
開發(fā)瑞薩RA8系列單片機(jī)的工具有很多,常見的主要是:
- e2 studio一站式服務(wù)工具RASC + Keil,或RASC + IAR
如果覺得麻煩,還是推薦大家使用瑞薩官網(wǎng)的 e2 studio 一站式服務(wù)工具。
這里大家可以參看我之前分享的文章:瑞薩RA8系列教程 | 瑞薩 RA8 開發(fā)環(huán)境e2s搭建Keil系列教程_Keil介紹、下載、安裝與注冊(cè)? ? ??2、準(zhǔn)備硬件板卡本教程就使用瑞薩CPKCOR_RA8D1B評(píng)估板,這塊板卡集成了J-link,我們只需要用一根線連接電腦即可下載調(diào)試。
e2s快速搭建FreeRTOS工程
e2s和其他一些MCU廠商的“可視化配置工具”類似,只需要?jiǎng)觿?dòng)鼠標(biāo),就能快速創(chuàng)建FreeRTOS軟件工程。
1、基于e2s快速創(chuàng)建FreeRTOS工程模板
打開e2s,文件 -> 新建?-> 瑞薩C/C++項(xiàng)目?-> Renesas RA:
輸入工程名稱,比如我們輸入RA8D1_RTOS:
選擇單片機(jī)型號(hào),比如R7FA8D1BHEC:
選擇TrustZone項(xiàng)目工程:
選擇FreeRTOS:
選擇【FreeRTOS - Minimal - Static Allocation】,然后點(diǎn)擊完成,一個(gè)FreeRTOS 項(xiàng)目模板就創(chuàng)建好了。
2、配置FreeRTOS
點(diǎn)擊【Stacks】,然后再點(diǎn)擊【New Thread】創(chuàng)建新線程:
然后,選中【New Thread】 -> 屬性,重命名為【GPIO_Thread】
同樣的方法,我們?cè)傩陆ㄒ粋€(gè)【UART_Thread】線程:
點(diǎn)擊【Generate Project Content】,就可以看到生成了兩個(gè)源代碼文件,此時(shí),F(xiàn)reeRTOS兩個(gè)線程就生成好了。
3、線程增加應(yīng)用代碼
我們這里創(chuàng)建了GPIO+UART兩個(gè)簡(jiǎn)單的線程,關(guān)于GPIO和UART底層的配置,大家可以參看我前面分享的教程:瑞薩RA8系列教程 | 基于e2s實(shí)現(xiàn)RA8串口輸出配置
我們這里GPIO(LED)線程應(yīng)用代碼,LED閃爍:
void GPIO_Thread_entry(void *pvParameters)
{
FSP_PARAMETER_NOT_USED (pvParameters);
/* TODO: add your own code here */
while (1)
{
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_10_PIN_01, BSP_IO_LEVEL_LOW);
vTaskDelay (500);// 延時(shí)500ms
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_10_PIN_01, BSP_IO_LEVEL_HIGH);
vTaskDelay (500);// 延時(shí)500ms
}
}
UART線程應(yīng)用代碼,間隔1秒打印Cnt計(jì)數(shù)值:
void UART_Thread_entry(void *pvParameters)
{
uint8_t Cnt = 0;
FSP_PARAMETER_NOT_USED (pvParameters);
Debug_UART4_Init(); // SCI4 UART 調(diào)試串口初始化
printf("Start...rn");
while (1)
{
????????vTaskDelay?(500);
Cnt++;
printf("Cnt = %drn", Cnt);
}
}