8btyeアドレスへのデータのセットの仕方 – プログラミング – Home

8btyeアドレスへのデータのセットの...
 
通知
すべてクリア

[解決済] 8btyeアドレスへのデータのセットの仕方


chan
 chan
(@chan)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

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


引用未解決
トピックタグ
まるこ
 まるこ
(@まるこ)
ゲスト
結合: 17年前
投稿: 1
 

ここでの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となる


返信引用
・・・。
 ・・・。
(@・・・。)
ゲスト
結合: 17年前
投稿: 3
 

CanMessage[1].bData の bDataのデータ型が8バイトであれば(chanさんの記載通りに)
> CanMessage[1].bData = 0x0102030405060708;
と代入すれば良いです。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

っていうか単に
char data[]={'\x01', '\x02' ... }; ぢゃないの?


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

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が仮に配列だとして配列数はどのくらい取られているのかが
心配ですね。それともポインタか何かで確保して設定している?


返信引用
chan
 chan
(@chan)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

みなさんご指導ありがとうございました。

まさしくPATIO 様のご指導の通りでした。

CanMessage[1].bData[0] = 0x01;
CanMessage[1].bData[1] = 0x02;
.
.
でCAN通信できました。

皆様ありがとうございました。m(__)m


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました