当前位置:   article > 正文

嵌入式STM32:关于使用sprintf()的问题_stm32 sprintf

stm32 sprintf

        最近在做项目时,我在通过串口发送一个类型强制转换的变量后出现了编译错误。

        看了一些的例程,发现可以使用sprint()函数。

  1. sprintf((char *)DispText[0],"VA:%03d.%02dV ",ValueDlg.RmsVoltage[0]/100,ValueDlg.RmsVoltage[0]%100);
  2. sprintf((char *)DispText[1],"VB:%03d.%02dV ",ValueDlg.RmsVoltage[1]/100,ValueDlg.RmsVoltage[1]%100);
  3. sprintf((char *)DispText[2],"VC:%03d.%02dV ",ValueDlg.RmsVoltage[2]/100,ValueDlg.RmsVoltage[2]%100);
  4. UartData_Send((unsigned char *)DispText[0],strlen(DispText[0]));
  5. UartData_Send((unsigned char *)DispText[1],strlen(DispText[1]));
  6. UartData_Send((unsigned char *)DispText[2],strlen(DispText[2]));

        以上函数可以简单的理解成springf把后面计算得到的值通过上面的绿色字符串的形式存到DispText [ ] 这个数组里,这样串口就可以发送字符串。

        也就是所谓的数据格式化,以下是例子讲解。

  1. // 程序使用sprintf 将各种数据格式化后置于字符数组buffer中
  2. #include <stdio.h>
  3. int main( void )
  4. {
  5. char buffer[200], s[] = "computer", c = 'l';
  6. int i = 35, j;
  7. float fp = 1.7320534f;
  8. // 格式化并打印各种数据到buffer
  9. j = sprintf( buffer, " String: %s\n", s ); // C4996
  10. j += sprintf( buffer + j, " Character: %c\n", c ); // C4996
  11. j += sprintf( buffer + j, " Integer: %d\n", i ); // C4996
  12. j += sprintf( buffer + j, " Real: %f\n", fp );// C4996
  13. printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
  14. return 0;
  15. }

        嵌入式里用的c库和教程里的c库不一定完全一样,keil里有设置可以选use microlib。

        printf有时可以当串口 是因为有fputc这种方法重定向printf成串口打印了。类似于取一个名字叫printf的函数代替c库里的。

        sprintf没有重定向的话一般都是c库里<stdio.h>的用法。具体底层 c库和一些桩函数,有机会还是要多去看C语言编译相关的底层知识。 Zaaaao

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/713673
推荐阅读
相关标签
  

闽ICP备14008679号