通过TCP数据修改ENC28j60的IP地址出问题了

2020-02-05 09:03发布

本帖最后由 onbluesun 于 2012-5-27 12:54 编辑

ENC28j60的驱动程序uipopt.h中,UIP_IPADDR0、UIP_IPADDR1、UIP_IPADDR2和UIP_IPADDR3是存储IP地址的,如下代码:
  1. #define UIP_IPADDR0     192 /**< The first octet of the IP address of
  2.                                this uIP node, if UIP_FIXEDADDR is
  3.                                1. hideinitializer */
  4. #define UIP_IPADDR1     168 /**< The second octet of the IP address of
  5.                                this uIP node, if UIP_FIXEDADDR is
  6.                                1. hideinitializer */
  7. #define UIP_IPADDR2     1   /**< The third octet of the IP address of
  8.                                this uIP node, if UIP_FIXEDADDR is
  9.                                1. hideinitializer */
  10. #define UIP_IPADDR3     13   /**< The fourth octet of the IP address of
  11.                                this uIP node, if UIP_FIXEDADDR is
  12.                                1. hideinitializer */
复制代码我现在要通过TCP将要修改的IP发送给单片机,然后单片机将IP存在EEPROM中,再自动重启,就可以修改IP了。所以#define UIP_IPADDR0后面的数值肯定要变,要用变量,但是如果用变量的话,uip.c中的uip_hostaddr[]数组就出错了,因为UIP_IPADDR0是uip_hostaddr[]数组的元素之一,而数组元素是不能用变量的,如下代码:
  1. const u16_t uip_hostaddr[2] =
  2.   {HTONS((UIP_IPADDR0 << 8) | UIP_IPADDR1),
  3.    HTONS((UIP_IPADDR2 << 8) | UIP_IPADDR3)};
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。