一、引言
帖1【JLINK调试篇】JLINK-RTT Viewer工具使用(一)-电子产品世界论坛
帖2【JLINK调试篇】RTT Viewer工具的安装与配置(二)-电子产品世界论坛
以上帖子完成了RTT View工具的安装、库文件移植等内容,但是RTT源码不支持浮点数输出打印,需要对源码作如下修改以实现浮点数格式化输出。
二、操作方法
2.1 封装RTT_printf函数
main.c文件增加如下代码,封装的RTT_printf函数支持可变长度参数输入
void RTT_printf(const char * sFormat, ...);
void segger_rtt_init(char * str);
void RTT_printf(const char * sFormat, ...)
{
va_list ParamList;
va_start(ParamList, sFormat);
SEGGER_RTT_vprintf(0, sFormat, &ParamList);
va_end(ParamList);
}
void segger_rtt_init(char * str)
{
SEGGER_RTT_Init();
RTT_printf(str); // 封装接口,无需填写 BUFFER_INDEX
}2.2 RTT源码修改
在Keil内打开SEGGER_RTT_printf.c文件,定位至文件第445行
case '%': _StoreChar(&BufferDesc, '%');
![1734533324664513.png 5A%~4T{%0P8IQIJWE6]XBII.png](http://uphotos.eepw.com.cn/1709346044/pics/1734533324664513.png)
新增case如下
//----------输出浮点-----------------------------
case 'f':
case 'F':
{
float fv;
fv = (float)va_arg(*pParamList, double); //取出输入的浮点数值
v = (int)fv; //取整数部分
_PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags); //显示整数,支持负数
_StoreChar(&BufferDesc, '.'); //显示小数点
v = abs((int)(fv * 1000000));
v = v % 1000000;
_PrintInt(&BufferDesc, v, 10u, 2, FieldWidth, FormatFlags); //显示小数点后两位
// v = abs((int)(fv * 1000));
// v = v % 1000;
// _PrintInt(&BufferDesc, v, 10u, 2, FieldWidth, FormatFlags); //显示小数点后三位
// v = abs((int)(fv * 10000));
// v = v % 10000;
// _PrintInt(&BufferDesc, v, 10u, 2, FieldWidth, FormatFlags); //显示小数点后四位
//
// v = abs((int)(fv * 100000));
// v = v % 100000;
// _PrintInt(&BufferDesc, v, 10u, 2, FieldWidth, FormatFlags); //显示小数点后五位
//
// v = abs((int)(fv * 1000000));
// v = v % 1000000;
// _PrintInt(&BufferDesc, v, 10u, 2, FieldWidth, FormatFlags); //显示小数点后六位
}
break;
//---------------------------------------main.c浮点数测试
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_Delay(300);
RTT_printf("PI=%f...\n",3.141590);//输出小数点后6位
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}RTT源码修改完成后,编译无误烧录程序至目标板
三、实验结果
可以看到RTT_printf实现浮点数输出打印,使用方式与标准库函数printf一致

我要赚赏金
