【发布时间】:2012-03-26 21:26:42
【问题描述】:
我的 USART 正在从“黑匣子”接收一个字符串,该字符串包含两个双精度值和几个十六进制值。该字符串被放置在我的缓冲区 rbuf.buf 中,总大小为 32 个字符。通常我会收到 19 个字符,但最后会收到几次额外的错误字符。缓冲区通常如下所示(十六进制):
0x31, 0x32, 0x33, 0x2e, 0x34, 0x35, 0x20, 0x36, 0x37, 0x2e, 0x38, 0x39, 0x20, 0x37, 0x41, 0x41, 0x20, 0x0a, 0x0d, 0x00, ...
我想提取两个双精度数 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);
}
我知道我在这里做了一些愚蠢的事情,但是什么? 我使用中断例程来接收字符串,我应该在那里进行提取还是这个例程应该尽可能短/快?
谢谢你告诉我我有多傻,我想我需要它;-)
【问题讨论】:
-
你真的,真的不应该在中断函数中做任何格式化/转换/浮点“东西”。尽量缩短那部分是对的。