セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2024-11-14 現在

get_stream_helper()

mwx::stream を使用するためのヘルパーオブジェクト
    uint8_t型のsmplbuf配列を参照したstream_helper を経由して、mwx::streamによる演算子やメソッドを用います。
    smplbuf_u8<32> b;
    auto&& bs = b.get_stream_helper(); // ヘルパーオブジェクト
    
    // データ列の生成
    uint8_t FOURCHARS[]={'A', 'B', 'C', 'D'};
    bs << FOURCHARS;
    bs << ';';
    bs << uint32_t(0x30313233); // "0123"
    bs << format(";%d", 99);
    
    Serial << b << crlf; // Serialへの出力は smplbuf_u8<32> クラス経由で
    
    //結果: ABCD;0123;99
    

    ヘルパーオブジェクトの型名は長くなるためauto&&により解決しています。このオブジェクトに対して<<演算子などmwx::streamで定義されたインタフェースを利用できます。

    生成されたヘルパーオブジェクトbsは生成時に大本の配列bの先頭位置から読み書きを始めます。配列の末尾の場合はappend()によりデータを追加します。読み書きを行うたびに位置は次に移動していきます

    ヘルパー関数では読み出し用の>>演算子が利用できます。

    //..上例の続き
    // ABCD;0123;99 <- bに格納されている
    
    //読み出しデータ格納変数
    uint8_t FOURCHARS_READ[4];
    uint32_t u32val_read;
    uint8_t c_read[2];
    
    // >>演算子で読み出す
    bs.rewind();                //ポジションを先頭に巻き戻す
    bs >> FOURCHARS_READ;      //4文字
    bs >> mwx::null_stream(1); //1文字スキップ
    bs >> u32val_read;         //32bitデータ
    bs >> mwx::null_stream(1); //1文字スキップ
    bs >> c_read;              //2文字
    
    // 結果表示
    Serial << crlf << "4chars=" << FOURCHARS_READ;
    Serial << crlf << format("32bit val=0x%08x", u32val_read);
    Serial << crlf << "2chars=" << c_read;
    
    // 4chars=ABCD
    // 32bit val=0x30313233
    // 2chars=99