FREERTOS移植(MDK 、STM32F103)

一、文件的拷贝

需要添加: 内核源码源文件、portable源文件、内存管理heap源文件、FreeRTOSConfig.h 。在图示路径,FreeRTOSConfig.h如果官方Demo里面的比较旧可以找一些开发板的来用,要同系列。

项目中新增FREERTOS文件夹添加:内核源码源文件(crotine.c   \  event_group.c   \    list.c    \   queue.c task.c   \   tasks.c   \   timers.c)

            新增PORT文件夹添加:portable源文件、内存管理heap源文件(port.c  \  portmacro.h  \ heap_4.c)//heap_1等其他heap暂不使用,不明区别。

            FreeRTOSConfig.h添加至main.c所在目录就行

需要修改:FreeRTOSConfig.h

 二、FreeRTOSConfig.h的修改

FreeRTOSConfig.h需要从上图对应芯片demo拷贝到项目文件夹

主要修改的地方:

#define configCPU_CLOCK_HZ            ( ( unsigned long ) 72000000 ) //最终的系统时钟,根据实际配置多少即多少,需要了解stm32的时钟配置https://www.cnblogs.com/ycpkbql/p/9106108.html

#define configTICK_RATE_HZ            ( ( TickType_t ) 1000 ) //RTOS的节奏,根据这个节拍,切换到不同的任务,这里是1ms检查一次任务列表,通常可以配置为100,即10ms,这个也和vTaskDelay直接相关。

#define configTOTAL_HEAP_SIZE        ( ( size_t ) ( 17 * 1024 ) ) //freertos能操控的内存大小,只要不崩溃,越接近sram大小越好,留出10K左右给初始化,全局变量等使用

#define configMAX_SYSCALL_INTERRUPT_PRIORITY     0x5f /* equivalent to 0xb0, or priority 11. */ //

以下可选:

/***************************************************************************************************************/
/*                                FreeRTOS timers                                          */需要使用RTOS定时器
/***************************************************************************************************************/
#define configUSE_TIMERS                        1                               
#define configTIMER_TASK_PRIORITY                (configMAX_PRIORITIES-1)        
#define configTIMER_QUEUE_LENGTH                5                               
#define configTIMER_TASK_STACK_DEPTH            (configMINIMAL_STACK_SIZE*2)   
/***************************************************************************************************************/
/*                                FreeRTOS event group                                          */需要使用RTOS事件组
/***************************************************************************************************************/

#define INCLUDE_xEventGroupSetBitFromISR 1
#define configUSE_TIMERS 1
#define INCLUDE_xTimerPendFunctionCall 1
/***************************************************************************************************************/
/*                                FreeRTOS debug                                          */需要使用RTOS 调试,需要调用获取栈深API
/***************************************************************************************************************/

#define INCLUDE_uxTaskGetStackHighWaterMark 0
#endif /* FREERTOS_CONFIG_H */

三、优先级配置

不要忘记优先级必须配置成如下选项

void NVIC_Configuration(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); //都是抢占优先级,没有响应优先级,配置中断的时候响应优先级都位0,抢占优先级0-15
}

1.抢占优先级高的中断   可以打断正在响应的   抢占优先级低的中断。

2.抢占优先级相同的中断,只能等待上一个中断完成才能响应本中断。

3.分配为NVIC_PriorityGroup_4,响应优先级没有作用。

posted @ 2018-05-29 13:24  =天赋=  阅读(553)  评论(0编辑  收藏  举报