2012-04-03 5 views
3

私はATプロトコルでモデムと通信する組み込みソフトウェアを開発しています。今はメッセージを読んでみたいが、私は自分の記憶容量に問題があると思っている。私のために複数のメッセージがあり、ATコマンドセットを使用すると、それらを一度に返すことができます。私はそれらを処理するためにそれらをすべて格納する記憶容量を持っていません(私は1KB程度しかありません)。制限付きメモリを搭載した組み込みシステムでATを使用してSMSを読み取る方法は?

は、ここに例を参照してください: http://www.smssolutions.net/tutorials/gsm/receivesmsat/

私はAT+CMGL="ALL"を送信します。ここでの問題は、メッセージの実行に時間がかかる可能性がある特定のアクションをトリガ特定のディレクティブを含めることができるということです

+CMGL: 1,"REC UNREAD","+31625",,"07/07/05,09:55:16+08" 
Test message 1 
+CMGL: 2,"REC UNREAD","+31625",,"07/07/05,09:56:03+08" 
Test message 2 

OK 

:私は当時のような何かを得ます。その間に、モデムからのデータを受信するためのバッファがオーバーフローする可能性があります。一方、私は、バッファオーバーフローを防ぐためにすべてのメッセージをメモリに読み込み、メモリからそれらを処理するメモリ容量を持っていません。

代替バックだけつのメッセージを取得し、AT+CMGR=2と、単一のメッセージを読んでいる:これが動作するため

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

OK 

しかし、私は(上記の例では2)の保存場所を知っている必要があります。

最初にAT+CMGLを実行し、データを解析して保存場所のみを保存してから、AT+CMGRで1つ1つずつ要求して解析(および削除)するように指示します。

しかし、私は第二意見を受け取りたいと思います。私はATで経験したことはありませんし、まだ組み込みソフトウェアでは、おそらく私は何かを見落としている。

答えて

3

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

はい、醜いですが、正常に動作します。

2

新しく受信されたSMSメッセージに対して構成されることがある迷惑なメッセージがあります。システム構成の詳細については、this questionを参照してください。あなたがメッセージを読んだとき、インデックスフィールド(文字列の末尾の数字を使用することができます+CMTIメッセージを受信するたびに

は、ちょうど最後に受信したメッセージを取得するためのAT+CMGRコマンドにこの値を渡す。

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

1

私が使用する別の解決方法AT+CPMSを送信してSIM内部メモリに格納されるメッセージの数メモリの容量(メッセージ数)

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

処理後、AT+CMGDで削除してください(今はその位置がわかりました)。

関連する問題