This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TM4C1294NCPDT:将 DHCP 与 BOOTP 一起启用时出现问题

Guru**** 2188815 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/850782/ccs-tm4c1294ncpdt-problem-enabling-dhcp-together-with-bootp

器件型号:TM4C1294NCPDT

工具/软件: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"初始化程序来更改这些端口是否有任何方法?

或者、如果我的怀疑是错误的、是否有人可以看到此问题的其他原因?

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    从上面的屏幕捕获中、我可以看到代码有一个不精确的数据总线错误。 请参阅本文档的第3.3节、进一步了解如何调试该故障:

    http://www.ti.com/lit/an/spma043/spma043.pdf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我执行了该过程并获得了图像中显示的结果。

    除此之外、我还可以执行任何程序吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果您提到图4a 中显示了哪个文件和哪个函数、那将会有所帮助。 从注释中可以看到一个内存分配问题。 您是否尝试增加堆和堆栈大小?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Bob Crosby">]如果您提到图4a 所示的文件和函数、那将会有所帮助。[/quot]我认为 TivaWare_C_Series-2.1.4.178/third_party/lwip-1.4.1/src="/core/mem.c  中的 mem_malloc 函数是从 TivaWare 屏幕中搜索与安装代码匹配的函数的函数。

    不确定问题是在 lwip 中、还是在覆盖堆的程序中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    正如我在第一个帖子中所说的,它是 mem_malloc()函数。  

    我只需将 MEM_SIZE 的值从(64 * 1024)更改为(128 * 1024)即可找到解决方案。  感谢他们的评论,他们对解决问题非常有帮助!!