通过偏移访问结构

时间:2015-05-15 17:16:32

标签: c beagleboneblack

我已经多次询问过这个问题,但出于某种原因,当我尝试将offsetof与stddef.h标头一起使用时,它不会在我的eclipse IDE中解析这个宏。相反,我试图通过手动计算来访问该结构。该结构仅由指针组成。

这是我目前的代码。

 int chkpinmode(int header, int pin)
    {
        /*
         * WARNING: This piece of code has no error checking yet!
         */
        //Calculations...
        unsigned int pinoffset=0;

        if(header==8)
        {//byte offset
            pinoffset=((pin-2)*4);
        }
        else if(header==9)
        {//byte offset
            pinoffset=( (44 * 4)+( pin - 11 ) * 4 );//Defines at what point to look at the structure
        }
        char * pinConf=(char *)(&pins+pinoffset);//No need to worry about padding because structure is made up of pointers
        int pinConfValue=-10;
        pinConfValue=(int)pinConf;

        int mode;

        mode=(int)(pinConfValue&7);//Checks one the first 3 bits

        return mode;
    }

该结构是一个包含一个volatile void *的volatile int *的长列表,它由另一个函数给出地址。头文件有

extern pins;

这是结构。因此,在调用chkpinmode函数时,将设置所有地址。

1 个答案:

答案 0 :(得分:0)

使用offsetof()编译代码时,它会起作用。只是eclipse IDE将它标记为错误,但它会起作用。