void dbg_printf(const char *ftm, …)
{
static char sprint_buf[255] = {0};
int n = 0,i = 0;
va_list vlist;
va_start(vlist, ftm);
n = vsprintf(sprint_buf, ftm, vlist);
va_end(vlist);
for (i = 0; i < n ;i++) {
while(SciaRegs.SCICTL2.bit.TXRDY == 0);
SciaRegs.SCITXBUF = (int) sprint_buf[i];
}
}
程序里 用这个映射 printf 打印函数, 打印整型 字符都很正常, 为什么打印浮点类型 系统就死了, 追到里面是 __TI_printfi 这个函数, 没法跟踪了,
请问是哪里的问题导致系统死了, 关键不知道 死在哪里,为什么死了
dbg_printf("%0.3f, %0.3f \r\n",(float)1.256, (float)3.256697); 这样系统死机
dbg_printf("%d, %d \r\n",(int)1.256, (int)3.256697); 这样系统正常
dbg_printf(“fasdfasdfasfasdf ”\r\n"); 这样系统正常
gaoyang9992006:
这个函数是打印调试信息的,应该原型里没有针对浮点转换字符的格式化处理语句。
guoz:
回复 gaoyang9992006:
sprintf 这些都是c标准库里的东西,为什么在这里不能直接用, 是工程熟悉哪里没选好还是什么问题啊,
C 标准库里的东西,难道还要找源码 在ccs工程里 重新造轮子吗
HG:
看一下这个wiki:
http://processors.wiki.ti.com/index.php/Printf_support_in_compiler
The valid values are:
full: Supports all format specifiers. This is the default.
nofloat: Excludes support for printing floating point values. Supports all format specifiers except %f, %g, %G, %e, and %E.
minimal: Supports the printing of integer, char, or string values without width or precision flags. Specifically, only the %%, %d, %o, %c, %s, and %x format specifiers are supported
guoz:
回复 HG:
我选择 full 了啊, 还是会死机。
guoz:
回复 guoz: