mbed

USBSerialの送信

ee9king に投稿

mbed-os5のUSBSerialはボーレート設定も要らず、パソコン側のOS標準ドライバで動作するようでTargetマイコンを変えても常にポート番号が同じで使いやすい。しかしprintfが遅い

mbed-os5のAPIにあるUSBSerialでprintfを使うと1バイトごとパケットに乗せられる。1ms間隔でデータを送信したかったが、間隔が1msではなかったという結果があり、気づいた。下記コードで確認してみた。USBデコードできるオシロで確認すると1byte=1packetで送信されていた。

mbed-os5 USBSerial

ee9king に投稿

エキスパートには当たり前だったかもしれないのだが、私は知らなかった。

mbed-os5のAPIにあるUSBSerialでは、printfの送信で1バイトごとパケットに乗せられる。1ms間隔でデータを送信したかったが、間隔が1msではなかったという結果があり、気づいた。下記コードで確認してみた。

mbed-os5でUSBSerial

ee9king に投稿

os2からos5へ変えていきなさいということを言われているらしいので、数週間ずっとチャレンジしていました。

直近でやりたかったことは、Keil Studio Cloudのos2では実現できていたので、これをos5に移行する試みだった。os5はmbed-os-example-blinky5を作って、LEDの点滅動作ができていることを確認してのち、USBSerialを追加するもの。

変数参照が最適化される

ee9king に投稿

os2からos5へ変更する際に、どうもTickerがうまく動かなかった。

Ticker tbase;
DigitalOut led(LED1);

volatile int tb_reach=0;
void tbase_t(void){
    tb_reach=0;
}
int main(){
    tbase.attach( callback(tbase_t) , 0.5 ) ;
    while (true) {
        led = !led;
//        thread_sleep_for(500);
        while( tb_reach );
        tb_reach = 1;
    }
}

mbed-os5-example-blinkyのthread_sleep_for()をTickerに変えるだけだから、動いて当然、と思ってたのに while( tb_reach ); のところからぬけてくれないみたいな動きになった。

mbed困っております2

ee9king に投稿

前記事では、mbedビルドが違うことでUSBDeviceをインポートしたのちBuildエラーになることを書いたが、mbed.bldにビルドURLを書いてやれば、ビルドコンパイルができるようになる。

mbedビルド

https://os.mbed.com/users/mbed_official/code/mbed/builds

各ビルドをクリックすると、そのURLに飛ぶのだが、buildsの前にスラッシュが余計に入り、error表示が出る

https://os.mbed.com/users/mbed_official/code/mbed//builds/65be27845400/

ダブっているスラッシュを削除してアクセスすれば表示され、そのURLをmbed.bldに貼り付ければ、そのURLでビルドされるようだ。

mbed困っております

ee9king に投稿

mbedオンラインコンパイラがなくなるため、段階的にKeilStudioで作業するように変えていってますが、「ほとんど動かない」。というか、うごくんだけど、いろんなエラーが出て気持ち悪い。何をやってもすっきりしない状態が続いている。

やりたいことは、Nucleo-F411にUSBの配線を施し仮想シリアルを動かしたいのである。テストは下記

シリアル通信

ee9king に投稿

長らく疑問に思っていたことがあるが、今のところ理解できているわけじゃない。

CDCクラスの仮想COMシリアルは、実際の通信自体はUSBだ。しかし、仮想COMということで、ボーレート設定があり、実際ボーレート設定が間違っていると、通信ができず文字化けになったりして、通常のシリアル通信と同じ挙動を示す。

シリアル通信をどんな速度設定にしようと、実際の通信はFull-Speed以上であり、どうやってもそれ以上だ。また仮想COMで使用する通信にはハンドシェークがない。通常のシリアルならハードハンドシェーク(RTS/CTSあるいは、DTR/DSR、あるいはその両方)の設定があって結線が必要になるという事実がある。

実際、ボーレート設定などあるがUSBの最高速度で通信していて、ならパケットロストなど通常起こりえないなら、うまく出来ている(つまり速度は関係ない)のではないかという疑問だ。