
【STM32F429心得\疑问】+最新FreeRtos(版本8.0)上手指南 最近折腾一块stm32f107rc的板子,摸索了一下FreeRTOS 的使用 发现起步不太难有点经验和大家分享。 1,先从官网http://www.freertos.org/下载 FreeRTOS 8.0.0 2,用标准库(STM32F10x_StdPeriph_Lib_V3.5.0)模板建工程 3, 在工程中添加FreeRTOS 文件。tasks.c list.c queue.c heap_2.c port.c 其中port.C是cotex M3的移植文件。选择目录..\..\Source\portable\RVDS\ARM_CM3\ 下的port.c 3,修改启动代码(.s文件)如下,主要是链接FreeRTOS的三个中断函数 IMPORT xPortPendSVHandler IMPORT xPortSysTickHandler IMPORT vPortSVCHandler ..... DCD vPortSVCHandler ; SVCall Handler DCD DebugMon_Handler ; Debug Monitor Handler DCD 0 ; Reserved DCD xPortPendSVHandler ; PendSV Handler DCD xPortSysTickHandler ; SysTick Handler 4.在main中建立自己任务开始 rtos /* Create one task. */ xTaskCreate( vTask1, /* Pointer to the function that implements the task. */ "Task 1", /* Text name for the task. This is to facilitate debugging only. */ 200, /* Stack depth in words. */ NULL, /* We are not using the task parameter. */ 1, /* This task will run at priority 1. */ NULL ); /* We are not using the task handle. */ /* Create one task. */ xTaskCreate( vTask2, /* Pointer to the function that implements the task. */ "Task 2", /* Text name for the task. This is to facilitate debugging only. */ 200, /* Stack depth in words. */ NULL, /* We are not using the task parameter. */ 2, /* This task will run at priority 1. */ NULL ); /* We are not using the task handle. */ /* Start the scheduler so our tasks start executing. */ vTaskStartScheduler(); .............. .............. void vTask1( void *pvParameters ) { /* As per most tasks, this task is implemented in an infinite loop. */ while(1) { LED_Toggle(0); LED_Toggle(2); vTaskDelay(800); } } void vTask2( void *pvParameters ) { /* As per most tasks, this task is implemented in an infinite loop. */ while(1) { LED_Toggle(1); LED_Toggle(3); vTaskDelay(1600); } } |