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.

[参考译文] EK-TM4C1294XL:在 FreeRTOS 中触发 SoftwareUpdateInit()的问题–在没有魔术包的情况下触发 SoftwareUpdateRequestCallback ()

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1518321/ek-tm4c1294xl-issue-with-softwareupdateinit-in-freertos-softwareupdaterequestcallback-triggered-without-magic-packet

器件型号:EK-TM4C1294XL

工具/软件:

您好:

我指的是中所述的"以太网软件更新模块"SW-TM4C-UTILS-UG-2.1.4.178.pdf、该模块位于 C:\ti\TivaWare_C_Series-2.1.4.178\docs

在裸机应用中、通过使用引导加载程序和该SoftwareUpdateInit(callback_function)机制、以太网固件更新可正常运行。

但是、当我将相同的代码集成到基于 FreeRTOS 的应用中时、我会观察到一种意外的行为:SoftwareUpdateRequestCallback()即使 LM Flash Programmer 或任何主机未发送魔术包、该函数也会连续调用。

为了进行调试、我修改了 utils/swupdate.c以记录接收到的数据包:UARTCharPut (UART4_BASE、MPACKET_MARker);

尽管接收到的数据包不包含 MPACKET_MARker (0xAA)、但代码仍会进入相关if条件(包括 MAC 地址匹配条件)、就好像满足条件一样。

在裸机代码中使用相同的文件和逻辑时、不会观察到此行为。

在 RTOS 环境中、这些条件检查似乎以某种方式没有按预期运行、即使显然不满足它们的条件也是如此。

我的问题:

  1. FreeRTOS 是否会以导致该问题的方式影响内存、时序或中断处理?

  2. SoftwareUpdateInit()在基于 FreeRTOS 的固件中安全使用的建议方法是什么?

  3. EMAC/lwip 和 FreeRTOS 任务/调度程序之间是否存在任何已知的干扰、可能导致误报?

对于有关如何使用 FreeRTOS 应用正确实施以太网引导加载程序、或者如何调试此错误行为的根本原因的指导、我非常感谢。

谢谢!

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

    您好、

    Unknown 说:
    尽管收到的数据包不包含 MPACKET_MARKER (0xAA)、但代码仍然进入关联if条件—包括 MAC 地址匹配条件—就好像满足了标准一样。

    是否将代码添加到 SoftwareUpdateUdpreceive ()函数? 我认为是 SoftwareUpdateUdpreceive 检测并处理传入的魔术包。 我不知道为什么它会错误地检测远程固件更新的非魔术包。 哪种"if"语句未能检测到?

     我不太熟悉 FreeRTOS。 您需要检查的一点是矢量表是否由于 FreeRTOS 而更改。 如果向量表发生了变化、则需要确保相应地更新 vtable 寄存器。 裸机示例的矢量表从0x0开始。 但是、如果 FreeRTOS 应用将 矢量表重新分配到其他位置、则需要相应地匹配 vtable。

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

    您好、

     我没有从你那里听到。 我现在将关闭该线程。 如果您有任何更新、可以写入此帖子、状态将更改为"打开"。