本人用CCSv5,TM4C123Gh6mz MCU,尝试用sprtinf() 将浮点数交换成字符串,程序走到sprtinf(),就出现异常如下:
1. 设置了断点,看上去正常。
2. 用步进功能走下一步,程序跑到FaultISR(void)。
另外,专门写个小程序试试:
用“单步执行”,走到sprintf(),就出这个画面。
哪位能帮帮忙,又或者用的方法实现浮点数变成字符串而不用sprintf()。
先谢了。
Ng
xyz549040622:
看提示是硬件上锁了,无法跑程序吧,需要解锁,你跑其他函数看看,是不是也是这个错误了
lung tat ng:
回复 xyz549040622:
苦行僧你好,去掉sprintf()这一句,程序运行正常。
lung tat ng:
回复 lung tat ng:
孤陋寡闻,不知道有硬件上锁这事。
razi cao:
我以前遇到过这个问题,已经解决,你可以试试。
我用的是IAR,在project的option设置里的general options页面的library options下的printf formatter选项下选择为Auto,即可使sprintf函数正常工作。
xyz549040622:
回复 razi cao:
学习了,在MDK中没有碰到过这样的选项
xyz549040622:
回复 lung tat ng:
sprintf()这个是纯c的语句,和硬件也应该没关系呀,我也搞不清这为什么和硬件锁住有关,可是你的截图不就是那么提示的么,感觉是你CCS配置的问题
lung tat ng:
回复 razi cao:
我在CCSv5那里找了一下,有个相似的,试了一下也不行。
CCSv5的设置很多不知从何下手,现在写了个小程序对付过去。
用CCS的人,没用这个语句吗?
wei ding6:
回复 lung tat ng:
你好 我也遇到同样的问题,用sprintf函数用不了,请问你最后怎么实现float转字符串的呢?可以帮下我吗? 非常感谢了呢!
lung tat ng:
回复 wei ding6:
Wei ding6你好,
我只是针对需要而写的小程序,仅供参考。
void ftoa4int2point(float fnum, char* Txout) {//整数4位,小数2位 int indata1, indata2, intthu, inthun, intten, intone, inpone, inpten; //, inphun, inpthu;
indata1 = (int)fnum; //取整数部分 indata2 = (int)((fnum – (float)indata1) * 100); //取小数部分,要2位 intthu = (indata1 / 1000); //整数千位 inthun = (indata1 – (intthu*1000)) / 100; //整数百位 intten = (indata1 – (intthu*1000) – (inthun*100)) / 10; //整数十位 intone = indata1 – (intthu*1000) – (inthun*100) – (intten*10); //整数个位 inpone = indata2 / 10; //小数个位 inpten = indata2 – inpone*10; //小数十位 //inphun = (indata2 – inpone*1000 – inpten*100) / 10; //inpthu = indata2 – inpone*1000 – inpten*100 – inphun*10;
Txout[0] = (char)(intthu + 0x30); Txout[1] = (char)(inthun + 0x30); Txout[2] = (char)(intten + 0x30); Txout[3] = (char)(intone + 0x30); Txout[4] = (char)('.'); Txout[5] = (char)(inpone + 0x30); Txout[6] = (char)(inpten + 0x30); //Txout[7] = (char)(inpthu + 0x30);}
交换后,整数部分的高位如果没有值,是用零补上,如果你不喜欢整数的左边有零,就加上几句把它们去掉吧。
希望能帮到你。
NgLT
songbp ruan:
回复 lung tat ng:
我也遇到了这个问题, 帮你顶一下。