我知道这个话题已被打死,但在查看了很多代码示例后,我似乎无法找到这种结构的任何错误。它直接来自公司的司机。让我知道你的想法:
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'的成员
谢谢!
答案 0 :(得分:6)
我通过搜索__evenaccess
找到了以下文档:
http://documentation.renesas.com/doc/products/tool/apn/rej06j0102_rxc_rxmg_sh_ap.pdf
显然是来自SuperH和RX芯片的编译器。它的意思是创建机器代码,使用只读取该大小值的指令读取值。
否则,编译器可以通过读取uint16_t
和位移来自由读取uint32_t
。在许多系统中效率会更高。
但是在处理可能导致总线错误或硬件未定义行为的机器寄存器时。
答案 1 :(得分:3)
这是gcc
未知的编译器扩展。它来自另一个编译器。
您可以通过定义:
来删除它 #define __evenaccess
位于文件顶部。