FREERTOS移植(MDK STM32F103)
Posted 不积跬步*无以至千里
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,响应优先级没有作用。
以上是关于FREERTOS移植(MDK STM32F103)的主要内容,如果未能解决你的问题,请参考以下文章
stm32F103c8 keil移植FreeRTOS时内存不够
stm32F103c8 keil移植FreeRTOS时内存不够