|
本帖最后由 liyang121316 于 2020-9-27 14:50 编辑
楼主位更新:硬错误问题找到了。第二个问题:获取剩余堆内存的时候,第一次分配完的剩余堆内存比第二次分配完的少。目前来看从第二次分配开始才能获取正确的堆内存剩余字节数。
使用的软件keil5,板子上芯片是stm32f103,添加了FeeRTOS系统(版本是v10.3.1),MemMang选择的是heap_4.c。
在普通任务中使用pvPortMalloc函数申请内存时,当申请的内存字节数小于9时,程序运行了几次后会进入硬错误,
而且第二次申请内存后的剩余内存比第一次申请内存后剩余的内存大,请问这是什么原因,是不是pvPortMalloc函数在申请内存时,对申请的字节数有范围限制?
(我的实验代码很简单不涉及中断的使用)
另外我分别用heap_1.c、heap_2.c、heap_3.c、heap_5.c做了上述相同的实验,发现只有heap_1.c在上面的实验条件下能正常分配。
请熟悉FeeRTOS的坛友帮忙解惑,不胜感激!
//MALLOC任务函数
void malloc_task(void *pvParameters)
{
u8 *buffer;
u8 times = 0;
u32 freemem;
while(1) {
buffer = pvPortMalloc(5); //申请内存,5个字节
My_Print((0,"申请到的内存地址为:%#x\r\n",(int)buffer));
if (buffer != NULL) {
if (0 == freemem) {
vPortFree(buffer); //释放内存
My_Print((0,"释放内存\r\n"));
//buffer = NULL;
}
} else {
My_Print((0,"内存分配失败\r\n"));
}
if (buffer != NULL) { //buffer可用,使用buffer
times++;
sprintf((char*)buffer,"User %d Times",times); // 向buffer中填写一些数据
My_Print((0,"buffer = %s\r\n",buffer)); // 打印buffer中的数据
}
freemem = xPortGetFreeHeapSize(); //获取剩余内存大小
My_Print((0,"freemem = %d\r\n",freemem)); // 打印buffer中的数据
vTaskDelay(100);//延时0.5s(为了方便观察现象)
}
} |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|