移植FreeRTOS9.0.0到M3

      之前一直使用UCOSII做嵌入式开发,但在资源较小的M3上就显得无能为力了,但是在rtos上编写程序后就再不想回到裸奔的时代,之前这种情况一直使用的是《时间触发的嵌入式操作系统》书中提供的调度器,很好用也很实用,但缺少通信手段,于是就做了rtos的移植,如果觉得rtos也比较大的话,那建议使用之前提供的调度器做开发,移植参考了网友移植,网址如下:

  http://cnskyline.tech/2016/10/01/stm32-1/

我手头只有stm32F103c8t6,就以他为平台进行移植,其实对于M3的芯片,移植工作都很简单,比我当时自己移植UCOSII到arm7方便多了。

移植环境:

MDK5.20

FreeRTOS9.0.0

STM32F10X_StdPeriph_Lib_V3.5.0

 

将解压后的FreeRTOS9.0.0文件夹中的FreeRTOS/Source文件夹复制到stm32F103c8t6的工程文件下(如FreeRTOS目录下),将文件夹中\FreeRTOS\Demo\CORTEX_STM32F103_Keil路径下FreeRTOSConfig.h拷贝到工程文件夹FreeRTOS中。打开MDK,添加如下文件

“port.c”文件路径..\FreeRTOS\Source\portable\RVDS\ARM_CM3
“heap_2.c”文件路径..\FreeRTOS\Source\portable\MemMang
“list.c”、“queue.c”、“tasks.c”文件路径..\FreeRTOS\Source

添加头文件:

..\FreeRTOS\Source\portable\RVDS\ARM_CM3

..\FreeRTOS

..\FreeRTOS\Source\include

修改启动文件,这里如果移植过UCOS的话,应该超级简单:

将SVC_Handler          PendSV_Handler            SysTick_Handler        分别替换为       vPortSVCHandler               xPortPendSVHandler          xPortSysTickHandler    如下:    

;                DCD     SVC_Handler               ; SVCall Handler
DCD     vPortSVCHandler                ; SVCall Handler

;                DCD     PendSV_Handler            ; PendSV Handler
;                DCD     SysTick_Handler           ; SysTick Handler
                DCD     xPortPendSVHandler         ; PendSV Handler
                DCD     xPortSysTickHandler        ; SysTick Handler

 

并在如下位置增加函数申明:

 

 

 

基本就一直完成,现在在main函数中创建任务,盗用网友的程序如下:

void LED0_Task(void * pvParameters);

void LED1_Task(void * pvParameters);

int main(void)

{

LED_Init();

xTaskCreate(LED0_Task, (const char *)"LED0", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 3, NULL);

xTaskCreate(LED1_Task, (const char *)"LED1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 4, NULL);

vTaskStartScheduler();

}

void LED0_Task(void * pvParameters)

{

while (1)

{

LED0 = !LED0;vTaskDelay(800 / portTICK_RATE_MS);

}

}

void LED1_Task(void * pvParameters)

{

while (1)

{

LED1 = !LED1;vTaskDelay(500 / portTICK_RATE_MS);

}

}

 

到此移植结束,程序应该能正常运行了。

 

 

 

你可能感兴趣的:(嵌入式)