一个用于加速嵌入式Linux中GSM模块AT指令的好用的C库是什么?

3
我曾使用过Telit的GM862-QUAD-PY模块(链接在此:http://www.telit.com/en/products.php?p_ac=show&p=4)。该模块内置Python解释器。长期以来,我将其作为单模块GSM/GPRS解决方案使用。我基本上编写Python脚本,向模块本身的GSM部分发送和接收AT命令。使用Python,我还可以访问其GPIO引脚、UART、位带SPI和I2C总线。
然而,这个Python解释器有很大的限制。它只适用于小型项目。它不支持线程或任何类型的中断或信号。因此,编写的Python程序必须具备一个大的超级循环。在我的应用中,GM862模块从UART读取传入数据并处理它们,然后将它们上传到GPRS服务器。同时,它还会读取从SMS或GPRS服务器发送的命令。随着更多用户使用我的系统(这意味着UART上的更多数据和对系统的更多SMS命令),超级循环变得越来越慢。优化Python程序并没有帮助太多,甚至使我的代码更加混乱。
最后,我决定转换到嵌入式Linux平台。Telit有GE863-PRO,它是GSM/GPRS模块的嵌入式Linux版本,但是开发套件很难获得。现在我正在看Beaglebone。我将使用GM862-QUAD-PY普通的AT命令方式。然而,AT命令处理速度较慢。某些命令可能需要长达15秒才能完成。在原始的Python代码中,我只需等待AT响应即可。之后,我会做一些不涉及AT命令的其他事情。
由于我现在在Linux上,并且可以使用Pthreads,因此我希望充分利用GSM模块并增加其吞吐量。这是我的初始想法。我创建一个AT命令挂起队列。队列中的每个元素都包含AT命令本身和回调函数。我创建一个线程,从该队列中获取AT命令并通过UART发送出去,线程轮询响应。当有响应时,线程将调用回调函数。
因为我是嵌入式Linux和Pthreads的新手,所以我想知道这是否是实现高效利用GSM/GPRS模块的最佳方法,是否有任何好的现有库可以利用。
提前感谢您的帮助。

1
http://lxr.free-electrons.com/source/Documentation/serial/n_gsm.txt - artless noise
这个主题/问题有任何结果吗? - Matthew Eshleman
当我提出这个问题时,我对线程和异步IO的世界还很陌生。我不再在那个项目上工作了。但是,我的问题可以通过使用selectepoll或简单地使用线程来解决。我不是Linux系统调用方面的专家,所以您可以深入研究该领域。这是计算机科学中一个已经解决的问题。我知道的相关关键字有:green threads、协程、异步I/O。只需查看维基百科中的异步I/O页面(http://en.wikipedia.org/wiki/Asynchronous_I/O),您就会找到许多相关主题。 - foresightyj
1个回答

0

你的解决方案肯定会起作用。如果你从未使用过Linux和pthreads,那么这是一个不错的项目,可以学习如何使用它们。

但是我无法确定速度有多快,因为某些AT命令可能需要几秒钟才能运行。我建议你先通过串行终端测试你的AT命令,看看是否值得改变实现你的待处理队列。

如果你正在通过GPRS连接到服务器,你应该考虑使用ppp。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接