在线时间54 小时
UID181372
注册时间2010-4-13
NXP金币0
该用户从未签到
中级会员
 
- 积分
- 443
- 最后登录
- 2020-10-29
|

楼主 |
发表于 2014-12-29 20:45:15
|
显示全部楼层
本帖最后由 bsdpgsql 于 2014-12-29 21:00 编辑
找到复现方式了,我的工程里调试的时候是把semihosting关闭了,上图所示。
这时候再把heap size 从0换到0xffff会产生上面的异常。如果再换到0是没有异常的。
然后检测了heap size设置成0x100是正常的,可以malloc,可以printf,
随机再调高到0x1000,就又异常了,中间的临界我就没有测试了。
另外,我以为是调试器的问题,我把heap size=0x1000这样出现异常的二进制下载之后,断开仿真器,按frdm-k64f上的reset后终端无打印,
把heap size调下来不出现异常比如=0x0 的二进制下载之后,reset终端能正常显示。
所以我猜测是个BUG呢,毕竟heap size这个针对heap的改变,在=0, =0x100, =0x1000以上的各种改变而导致的printf给出的结果不一,就算是printf里面有malloc的需求,可heap空闲空间越多反而出了问题,这不应该是heap不足导致。
代码还是您的代码,我只是把enable semihosting去掉了,另外把usart0的波特率改成115200,另外,把printf改成
/* Write your code here */
/* For example: for(;;) { } */
int *p = malloc(24);
printf("K64_TEST %p!\n", p);
以测试malloc是否能正常。
在您的工程基础上就改了这三个地方。
麻烦您再看看。
|
|