アップロードの基本動作できたのはいいのですが、1回アップロードすると次回がキー入力がうけつけられなくなりました。
●原因
アップロード処理後、マイコン側のシリアル受信バッファに1文字ゴミ’a’が入っている現象でした。
PC側からは、’a’文字を送信する命令は無いので、Teensy、C#のUSB通信での不具合で、予期せぬ1バイトが
バッファに混入していたと考えられます。
●対策
当初string型でやりとりしていたのですが、stringだとゴミの発見がしにくいので、すべてchara型で1バイトずつ
管理することで、トラブルを減らしました。入力仕様が2種類しかないので、それにしぼったプログラムにしました。
マイコン側プログラムでシリアル受信開始時に、受信バッファを空にする動作をさせてゴミを捨てます。
//Serial bufferを空にする int ec=0; while(Serial.available()>0) { char d=Serial.read(); ec++; Serial2.printf(” SerialBuffer Input Error%d:d=%x,%c\n\r”,ec,d,d); } |
●アップロードプログラム備忘録
①Teensy
https://gist.github.com/dj1711572002/30a7e9006f2afc4c549e7553bb56a9b3
’l’が入ったら、SDディレクトリーのLIPC送る
長いデータが入ったら、PC側がファイル名が送られたと解釈して、ファイルアップロードに入る
//———-SD UPDATE TEST—————————–
int i=0; char ct=’ ‘; //cs=c[i]; i++; //Serial2.println(); clen=i; if(c[0]==’l’) } //if(s.indexOf(“bin”)>0 ||s.indexOf(“ubx”) && s.length()>6) //Serial2.println(“============================================================================”); } if(c[0]==’a’) //Serial2.println(“============================================================================”); } } |
②C# コンソール アップローダー
https://gist.github.com/dj1711572002/0526df51923c060f9974aff4ace32987
キー入力は readLineで最後に0x0Dが付いたデータとして、マイコンに送って、マイコンは、0x0Dをもってデータの終端と解釈する。
●以後
デスクトップPCでプログラム作っていたので、WIN8タブレットでも所望の速度がでるか確認します。