-1

你可以看看这个网站:http ://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NSK1042来更好地理解我在说什么。例如,该网站显示:传感器的 i2c 地址为 0x10,其中的值表显示为:

Address       Type           Contents

00 – 07H      chars           Serial Version Number

43H           byte            Sensor 1 DC Signal Strength

如何在 C 中访问这些值?谢谢。

4

2 回答 2

3

这些寄存器可以进行内存映射。您需要做的几件事:

  • 将设备的物理内存映射到您的程序地址空间
  • 将指向该区域的任何指针声明为 volatile

volatile 关键字将阻止编译器“优化”不正确的程序。例如,假设读取相同的内存位置将产生相同的结果,因为程序没有写入它。

最简单的部分是声明一个结构,使得所有偏移量都与设备相同,并且每个部分都具有正确的大小。

IE

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

volatile struct hitech *my_device;

第二部分是确定设备的映射位置。如果它已插入您的计算机,您应该能够看到这一点。您可能需要执行以下操作之一:映射设备的物理地址。或者直接写 my_device = 0x<address>。或者两者的结合。

来自网站:“IRSeeker V2 传感器的 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 回答