• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ecos3.0编译if_lancepci.c:528:错误:赋值运算的左操作数必须是左值 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

/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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#创建线程的多种方式之异步调用基础知识发布时间:2022-07-14
下一篇:
c#链接postgresql发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap