【发布时间】:2019-01-28 04:19:27
【问题描述】:
我正在自己的实现中使用微控制器和 c/c++ 从调制解调器读取 AT 命令
但是!!总是一个但是!在我的程序上有两个“线程”之后,第一个是我使用 strcmp 比较来自 Moden 的可能回复,我认为这非常慢
比较函数
if (strcmp(reply, m_buffer) == 0)
{
memset(buffer, 0, buffer_size);
buffer_size = 0;
memset(m_buffer, 0, m_buffer_size);
m_buffer_size = 0;
return 0;
}
else
return 1;
这对我来说适用于 AT 或 AT+CPIN 等 AT 命令吗?调制解调器的最后一个响应是“OK”,中间什么都没有,但它不能使用 AT+CREG 之类的命令?,它的响应是:
+REG: n,n
OK
我期待“+REG:n,n”,但我相信 strncpy 非常慢,我的缓冲区数据被替换为“OK”
第二个“线程”,它启用 UART RX 中断并在每次接收到新数据时替换我的缓冲区数据
中断句柄:
m_buffer_size = buffer_size;
strncpy(m_buffer, buffer, buffer_size + m_buffer_size);
你知道有比 strcmp 更快的吗?或改善 AT 命令响应阅读的方法?
【问题讨论】:
-
哪种语言,C 或 C++?它们是不同的语言。例如,C++ 有
std::string而 C 没有。 C++ 有一个关联数组或std::map,C 没有。在 C++ 中,您可以在std::map中使用 functors 来帮助解析。此外,C++ 具有bool类型,因此您可以返回true或false而不是 1 或 0。 -
我更喜欢使用纯 C,我的问题是 strcmp 的比较速度没有我想要的那么快,它正在被新数据覆盖
-
为什么在引号中使用“线程”?实际执行情况如何?此外,您将需要某种形式的互斥来避免踩踏旧数据。
-
您应该删除您不使用的语言标签。混合使用 C 和 C++ 更让人头疼,我不建议这样做。
标签: c++ c command at-command