我正在使用嵌入式 C 并尝试为 GPRS 终端申请。我的主要问题是使用 AT 命令。我使用串行线发送 AT 命令,但如果它是一些面向网络的命令,它的响应可能需要时间,因此我有很多等待,而处理器什么都不做。想法是让这个等待以相同的方式并行完成,就像在不同的线程中一样。有谁知道如何去做,因为我的系统不支持线程? 我想使用一些计时器,因为我们有每 5 毫秒调用一次的中断,但我不知道我必须等待多少秒才能响应,如果我比较中断中的字符串以检查是否收到所有消息,它可以效率很低,对吧?
您可以使用中断,将串行接口(interface)配置为在数据可用时中断,或者使用 RTOS 之类的东西,例如 FreeRTOS , 运行两个线程,一个用于主代码,另一个阻塞并等待串行数据。
更新:根据你的评论,你说你不知道数据的大小,没关系,在中断处理程序中检查终止数据的字节,这是一个简单而通用的 example 你应该检查你的 MCU 的例子:
void on_serial_char()
{
//disable interrupts
disable_interrupts();
//read byte
byte = serial.read();
//check if it's the terminating byte
if (byte == END) {
//set the flag here
MESSAGE_COMPLETE = 1;
}
//add byte to buffer
buf[length++] = byte;
//enable interrupts
enable_interrupts();
}
然后在主循环中检查该标志:
...
if (MESSAGE_COMPLETE) {
//process data
...
//you may want to clear the flag here
MESSAGE_COMPLETE = 0;
//send next command
...
}
我是一名优秀的程序员,十分优秀!