-1

http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NSK1042のWeb サイトを参照して、私が話していることをよりよく理解してください。たとえば、Web サイトの読み取り: センサーの i2c アドレスは 0x10 であり、そこにある値の表は次のとおりです。

Address       Type           Contents

00 – 07H      chars           Serial Version Number

43H           byte            Sensor 1 DC Signal Strength

Cでこれらの値にアクセスするにはどうすればよいですか? ありがとう。

4

2 に答える 2

3

これらのレジスタはメモリマップすることができます。あなたがする必要があるいくつかのこと:

  • デバイスの物理メモリをプログラムのアドレス空間にマップします
  • この領域へのポインタを揮発性として宣言します

volatileキーワードは、コンパイラーがプログラムを正しくないように「最適化」するのを防ぎます。たとえば、プログラムが書き込まれていないため、同じメモリ位置への読み取りで同じ結果が得られると想定します。

これの簡単な部分は、すべてのオフセットがデバイスと同じであり、各部分が適切なサイズになるように構造体を宣言することです。

すなわち

struct hitech {
    char serial_version[8];
    char manufacturer[8];
    /* etc */
};

volatile struct hitech *my_device;

2番目の部分は、デバイスがマップされている場所を特定することです。それがあなたのコンピュータに接続されているなら、あなたはこれを見ることができるはずです。次のいずれかを実行する必要がある場合があります。デバイスの物理アドレスをmmapします。または、my_device =0x<アドレス>と記述します。または2つの組み合わせ。

Webサイトから:「IRSeekerV2センサーのI2Cアドレスは0x10です」

したがって、my_deviceに対して上記の0x10を記述します。

次に、正しいマイクロコントローラー用にコンパイルし、ファームウェアとして正しい場所にプログラムをロードする必要があります。

あなたは彼らのプログラミング言語を使うほうがよいでしょう。

于 2012-10-29T23:57:47.380 に答える
0

これらの値にアクセスするための SDK を提供していないと仮定します。

// I'm assuming these are read-only, hence the "const"
const char *g_serialVersionNumber = (const char *)0x00; // be careful not to access more than 8 bytes
const unsigned char *g_sensor1DCSignalStrength = (const unsigned char *)0x43;

void main()
{
    printf("Serial version number: %s\n", g_serialVersionNumber);
    printf("Sensor 1 DC Signal Strength: %d\n", *g_sensor1DCSignalStrength);
}
于 2012-10-29T23:32:59.577 に答える