4

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=21 つのメッセージだけを取得することです。

+CMGL: 2,"REC UNREAD","+31625012354",,"07/07/05,09:56:03+08"
Test message 2

OK

ただし、これが機能するには、ストレージの場所 (上記の例では 2) を知る必要があります。

私の直感では、最初に を実行してAT+CMGL、データを解析し、保存場所のみを保持してから、AT+CMGR.

ただし、セカンドオピニオンを受けたい。私はまだ AT や組み込みソフトウェアの経験が浅いので、何かを見落としている可能性があります。

4

3 に答える 3

3

リターンまでの最初のメッセージを送信AT+CMGL="ALL"して保存します。OKモデムが完了したことを示す を受信するまで、他のすべてのデータを無視します。最初のメッセージを処理した後、送信して削除しますAT+CMGD=<NUM>( は最初のメッセージの番号です)。繰り返す。

はい、ちょっと醜いですが、うまくいきます。

于 2012-04-03T22:54:13.910 に答える
2

新しく受信した SMS メッセージ用に構成されている可能性のある未承諾メッセージがあります。システムの構成に関する詳細については、この質問をご覧ください。

メッセージを受信するたびに+CMTI、インデックス フィールド (文字列の末尾の数字はメッセージを読み取るときに使用できます。この値をAT+CMGRコマンドに渡すだけで、最新の受信メッセージを取得できます。

古い (使用済みの) メッセージを削除することをお勧めします。ほとんどの組み込み型モジュールは、メッセージを格納するためのメモリが非常に限られているためです。

于 2012-04-04T06:27:17.307 に答える
1

私が使用する別のソリューション。AT+CPMSSIM の内部メモリに保存されているメッセージの数と、メモリの容量 (メッセージの数) を読み取るために送信します。

AT+CPMSメモリ内に待機中のメッセージが 1 つ以上あると報告された場合はAT+CMGR、位置 1 から送信します。受信して解析できる 1 つのメッセージ (おそらく位置 2 または 10) で終了します。

それを処理した後、それを削除しAT+CMGDます(今、その位置は何ですか)。

于 2016-12-15T07:59:54.540 に答える