我曾经使用 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、bitbanging SPI 和 I2C 总线。
但是,这个 python 解释器有很大的局限性。它只适用于小型项目。不支持线程或任何类型的中断或信号。所以写的python程序必须有一个大的超级循环。在我的应用程序中,GM862 模块从 UART 读取传入数据并对其进行处理并将它们上传到 GPRS 服务器。同时,它还读取从 SMS 或 GPRS 服务器发送的命令。随着越来越多的用户使用我的系统(这意味着 UART 上的更多数据和系统的 SMS 命令更多),超级循环变得越来越慢。优化 python 程序并没有多大帮助,甚至会混淆我的代码。
最后,我决定切换到嵌入式 linux 平台。Telit 有 GE863-PRO,它是一个嵌入式 linux 版本的 GSM/GPRS 模块,但它的开发套件很难获得。现在我在看 Beaglebone。我将使用普通的 AT 命令方式使用 GM862-QUAD-PY。但是,AT 命令处理起来很慢。某些命令可能需要 15 秒才能完成。在原始 Python 代码中,我只是等到有 AT 响应。之后,我会做一些不涉及 AT 命令的事情。
由于我现在在 linux 中并且可以使用 Pthreads,因此我想充分利用 GSM 模块并增加其吞吐量。这是我最初的想法。我创建了一个 AT 命令挂起队列。队列中的每个元素都由 AT 命令本身和一个回调函数组成。我创建了一个线程,该线程从该队列中获取 AT 命令并通过 UART 发送出去,然后线程轮询响应。当有响应时,线程会调用回调函数。
因为我是嵌入式 linux 和 Pthreads 的新手,所以我想知道这是否是实现 GSM/GPRS 模块的高利用率的最佳方式,以及是否有任何我可以利用的好的现有库。
提前致谢。