一、文件的拷贝
需要添加: 内核源码源文件、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,响应优先级没有作用。