为什么FSP上加sscanf()函数,编译没有报错,可以通过,但仿真运行时,一执行这个函数就进入Default_Handler?开发环境:FSP v3.3.0
确认一下,是否包含了以下库
#include <stdio.h> #include <stdlib.h> #include <string.h>
可以了,是要把stack size加大,不是heap size的
默认情况下,RA GCC 工程项目将使用面向小型嵌入式应用程序的 newlib-nano 库。 要使用您需要的格式说明符,请禁用 newlib-nano(取消选中“使用 newlib-nano (--specs=nano.specs)”框):
请问你们那边测试可以吗?我禁用了,也做clean再重新编译的动作,但还是一样会跳到Default_Handler里
请试一下再把Heap size预留出一部分空间。
具体方法参考以下帖子:
japan.renesasrulz.com/.../39149
Hi Amy,我原本的工程里本身就已经设置了0x1000的Heap size
已经包含进去了的。我重新建了个简单的工程,执行sscanf函数时,会卡在NMI_Handler(void)。你们如果有RA6M2的EVK,也可以用我的工程在上面测试一下
RA6M2_T.zip
还是需要用到sscanf这个函数,目前测试发现,格式不能用“%s”,设了断点仿真执行到含有“%s”格式就会报错,这个格式不应该是标准库的吗?这里不支持?
看了一下编译的时候出现的warning,Format string vulnerability in 'sscanf(......);
你可以试试先使用fgets()然后使用sscanf()或其他机制来解析输入。再有一个办法就是告诉sscanf,%s的长度。
sscanf( dtm, "%19s %19s %d %d", weekday, month, &day, &year );
以上两个方法可以试试。
还是不行,虽然指定长度给s%编译不会报警了,但仿真时还是一样的报错。