工具/软件:Code Composer Studio
你(们)好
我有一个稍微复杂的问题...
我的项目能够完美地在静态 IP 和动态 IP 之间切换。
lwIPNetworkConfigChange (0、0、0、IPADDR_USE_DHCP);
或
lwIPNetworkConfigChange (DEF_IP、DEF_Mask、DEF_Gateway、IPADDR_USE_STATIC);
然后、我在代码中实现了一个例程、用于通过以太网端口进行固件更新。
while (1) { //... if (g_BFirmwareUpdate = 0x72) { ROM_GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、GPIO_PIN_1); SoftwareUpdateBegin (g_ui32SysClock); } }
但是、在这之后、我注意到每次我尝试从静态 IP 更改为动态 IP 时、我的代码都会进入 FaultISR。
调试代码时、我注意到它无法访问位于"mem.c"中77行之前的函数"mem_malloc()"。
主要问题是:为什么在启用以太网固件升级之前它运行良好? 发生了什么变化、从而使代码在这之后崩溃?
请记住,如果我有静态 IP,则固件更新工作正常...
我没有找到解决此问题的方法,但我认为它可能与 DHCP 和 BOOTP 使用的端口68有关。
查看"boot_emac_flash"示例、可以更改升级期间在文件"bl_emac.c"中使用的端口
// // // BOOTP 协议使用的 UDP 端口。 //// ***************** #define BOOTP_SERVER_PORT 67 #define BOOTP_CLIENT_PORT 68 //************* // // TFTP 服务器的 UDP 端口。 //// ***************** #define TFTP_PORT 69
我真的不确定这是否是真正的问题... 但是、在我的项目中、没有使用"boot_emac_flash"初始化程序来更改这些端口是否有任何方法?
或者、如果我的怀疑是错误的、是否有人可以看到此问题的其他原因?
谢谢!