在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
/home/xin/ecos3/ecos-3.0/packages/devs/eth/amd/lancepci/v3_0/src/if_lancepci.c:528: 错误: 赋值运算的左操作数必须是左值 vi /home/xin/ecos3/ecos-3.0/packages/devs/eth/amd/lancepci/v3_0/src/if_lancepci.c
for (i = 0; i < cpd->rx_ring_cnt; i++) { HAL_PCI_CPU_TO_BUS(d, (cyg_uint8 *)b); _SU32(p, LANCE_RD_PTR) = (b & LANCE_RD_PTR_MASK) | LANCE_RD_PTR_OWN; _SU16(p, LANCE_RD_BLEN) = (-_BUF_SIZE); p += LANCE_RD_SIZE; d += _BUF_SIZE; } 分别定义为 ~/ecos3/ecos-3.0/packages/devs/eth/i386/pc/lancepci/v3_0/include$vi devs_eth_i386_pc_lancepci.inl #define HAL_PCI_CPU_TO_BUS(__cpu_addr, __bus_addr) \ CYG_MACRO_START \ (__bus_addr) = CYGARC_PHYSICAL_ADDRESS(__cpu_addr); \ CYG_MACRO_END #endif // __WANT_CONFIG 457行b的定义 cyg_uint32 b; 以上函数中红色字体将被替换为 (cyg_uint8 *)b = CYGARC_PHYSICAL_ADDRESS(cpd->rx_ring);
而强制转换放在等号的左边是不被编译器支持的,正常的做法是放到选号的右边,我想不到什么好的办法能比较方便的把放到右边,所以我就把强制转换去掉了,因为把 uint_32 的变量赋值给 uint_8* 应该是没有什么问题的,所以就把for中的代码改成为 HAL_PCI_CPU_TO_BUS(d, b);
修改方式: vi打开文件使用%s/(cyg_uint8 \*)b/b/g 保存关闭后,查看修改结果 grep "(cyg_uint8 \*)b" * 无任何显示表示都被替换成功
这样可以顺利编译通过。
参考资料: http://blog.csdn.net/easonxiang/article/details/4794297 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论