环境:
- cubemx5.6, rtthread kernel+shell;
- keil MDK 5.30;
- nucleo-G474;
- 点灯程序;
问题:
无法打印float数据;
有过的尝试:
尝试a
将rt_kprintf里面的rt_vsnprintf修改为vsnprintf,同时在文件kservice.c中添加包含头文件stdio.h.
结果
崩溃,串口提示如下:
hard fault on handler,usage fault: SCB_CFSR_UFSR:0x02 INVSTATE.
尝试b
使用sprintf打印float数据到字符串,在用rt_kprintf打印字符串.
结果
崩溃,串口提示如下
hard fault on handler,usage fault: SCB_CFSR_UFSR:0x02 INVSTATE.
尝试c:
不添加任何stdio.h. 使用rt_sprintf打印到字符串后,再用rt_kprintf打印.
结果:
崩溃如上.
求助:
如何才能能打印float?
楼主把代码贴一下
@CrisJay https://github.com/kibatina/RTT_UART
试试将
rt_snprintf
改为 snprintf将
rt_sprintf
修改为sprintf
当然最好使用
snprinf
,这样避免了sprintf
的越界风险@CrisJay 还是崩溃
你给我的链接里面没有你说的那些代码,估计你是在本地改了没有推上去,方不方便直接把关于打印的代码贴在回复中?
或者可以参考如下代码:
以上代码没有修改
rt_kprintf
中的代码,直接基于原版 RT-Thread 实现的,你可以将之前修改的撤回到原来的样子,然后参考我的代码测试一下@CrisJay push上去了
看了一下
main.c
,首先snprintf
函数需要多加一个数组长度的参数,楼主没加应该是会报错的,需要加上,改过这个函数的参数后用楼主的代码进行测试,在我这里是正常运行的:推荐楼主先按照我的代码运行一下,看看有没有问题。
@CrisJay 还是不行,仿真下看led_thread_entry只会被执行一次.
@kibatina
打印结果是
还会崩溃吗,还是不会崩溃也能正常打印但是只打印一次?
@CrisJay shell没有提示崩溃. 只会打印一次.
@kibatina 楼主我看你的线程堆栈设置的优点小,你把
static char led_thread_stack[256];
改成static char led_thread_stack[2048];
试一下@CrisJay MX_LPUART1_UART_Init()这个函数有被执行两次,一次在main,一次在rt_hw_board_init.如果改为仅在rt_hw_board_init执行,那么结果是”shell没有提示崩溃,但是无响应,同时一次都不打印.”
@kibatina 可能也算崩溃,没有错误信息,但是shell无响应.
@kibatina 楼主先按照我上面的方法加大堆栈试一下
@CrisJay 可以了.目前的需求满足了.多谢支持
@kibatina 不客气。
🥰