您尚未登录。

楼主 # 2024-07-06 16:33:44

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,299
积分: 1259.5

rtt,同时打开SAL组件和本地的lwip组件,就报ip4_addr重复定义。

用的d133 sdk,自带rtt,还有一些移植好了的本地软件包。
单用本地软件包里的lwip里的例程,能正常运行。
现在像运行libmodbus库,发现需要打开SAL组件,打开SAL组件,又会关联NETDEV组件,打开后发现好几个重复定义,比如ip4_addr。

搜了下,有如下多个定义:

grep -rnw "typedef struct ip4_addr"
packages/third-party/lwip/src/include/lwip/ip4_addr.h:57:typedef struct ip4_addr ip4_addr_t;
kernel/rt-thread/components/net/netdev/include/netdev_ipaddr.h:98:typedef struct ip4_addr
kernel/rt-thread/components/net/lwip/lwip-2.1.2/src/include/lwip/ip4_addr.h:57:typedef struct ip4_addr ip4_addr_t;
kernel/rt-thread/components/net/lwip/lwip-2.0.3/src/include/lwip/ip4_addr.h:57:typedef struct ip4_addr ip4_addr_t;

后两个应该没使能,应该没包含进去。
第一个是本地软件包里的lwip,第二个是rtt里的netdev组件。
俩文件还不一样,要是一样的话我就删除一个就行了...

我觉得应该是两个.h文件不能在同一个.c文件中被包含,但是,不知道如何去查找引起冲突的文件...

-------------------------------------

查看报错信息,找第一个报错时的.c文件:

In file included from kernel/rt-thread/components/net/netdev/include/arpa/inet.h:14,
                 from kernel/rt-thread/components/net/sal/include/sal_socket.h:15,
                 from kernel/rt-thread/components/net/sal/include/socket/sys_socket/sys/socket.h:16,
                 from application/rt-thread/can2eth/udpandtcp.c:5:
kernel/rt-thread/components/net/netdev/include/netdev_ipaddr.h:84: note: this is the location of the previous definition
   84 | #define ntohl(x) (uint32_t)PP_NTOHL(x)
      | 
In file included from packages/third-party/lwip/src/include/lwip/ip_addr.h:43,
                 from packages/third-party/lwip/src/include/lwip/netif.h:46,
                 from application/rt-thread/can2eth/udpandtcp.c:9:
packages/third-party/lwip/src/include/lwip/ip4_addr.h:51:8: error: redefinition of 'struct ip4_addr'
   51 | struct ip4_addr {
      |        ^~~~~~~~
In file included from kernel/rt-thread/components/net/netdev/include/arpa/inet.h:14,
                 from kernel/rt-thread/components/net/sal/include/sal_socket.h:15,
                 from kernel/rt-thread/components/net/sal/include/socket/sys_socket/sys/socket.h:16,
                 from application/rt-thread/can2eth/udpandtcp.c:5:

感觉是自己写的这个udpandtcp.c文件的问题?

最近编辑记录 Gentlepig (2024-07-06 17:14:31)

离线

楼主 #1 2024-07-06 17:45:30

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,299
积分: 1259.5

Re: rtt,同时打开SAL组件和本地的lwip组件,就报ip4_addr重复定义。

updandtcp.c文件里的

9   // #include <lwip/netif.h>
  1 // #include <lwip/ip_addr.h> 

注释掉,然后该文件很多地方报错,干脆把该文件里的大部分函数里的内容注释掉,结果不报错了。

现在是打开SAL组件,打开了libmodbus库并使能了modbusrtu例程序。
结果运行后,还是显示发送后接收超时,现象和之前一样。
之前用示波器测试过串口的收发及使能管脚,都有波形。
当时是看libmodbus里用了select,所以可能是SAL组件没打开的原因...

离线

楼主 #2 2024-07-10 09:01:11

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,299
积分: 1259.5

Re: rtt,同时打开SAL组件和本地的lwip组件,就报ip4_addr重复定义。

最后发现遇到的问题是485芯片和单片机之间的电阻坏了,所以单片机没收到数据。
以为libmodbus必须打开SAL组件,现在发现其实如果只用rtu模式的话,不需要SAL组件,不过会默认打开POSIX组件。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn