做一个串口输出的com_printf()函数。
例如:
com_printf(char *fmt,...);
以前一直用char,int这样的类型都好好的。
当是今天要用到float打印就抓瞎了。
今天用开发板子测试了浮点数的可变参数,发现一些有现象。
CPU:STM32F205
IAR:6.3版本
C语言优化等级:选择低[Low].
测试代码下:
-
- //调用1
- void testFunc(char* ctrl, ...)
- {
- char ctmp = 0;
- int itmp = 0;
- float ftmp = 0;
-
- va_list argp;
- va_start(argp, ctrl);
- ctmp = va_arg(argp, char);
- itmp = va_arg(argp, int);
- ftmp = va_arg(argp, float);
- va_end(argp);
- ctmp = ctmp?ctmp:ctmp;
- itmp = itmp?itmp:itmp;
- ftmp = ftmp?ftmp:ftmp;
- }
- //调用方式
- float tfp = 10.12;
- testFunc2("s",'c',12,tfp);
听别人的直接从堆栈里面取:
-
- //调用2
- void testFunc2(char *fmt,...)
- {
- void *p;
-
- p=&fmt; //此时*p指向字符串"yy"首址,**p是字符串第一个字符'y'。
- p=(char **)p+1; //此时*((char *)p)为字符'y'。
- p=(char *)p+1; //此时*((int *)p)为0x0002。
- p=(int *)p+1; //此时*((long *)p)为0xC1480000,即-12.5的IEEE-754标准格式。
- p=(float *)p+1;
- p=p?p:p;
- }
- //调用方式
- float tfp = 10.12;
- testFunc2("s",'c',12,tfp);
发现这两种方式都无法取到float参数。
各位大侠,你们试使用什么方法呢。
以下方法不讨论:
float fp= 10.12
int tmp = 0;
tmp = fp*100; //扩大为整数
com_printf("%d",tmp);
这里是好奇为什么取不到浮点,不是为其他的。
|