stm32F407平台上使用freertos,使用pvPortMalloc申请内存,发现内存中的数据总被修改,使用malloc就没有问题。
如题,我现在在stm32F407平台上打开FREERTOS,然后使用pvPortMalloc动态申请内存的时候,发现这块内存中的数据总是变化,后面改为malloc申请,内存中的数据就符合预期了,我已经按照网上的流程配置了freertos,不知道是什么原因导致这种现象? 学习一下啊,还有好多需要学习的。 在STM32F407平台上使用FreeRTOS时,遇到使用pvPortMalloc动态申请内存后数据总是变化的问题,而改用标准的malloc函数则数据符合预期,这通常与FreeRTOS的内存管理机制有关pvPortMalloc是FreeRTOS提供的内存分配函数,它基于FreeRTOS的内存管理策略进行内存分配
标准的malloc函数则是由C标准库提供的,通常用于通用内存分配。两者在内存分配的实现上可能存在差异,例如内存池的使用、内存碎片的处理等
FreeRTOS可能启用了内存保护机制,如硬件MPU(内存保护单元)的配置,以防止内存访问越界或非法访问。如果内存分配或访问不符合FreeRTOS的内存管理规则,可能会导致数据异常
使用pvPortMalloc分配的内存可能没有被正确初始化,导致内存中的数据是随机的或未定义的
malloc分配的内存可能在某些实现中会被自动初始化为0或某个特定值
FreeRTOS的配置可能存在问题,如堆大小设置不当、内存池配置错误等。或者代码中可能存在内存泄漏、越界访问等错误,导致内存数据异常
在使用pvPortMalloc分配内存后,手动初始化内存区域,确保数据的有效性
在使用pvPortMalloc分配内存后,手动初始化内存区域,确保数据的有效性
如果怀疑内存保护机制导致问题,可以尝试禁用MPU(但请注意,这可能会降低系统的安全性和稳定性)
页:
[1]