J-Link RTT 支持浮点数

11 篇文章 0 订阅
6 篇文章 0 订阅

RTT的使用

添加浮点数功能

注:

  1. 如下代码暂时不支持数据左补零,正浮点数前面显示+等功能;
  2. 不指定位宽时按实际位宽显示,不指定小数位数时按2位小数显示。
  1. SEGGER_RTT_printf.c文件的SEGGER_RTT_vprintf()函数中,添加如下代码:
    代码截图
#if 1     // support float by djd 20221114, current do NOT support some FormatFlags param, eg: '0', '+' '#'.
      case 'f':
      {
          double dv = 0, dv_doub = 0;
          int dv_int = 0, dv_int_bit_num = 1, i = 10, num_bit = 0;
          
          if(NumDigits == 0) {      
              NumDigits = 2;        					// 默认显示两位小数
          }
          
          dv = va_arg(*pParamList, double);				// 取出数据
          dv_int = (int)dv;								// 数据的整数部分
          dv_doub = dv - dv_int;						// 数据的小数部分
          if(dv_doub < 0) {
              dv_doub = -dv_doub;						// 小数部分不需要符号
          }
          while(dv_int / i != 0) {						// 求出整数部分的位数
              dv_int_bit_num++;
              i *= 10;
          }
          for(i = 0; i < NumDigits; i++) {
              dv_doub *= 10;							// 将需要显示的小数部分扩大成整数
          }
          num_bit = dv_int_bit_num + 1 + NumDigits;     // 计算出整个浮点数需要多少个位置(整数部分+小数点+小数部分)
          // SEGGER_RTT_printf(0, "dv_int[%d], dv_doub[%d], dv_int_bit_num[%d], NumDigits[%d], FieldWidth[%d]\r\n", dv_int, (int)dv_doub, dv_int_bit_num, NumDigits, FieldWidth);		// 仅用于调试
          if(FieldWidth > num_bit && !(FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY)) {			// 当指定位宽比实际位宽大,且数据非左对齐时
              for(i = 0; i < FieldWidth - num_bit; i++)
                _StoreChar(&BufferDesc, ' ');												// 使用空格占位多余的空间
          }
          _PrintInt(&BufferDesc, dv_int, 10u, dv_int_bit_num, dv_int_bit_num, 0);			// 打印浮点数的整数部分
          _StoreChar(&BufferDesc, '.');			// 打印浮点数的小数点
          _PrintUnsigned(&BufferDesc, (unsigned)dv_doub, 10u, NumDigits, NumDigits, 0);		// 打印浮点数的小数部分
          if(FieldWidth > num_bit && (FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY)) {			// 当指定位宽比实际位宽大,且数据左对齐时
              for(i = 0; i < FieldWidth - num_bit; i++)
                _StoreChar(&BufferDesc, ' ');												// 使用空格占位多余的空间
          }
          break;
      }
#endif        
  1. 在应用程序中调用SEGGER_RTT_printf()函数测试:
SEGGER_RTT_printf(0, "test float: [%5.3f][%5d][%f]\r\n", 308.1415, 1234, -450.1234);	// test float: [308.141][ 1234][-450.12]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值