在线时间285 小时
UID3419421
注册时间2017-8-30
NXP金币0
该用户从未签到
高级会员
- 积分
- 750
- 最后登录
- 2021-1-25
|
参考例程:SDK_2.2_LPC54608J512\boards\lpcxpresso54608\demo_apps\lwip\lwip_udpecho开发板:OM13092
这个例子里PC端IP地址跟MCU端IP地址都是先宏定义好了,初始化的时候写进去的。
/* MCU端IP地址. */
#define configIP_ADDR0 192
#define configIP_ADDR1 168
#define configIP_ADDR2 0
#define configIP_ADDR3 102
/* PC端IP地址 */
#define configGW_ADDR0 192
#define configGW_ADDR1 168
#define configGW_ADDR2 0
#define configGW_ADDR3 100
初始化函数里执行了以下两句话,将两个IP加入到netif
IP4_ADDR(&fsl_netif0_ipaddr, configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3);
IP4_ADDR(&fsl_netif0_gw, configGW_ADDR0, configGW_ADDR1, configGW_ADDR2, configGW_ADDR3);
这个实验就必须要修改我PC的IP地址为192.168.0.100,同时MCU这边的IP地址也是固定的192.168.0.102
请问,如果我不想修改PC的IP地址,测试时PC先通过网络助手发一个消息或者数据到开发板,开发板收到消息就会获取PC的IP地址,然后绑定该IP
static void udpecho_raw_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p,
const ip_addr_t *addr, u16_t port)
{
LWIP_UNUSED_ARG(arg);
if (p != NULL)
{
//获取PC端IP
uint8_t iptab[4];
iptab[0] = (uint8_t)((uint32_t)(addr->addr) >> 24);
iptab[1] = (uint8_t)((uint32_t)(addr->addr) >> 16);
iptab[2] = (uint8_t)((uint32_t)(addr->addr) >> 8);
iptab[3] = (uint8_t)((uint32_t)(addr->addr));
udp_sendto(upcb, p, addr, port);
/* free the pbuf */
pbuf_free(p);
}
}
同时,MCU的IP地址也不想固定死,也想后期通过上位机进行修改。
我的疑问是:我也试过在初始化时不执行以下函数,也就是不初始化PC端的IP地址,等PC发完数据获取到IP地址后再执行,但是这样网络就无法连通,数据发不下来,无法获取IP,请问该如何做?
IP4_ADDR(&fsl_netif0_gw, configGW_ADDR0, configGW_ADDR1, configGW_ADDR2, configGW_ADDR3);
最佳答案
首先,你说的目的,完全都是可行的,需要使用到DHCP协议,才可以实现动态IP地址分配的功能,否则,只能提前设定好,关于DHCP协议,请自行百度或谷歌一下 ...
|
|