以STM32F4系列的硬件平台为例;
问题概述:
创建多个任务时,例如创建的任务数超过了10个,或者很多消息队列/信号量之类的,编译时没有问题,但是运行时,就直接报错,如下:
解决方案:
找到如下图的头文件,FreeRTOSConfig.h
注意一下,紫色框中内容,把参数适当调高,如果任务中优先级过高,修改一下对应的参数,最重要的是修改一下队列记录的那个参数,一般移植好,默认是8或者10,适当的调高,还有系统总堆的大小,系统移植好一般是比较小的,最高可以设置为64*1024的
原因是:调高记录个数,此宏定义记录的是队列和信号量的总个数,设置的个数高于这个参数,编译有可能就编译不过了
修改总堆大小是因为,每次创建任务,都会分配对应的大小,大小多少是由你自己设置的,这里的大小就是申请的这里的堆大小,当然你创建的任务多了,此参数肯定也要适当调高,以STM32F405RGT6为例子,最大就是64*1024。至于可以设置多少还要视自己的芯片的存储分配而定。