编译没有错误,下载程序卡在HardFault_Handler,R14寄存器值为0xfffffff9,如图所示

这时候可以考虑下是否是startup_stm32f10x_md.s中修改中断向量指向RTOS port.c文件中定义的中断向量名,如果没有修改,修改成如图所示线程就可以正常启动并切换。

如果startup_stm32f10x_md.s是只读文件,可采用下面这两种方法
方法一:
将startup_stm32f10x_md.s中的内容进行复制,然后自己新建一个".s"结尾的文件,将内容复制到里面,然后进行上述操作(修改中断向量指向RTOS port.c文件中定义的中断向量名),最后把工程里面的startup_stm32f10x_md.s进行替换就行了。
方法二
在FreeRTOSConfig.h中进行宏定义
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler

进行编译

在链接时报错,发现多重定义了,我们只要把stm32f10x_it.c文件中的那三个函数进行注释即可解决问题



再编译,运行

已经没有出现硬件错误了
如果还没解决那你就看看FreeRTOSConfig.h文件中,将堆(Heap)大小设置小一点

为什么修改这些内容?
原因:在FreeRTOS中断管理中的内部中断中(内部中断:即任务与内核之间进行的),有这三个内部中断:SysTick 中断、 SVC 中断和 PendSV 中断,需要将它们放到中断向量表中(放到启动文件中的中断向量表),或者进行宏定义。

