所看的视频:STM32移植FreeRTOS智慧安全厨房实战项目 单片机/操作系统/物联网/Linux_哔哩哔哩_bilibili
所需文件
最后的Project呈现如下分布:
代码
#include "stm32f10x.h" // Device header
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
int a1 = 0;
int a2 = 0;
void Task1Function(void *param)
{
while(1)
{
a1 = 1;
a2 = 0;
}
}
void Task2Function(void *param)
{
while(1)
{
a1 = 0;
a2 = 1;
}
}
int main()
{
TaskHandle_t xHandleTask1;
xTaskCreate(Task1Function, "Task1", 10, NULL, 1, &xHandleTask1);
xTaskCreate(Task2Function, "Task2", 10, NULL, 1, NULL);
/* Start the scheduler. */
vTaskStartScheduler();
while(1);
}
遇到的问题
1.关于修改Free RTOSConfig.h,遇到了硬件错误HardFault_Handler,需要定义下面三个宏
原因:Free RTOS运行的时候,任务的切换,时钟的进行,都需要进入进入三个中断函数,xPortPendSVHandler
vPortSVCHandler
xPortSysTickHandler
但是呢,默认执行stm32f10.it.h里面的
PendSV_Handler
SVC_Handler
SysTick_Handler
这东西是个空实现,需要我们自己定义,但是我们又那里会呢? 我们可以接入Free RTOS的三个中断,定义三个宏,PendSV_Handler SVC_Handler SysTick_Handler 被xPortPendSVHandler
vPortSVCHandler
xPortSysTickHandler代替就好了;
总之,官方案例中的Free RTOSConfig.h模板也得根据我们自己的需求进行裁剪;
2.关于波形不正确的问题
STM32开发板的默认配置都是使用的外部8MHz的晶振,系统时钟为72MHz,而当使用12MHz的外部晶振,如不从新配置时钟,按默认配置则软件会认为自己的系统时钟为72MHz,而实际的系统时钟为108MHz,就是放大九倍;
CPU 72MHz,
这是学习STM32上移植FreeRTOS的第一步 加油少年