AT プロトコルを介してモデムとも通信する組み込みソフトウェアを開発しています。メッセージを読みたいのですが、メモリ容量に問題があります。私には複数のメッセージがある可能性があり、AT コマンド セットを使用すると、それらが一度に返されます。それらをすべて保存して処理するためのメモリ容量がありません(1KB程度しかありません)。
ここで例を参照してください: http://www.smssolutions.net/tutorials/gsm/receivesmsat/
私は送信しますAT+CMGL="ALL"
。次に、次のようなものが返されます。
+CMGL: 1,"REC UNREAD","+31625012354",,"07/07/05,09:55:16+08"
Test message 1
+CMGL: 2,"REC UNREAD","+31625012354",,"07/07/05,09:56:03+08"
Test message 2
OK
ここでの問題は、メッセージに特定のアクションをトリガーする特定のディレクティブが含まれている可能性があり、実行に時間がかかる可能性があることです。その間、モデムからデータを受信するためのバッファがオーバーフローする可能性があります。一方、バッファオーバーフローを防ぐために最初にすべてのメッセージをメモリに読み込んでから、メモリからそれらを処理するためのメモリ容量がありません。
別の方法は、 を使用して単一のメッセージを読み取り、AT+CMGR=2
1 つのメッセージだけを取得することです。
+CMGL: 2,"REC UNREAD","+31625012354",,"07/07/05,09:56:03+08"
Test message 2
OK
ただし、これが機能するには、ストレージの場所 (上記の例では 2) を知る必要があります。
私の直感では、最初に を実行してAT+CMGL
、データを解析し、保存場所のみを保持してから、AT+CMGR
.
ただし、セカンドオピニオンを受けたい。私はまだ AT や組み込みソフトウェアの経験が浅いので、何かを見落としている可能性があります。