一、函数使用错误
第一次使用malloc函数时没有考虑函数参数的问题
(void *)malloc (size_t );
GoosePubStructure.AllDataSt = (AllDataTypeDef *)malloc(sizeof(AllDataTypeDef));
第一次初始化结构体指针时,括号内的长度只给了结构体的长度,导致后面写入的参数出现错误。改为
GoosePubStructure.AllDataSt = (AllDataTypeDef *)malloc(sizeof(AllDataTypeDef) * GoosePubStructure.dataSetNum);
之后问题解决。
二、使用时没有考虑Stm32初始设置的堆栈大小
出现内存分配失败的情况,即指针的首地址为空,导致后续数据写入出现问题。
在startup_stm32f407xx.s文件内进行修改:
第28行到49行,分别对应栈和堆的大小:
初始堆栈大小分别为,0x200;0x400;修改后为0x400,和0x400;问题解决。
在cubeMX也可以修改,在project Manager 下的linker Setting: