ページ 11

複数バイトの分割

Posted: 2013年1月07日(月) 12:53
by なつ
シリアル通信のUARTモードで送受信処を作成しています。
受信はできたのですが、送信ができません。
12バイトのデータを送信して1バイトづつに分割して配列に格納すると言うものです。
12バイトのデータを1バイトづつに分割するにはどうしたら良いでしょうか?

Re: 複数バイトの分割

Posted: 2013年1月07日(月) 12:56
by softya(ソフト屋)
環境不明ですが、それだと簡単な答えしか書けません。
配列にして添字で1バイトづつアクセスすれば良いのでは無いでしょうか?
受信が出来たのなら逆にするだけなんですけどね。

Re: 複数バイトの分割

Posted: 2013年1月07日(月) 12:59
by beatle
12バイトのデータというのは具体的に何ですか?構造体でしょうか?

基本的にはデータの先頭アドレスを1バイト整数の配列へのアドレスだと思ってアクセスすればできます。
大抵の環境だとcharが1バイトの整数ですので、

コード:

struct Hoge data;
unsigned char *p = (unsigned char *) &data;
みたいにすればいいと思います。
あとはポインタpと添字を使って1バイトずつ送ります。

または共用体を使う方法もあります。今は書きませんが興味があったら聞いてください。

Re: 複数バイトの分割

Posted: 2013年1月07日(月) 13:55
by なつ
送信データは、12バイト分の数字の羅列です。
例えば、0x123456789...
これを、12、34、56、78、のような感じで送信したいのですが、できないでしょうか?
分かりにくくて申し訳ないです。

Re: 複数バイトの分割

Posted: 2013年1月07日(月) 13:58
by beatle
その12バイト分のデータを何らかの変数に格納するやり方が分かるのなら、その変数の先頭アドレスをcharへのアドレスと見なして送信するだけです。
No.3のコード例のdata変数を、12バイトの数字が格納された変数に置き換えればいいです。

Re: 複数バイトの分割

Posted: 2013年1月07日(月) 14:25
by なつ
申し訳ないですが、
12バイトの変数の型は何にしたら良いですか?

Re: 複数バイトの分割

Posted: 2013年1月07日(月) 14:30
by softya(ソフト屋)
そもそも12バイトの変数にはどうやって値を入れるつもりでしょうか?
どこから読み込むのですか? それとも初期値ですか?
※ 型についてはbeatleさんが既に書いているんですけどね。

最初に書きましたが、環境やマイコンなど詳細を明かしてくれないとウヤムヤななままでは的確な答えを出すのが難しいです。