Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
10 years, 11 months ago.
mbed Serial ライブラリを使った全二重通信で、トラブル
初めまして。mbedは初めて3ヶ月程度の初心者です。よろしくお願いします。
Serial ライブラリを使った全二重通信で、 送信は約50Hzでメインループを回しその中でSerial.putc()により行い、 受信はSerial.attach(RxIrq)で割り込みしSerial.getc()で受信します。
送信だけ、受信だけ、なら問題ないのですが(putc()、受信割り込み、のどちらかをコメントアウトすると問題は発生しない) 下記プログラムの状態だと、しばらく動作した後ランダムで問題が発生します。 Rx_interrupt部分が無限に呼び出され続け、メインループがフリーズしてしまいます。 そうなってしまった場合、PC等からの送信を止めても、状況は変わりません。
受信割り込み要求フラグがクリアされない(getc()に失敗?)のような症状で、 原因はputc()とのバッティング等にありそうですが、よく分かりません。 原因、対策など。ご教授下さい。 Serial ライブラリは、19 sep 2013 Modified プラットフォームはLPC1768です。
下記にプログラムを添付
- include "mbed.h"
- include "Serial.h"
DigitalOut LED_loop(LED1); Serial SerialPort(p13,p14);
static void Rx_interrupt(void) { char test = SerialPort.getc(); /Serial.getc()/// }
static int nLoopCount;
int main() { SerialPort.baud(115200); SerialPort.format(8,Serial::None,1); SerialPort.attach(&Rx_interrupt, Serial::RxIrq);
while(1) { about 50Hz wait(0.02);
LED on and off for Debug if(nLoopCount>20){nLoopCount=0;} else{nLoopCount++;} if(nLoopCount<10){LED_loop=1;} else{LED_loop=0;}
Serial send for(int n_Count=0; n_Count <10; n_Count++) { SerialPort.putc(0x01);/Serial.putc()// } } }
1 Answer
10 years, 11 months ago.
http://mbed.org/forum/ja/topic/4471/
https://mbed.org/forum/bugs-suggestions/topic/4473/
と一緒かなあ。
ライブラリが最新か確認してみては如何ですか。