我的USART從「黑匣子」接收一個字符串,該字符串包含兩個雙精度值和十六進制值。該字符串放在緩衝區rbuf.buf中,總大小爲32個字符。通常我會收到19個字符,但最後幾次會出現額外的錯誤字符。緩衝區通常如下所示(以十六進制表示):C#,從USART中提取兩倍接收字符緩衝區
0x31 0x32 0x33 0x2e 0x34 0x35 0x20 0x36 0x37 0x2e 0x38 0x43 0x37 0x41 0x41 0x20 0x0a ,0X0D,0×00,...
我想提取兩個雙打中其它一些實例123.45和67.89,並嘗試以下操作:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
...
void buffer_to_float(void)
{
static char string1[10] = "";
char *string2;
for(uint8_t i=0;i<6;i++)
{
char c = rbuf.buf[i]; // this is a char but how do I make it a pointer?
string2 = strcat (string1, c); // ... "char" is incompatible with "char*" ...
}
double R = atof(string2);
printf("%lf\n", R);
}
我知道b。我在這裏做一些傻事b呃什麼? 我使用中斷程序來接收字符串,我應該在那裏進行提取還是應該儘可能短/快?
謝謝你告訴我,我怎麼這麼傻我,我想我需要它;-)
你真的,真的不應該在中斷函數中執行任何格式化/轉換/浮點「填充」。你有權儘可能縮短這部分。 – 2012-03-27 13:18:32