CAN通信プログラムを作成しようと思うのですが、
初歩的な事で誠に恐縮ですが、
8byteに以下のHexデータをセットしたいのですが
どうすればよいのでしょうか?
Adress value
0byte -> 0x01
1byte -> 0x02
2byte -> 0x03
3byte -> 0x04
4byte -> 0x05
5byte -> 0x06
6byte -> 0x07
7byte -> 0x08
こんな風になるのでしょうか?
CanMessage[1].bData = 0x0102030405060708;
以上宜しくお願い致します。
開発環境 vc++6.0
ここでのAdressの指す意味はビットシフト位置と
とらえてよろしいですか?
したいことの意図が少しわかりにくいのですが
通常は任意の位置にシフトさせて和をとるのが
基本です。
(例)
unsigned int uiHex1 = 0x01; // -->0x00000001のこと(int型なので)
unsigned int uiHex2 = 0x02; // -->0x00000002のこと(int型なので)
unsigned int uiHexAns = 0; // 上記の和を格納する用
uiHexAns = uiHex1 | (uiHex2 << 16); // uiHex2を16ビットシフトさせ和をとる
// uiHexAns --> 0x00000201となる
CanMessage[1].bData の bDataのデータ型が8バイトであれば(chanさんの記載通りに)
> CanMessage[1].bData = 0x0102030405060708;
と代入すれば良いです。
っていうか単に
char data[]={'\x01', '\x02' ... }; ぢゃないの?
CanMessage[1].bDataのデータ型をきちんと提示しないとわからないと
思いますよ。素直に考えるとバイトの配列かなと思いますけれど、
それならば、tetrapodさんが書かれているようにするのが一番素直でしょう。
素直にこんな風に設定するのも有りかなと。
CanMessage[1].bData[0] = (unsigned char)0x01;
CanMessage[1].bData[1] = (unsigned char)0x02;
CanMessage[1].bData[2] = (unsigned char)0x03;
CanMessage[1].bData[3] = (unsigned char)0x04;
CanMessage[1].bData[4] = (unsigned char)0x05;
CanMessage[1].bData[5] = (unsigned char)0x06;
CanMessage[1].bData[6] = (unsigned char)0x07;
CanMessage[1].bData[7] = (unsigned char)0x08;
思うにbDataが仮に配列だとして配列数はどのくらい取られているのかが
心配ですね。それともポインタか何かで確保して設定している?
みなさんご指導ありがとうございました。
まさしくPATIO 様のご指導の通りでした。
CanMessage[1].bData[0] = 0x01;
CanMessage[1].bData[1] = 0x02;
.
.
でCAN通信できました。
皆様ありがとうございました。m(__)m