2

我知道这个话题已经被打死了,但是在查看了很多代码示例之后,我似乎找不到这个结构的任何错误。它直接来自公司的一名司机。让我知道你的想法:

struct Descriptor
{
    __evenaccess uint32_t   status;
#if __LIT                               
    /* Little endian */
    __evenaccess uint16_t   size;
    __evenaccess uint16_t   bufsize;
#else                                   
    /* Big endian */
    __evenaccess uint16_t   bufsize;
    __evenaccess uint16_t   size;

#endif
    int8_t                  *buf_p;
    struct Descriptor       *next;
};

typedef struct Descriptor ethfifo;

由于它无法识别结构,我也得到了很多:错误:'ethfifo'没有名为'status'的成员

谢谢!

4

2 回答 2

6

我通过搜索找到了以下文档__evenaccesshttp ://documentation.renesas.com/doc/products/tool/apn/rej06j0102_rxc_rxmg_sh_ap.pdf

它显然来自 SuperH 和 RX 芯片的编译器。其含义是创建使用仅读取该大小值的指令来读取该值的机器代码。

否则,编译器可以uint16_t通过读取 auint32_t和位移来自由读取 a。在许多系统中,效率会更高。

但是在处理可能导致总线错误或硬件未定义行为的机器寄存器时。

于 2013-06-17T20:29:13.377 回答
3

这是一个未知的编译器扩展gcc。它来自另一个编译器。

您可以通过定义将其删除:

 #define __evenaccess

在文件的顶部。

于 2013-06-17T20:17:28.493 回答