2

私はおそらく呼吸以外はまったくの初心者なので、明確でない場合は申し訳ありませんが、次のようになります。

I2Cバスを介して回路にバイトを書き込むCの関数があり、ヘッダーファイルでは次のようになります。

BOOL WINAPI JidaI2CWrite(HJIDA hJida, DWORD dwType, BYTE bAddr, LPBYTE pBytes, DWORD dwLen);
  • hJida: ボード ハンドル。
  • dwType: I2C バスのゼロベースの番号。
  • bAddr: I2C バス上のデバイスのアドレス。バスに書き込まれる 8 ビット全体。
  • pBytes: バイトを含む場所へのポインター。
  • dwLen: 書き込むバイト数。

アドレス 0x98 の回路に 1 バイトだけ書き込みたい場合は、次のようにします。

unsigned char writing[1];
writing[0]=0x10;

unsigned char *pointer;
pointer = &writing[0];


JidaI2CWrite(hJida,0,0x98,pointer,1);

これは機能しているように見えますが、0x10FF などの 2 バイトを書き込みたい場合は機能しません。では、1 バイトではなく 2 バイトを指すポインターを作成するにはどうすればよいでしょうか。

ありがとう

4

5 に答える 5

10

あなたはこのようなものが欲しいです:

unsigned char writing[2];
writing[0] = 0x01;
writing[1] = 0x02;

JidaI2CWrite(hJida, 0, 0x98, writing, 2);

Cの配列は通常、ポインターと同じように使用できることに注意してください。変数writingは、この場合は2バイトのサイズのメモリのチャンクへの単なるポインタと考えることができます。その場所を指す別のポインターを作成することは冗長です(この場合)。

任意のバイト数を指すようにすることができることに注意してください。

unsigned char writing[12];

//fill the array with data

JidaI2CWrite(hJida, 0, 0x98, writing, 12);
于 2009-08-19T13:32:29.163 に答える
6

これを試して...

//A buffer containing the bytes to be written
unsigned char writeBuffer[] = {0x10, 0xFF}; 

//writeBuffer itself points to the start of the write buffer
//you dont need an extra pointer variable
//Indicate the size of the buffer in the call to the function
//pointers do not carry array size information with them (in C/C++)
JidaI2CWrite(hJida,0,0x98,writeBuffer,2); 

またはそれ以上

unsigned char writeBuffer[] = {0x10, 0xFF};

JidaI2CWrite(hJida,0,0x98,writeBuffer
              ,sizeof(writeBuffer)/sizeof(unsigned char));

注:sizeof(writeBuffer)/sizeof(writeBuffer[0])配列のサイズをバイト単位で自動的に計算します

于 2009-08-19T13:32:52.223 に答える
1

dwLenパラメータが書き込むバイト数であるかのように見えます。それで:

unsigned char writing[2];
writing[0] = 0x10;
writing[1] = 0xff;
JidaI2CWrite(hJida, 0, 0x98, writing, 2);

pointerポインティングの使用は、実際に書き込みたいバイトの次のバイトを指すようにwriting[1]設定されるため、おそらく記述どおりに機能しないことに注意してください。これはタイプミスだと思いますが、そうでない場合は、先に進む前に既存のコードを確認することをお勧めします。pointer

于 2009-08-19T13:33:30.303 に答える
1

writingすでに必要なポインタです。

を取り除きpointerます。

JidaI2CWriteの最後のパラメーターは、書き込みたいバイト数です。

ポインタpBytesは、書き込みたいブロックの先頭を指します。

于 2009-08-19T13:35:37.603 に答える
0

2つの選択肢があります。

1)それらを別々に書く:

書き込み[0]=0x10; 書き込み[1]=0xFF;

2)システムのshortが2Bytesであるかどうかを確認し、shortを使用します。

おそらく((short *)writing)[0] = 0x10FF;

また、あなたは文字を書くことを宣言する必要があります[2]。

そして、他の人が言っているように、2バイトを書きます...

于 2009-08-19T13:34:35.730 に答える