开发环境
C编辑器: Keil MDK-ARM Plus V5.21a
开发板: GD32103E-EVAL
固件库: V2.1.0 firmware for GD32F10x
FreeRTOS: V202104.00
1. FreeRTOS官网下载 FreeRTOS
从 https://www.freertos.org/ 下载,当前版本为FreeRTOS 202104.00
2. 拷贝文件
解压下载的文件后,如下图所示。我们只要 FreeRTOS\Source 中的内容。
在GD32F103的工程目录中,添加一个FreeRTOS的文件夹,本人将其放置在GD的库目录下。
然后将上面下载的Source目录中的文件全部拷贝到刚建立的FreeRTOS目录中。
打开portable文件夹,删除除了MemMang和RVDS的所有内容。
将下载的FreeRTOS中Demo\CORTEX_STM32F103_Keil\FreeRTOSConfig.h拷贝到上面的include目录下,用于配置FreeRTOS。
打开FreeRTOSConfig.h 在合适的地方加上下面这句。
#define INCLUDE_xTaskGetCurrentTaskHandle 1
再找到宏定义 configCPU_CLOCK_HZ,将主频从72000000修改为10800000,这个文件原来是给STM32F103写的,GD32F103的主频为108000000。
3. 在Keil中添加FreeRTOS系统文件
Keil中打开工程文件管理,添加两个目录FreeRTOS_src和FreeRTOS_port
然后将刚才拷贝到FreeRTOS目录中的C文件添加到FreeRTOS_src中。再把刚才拷到include目录下的FreeRTOSConfig.h也添加到FreeRTOS_src中,主要是为了后续打开方便。
将portable\RVDS\ARM_CM3\port.c和portable\MemMang\heap_4.c添加到FreeRTOS_port中。
4. SVC_Handler、PendSV_Handler和SysTick_Handler处理
打开gd32f10x_it.c, 找到void SVC_Handler(void)和void PendSV_Handler(void)两个函数,将它们注释掉,在freeRTOS中重新定义。
打开FreeRTOS.h文件,添加下列两行,将上面注释的两个函数重新定位到FreeRTOS中的函数。
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
在gd32f10x_it.c头部添加函数声明。
void xPortSysTickHandler( void );
然后在void SysTick_Handler(void)中进行调用。之所以SysTick_Handler没有像上面两个一样用宏定义直接转向,是为了还可以在SysTick_Handler中添加一些自己的代码,可以在SysTick中断时执行。
void SysTick_Handler(void)
{
xPortSysTickHandler();
}
5. 添加include目录
打开Target的Option窗口,选择C/C++选项卡,在include paths中添加FreeRTOS\include目录和FreeRTOS\portable\RVDS\ARM_CM3目录。
至此移植结束,下面我们来写个简单的代码测试。SysTick不需要手动初始化,FreeRTOS中有做初始化。包含头文件要添加 FreeRTOS.h 和 Task.h。
void Task_Led1(void * pvParameters)
{
while(1)
{
LED_Off(0); vTaskDelay(500);
LED_On(0); vTaskDelay(500);
}
}
void Task_Led2(void * pvParameters)
{
while(1)
{
LED_On(1); vTaskDelay(500);
LED_Off(1); vTaskDelay(500);
}
}
int main(void)
{
nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);
LED_Init();
xTaskCreate(Task_Led1,"TaskLed1",configMINIMAL_STACK_SIZE,NULL,2,NULL);
xTaskCreate(Task_Led2,"TaskLed2",configMINIMAL_STACK_SIZE,NULL,2,NULL);
vTaskStartScheduler();
while(1){}
}
版权声明:本文为CSDN博主「mjwang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mjwang/article/details/117629672
暂无评论