我有一个使用yagarto GCC编译器的STM32F0应用程序。我已经实现了_sbrk newlib_stubs.c。我遇到的问题是我在调用_sbrk并要求4K内存时调用malloc(256)一个反过来的malloc。我的系统总共只有8K,所以显然这是一个问题。我监视了对_sbrk的调用,它似乎在分配少量内存之前进行了几次调用。
现在我抓住我的鼻子以避免恶臭并做类似的事情来解决这个问题:
if(requested > 512)
requested = 512;
在重新定位堆之前,在_sbrk中。
虽然这个系统看起来很坚固,但我相当肯定这会在我最不期望的时候回来困扰我。
答案 0 :(得分:0)
通过评论中提供的关于不使用malloc的细微提示,我最终创建了一些东西来分配我自己的内存。我不需要释放它以便简单化。只有那些刺痛我大约一个小时的东西才能维持32位对齐。
这是我的实施pm_代表穷人。
#define HEAPSIZE 0x800 //2K
uint16_t __heapPtr = 0;
uint8_t __customHeap[HEAPSIZE];
void *pm_malloc(uint16_t size){
while(__heapPtr % 4 != 0)
__heapPtr++;
void *block = &__customHeap[__heapPtr];
if(size + __heapPtr > HEAPSIZE)
return 0;
__heapPtr += size;
return block;
}
在过去的15年里,我的生活一直是C#,Java和Objective-C,所以任何反馈都会受到赞赏。