|

楼主 |
发表于 2023-7-27 13:18:00
|
显示全部楼层
isopathname是全局指针变量uint8_t *isopathname,在main函数中就申请内存了,程序运行过程中不释放它的内存:
isopathname = mymalloc(SRAMIN, 1 * 1024);
在另外的C文件中的函数中,定义局部变量filelistx并申请内存:
_filelistbox_list * filelistx;
filelistx = (_filelistbox_list*)mymalloc(SRAMIN,sizeof(_filelistbox_list));
_filelistbox_list 是链表结构:
typedef struct
{
void *prevlist;
void *nextlist;
u8 type;
u8 utf8_bit;
u8 *name;
}_filelistbox_list;
malloc等函数都是直接抄开发板的,AXI SRAM最大只管理370KB:
//mem1内存参数设定.mem1是H7内部的AXI内存
#define MEM1_BLOCK_SIZE 64 //内存块大小为64字节
#define MEM1_MAX_SIZE 370 * 1024 //最大管理内存
#define MEM1_ALLOC_TABLE_SIZE MEM1_MAX_SIZE / MEM1_BLOCK_SIZE //内存表大小
我在startup_stm32h743xx.s中设置堆栈如下:
Stack_Size EQU 0x2000
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size EQU 0x0000
而且我还发现,不一定是_filelistbox_list变量会冲掉isopathname内容,其它函数例如TJpgDec中的JDEC *jpeg_dev也有可能申请到和isopathname一样的内存地址,直接冲毁isopathname内容。
|
|