探索者F407在开启中断的情况下调用MALLOC失败

2019-07-20 04:26发布

  如题,在我的程序中,如果中断先在 my_mem_init(SRAMIN); 这一句之前完成配置,那么运行到 void mymemset(void *s,u8 c,u32 count)  {  
    u8 *xs = s;  
    while(count--)*xs++=c;  
}

这个函数中的while语句时,就会进入haltfault中断使板子死机。
并且调用 p=mymalloc(sramx,2048); 也会出现同样的死机情况。
但是调用 myfree(sramx,p); 则不会出现死机情况。


调整了顺序之后就不会死机,但奇怪的是,这样做后即使不先初始化外部SRAM而直接调用 my_mem_init(SRAMEX);
也并不会像例程那样死机,而是接着往下运行主循环。

还有一点就是,如果加入了MALLOC,板子复位后有时会出现LCD背景 {MOD}没有设置成功的情况。
并且时不时地会在主循环里突然自动复位(可能是跑进了haltfault中断)


如果关闭中断,完全按照例程那样去写,应该没有问题,但是我习惯了加入中断。有没有不加入中断也能
完美调用MALLOC的方法?


PS.例程里MPU6050的函数也有和中断冲突的部分,只要调用了 inv_mpu.c 或者是 inv_mpu_dmp_motion_driver.c
的函数,比如说mpu_dmp_init() , mpu_dmp_get_data(),也同样会死机。


还请大神解疑。




0条回答

一周热门 更多>