|
发表于 2018-2-24 22:56:43
|
显示全部楼层
栈内存看编译完的信息就好了, gcc就是arm-none-eabi-size -B main.elf就行
查看堆内存麻烦一点,如果库里有malloc之类,可以写个二分查找,找到一个n可以分配成功,n+1就分配失败的位置。
递归的简单,但是在内存够大、栈又小的场合,递归十几层肯定要爆栈,下面是非递归版本:
- static size_t __get_free_mem2(size_t start, size_t end)
- {
- unsigned char *p;
- while(start < end - 1) {
- size_t size = (start + end) / 2;
- if(size == 0)
- return 0;
- p = malloc(size);
- if(p != NULL) { // malloc succeeded
- free(p);
- start = size;
- }
- else { // malloc failed
- end = size - 1;
- }
- }
- return start;
- }
- size_t get_free_mem(void)
- {
- return __get_free_mem(0, 65536UL); // 假设RAM最大为64k
- }
-
复制代码 |
|