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.

[参考译文] MSP430G2553:在 ARM 上编译了 MSPBSL、并在 UartComm 上发现了错误

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/718130/msp430g2553-compiled-mspbsl-on-arm-and-found-bug-on-uartcomm

器件型号:MSPBSL
主题中讨论的其他器件:MSP430G2553

我已经为基于 MSP430G2553的项目实施了自定义 BSL 引导加载程序、并且 BSL 使用 UART 链路在 Windows PC 上完美地工作。 然后、我成功地在基于 Linux 的 ARM 器件(ODROID C2和 XU4)上编译了 BSL Scripter、并且失败率很低。

我已经跟踪了这个问题,发现在 UartComm:receiveBuffer()上使用的许多变量是异步更新的,但没有声明为 volatile。 在 x86 CPU 上、这很少是一个问题、因为它们没有许多用于优化的寄存器、并且所有数据的访问往往使用 RAM、但优化的 ARM 代码却不是这样。 因此、读取循环失败率很低。

由于我不知道所有升压内容的内在工作、因此我进行了表面分析来解决这个问题:我对 UartComm 变量 timerEventactSizeexpSize bytesReceived 的声明进行了一个挥发性的分析、现在它的工作是完美的。

也许人们应该进行深入分析并发布此源代码的更新、特别是关于易失性的使用、因为我发现在同步代码中不必要地使用它、而正如我已经说过的那样、在异步代码上丢失了它。

此致、

Mathias Gruber

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

    感谢您的详细博文。 根据我们的 MSPBSL 页面、BSL 脚本编写器确实支持 Linux、但我假设支持的是 x86架构、而不是 ARM 架构、尤其是考虑到您在 ARM 上观察到的问题。 从支持的角度来看、这对我来说很有意义、因为大多数开发人员可能会使用他们的 PC。 但是、某些用户(如您自己)可能会使用 Odroid 或 RPi。 我会将您的反馈传递给我们的软件开发团队、让他们了解此问题。 虽然我们很难在所有 ARM 器件上验证 BSL 脚本编写器、但我们确实有基于 ARM 的 Sitara 处理器可供使用。

    您在 Odroid 上运行了哪种类型的 Linux?

    此致、

    James

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

    尊敬的 James:

    在此、我很高兴您的消息、并愿意帮助您提高工具的质量。

    我已经在 Ubuntu Xenial (Odroid C2)和 Debian 9 (Odroid XU4)上测试了代码。

    我还发现、针对这个读取循环的超时设置有点紧(1000ms)、特别是对于一个批量擦除命令、此命令可能在响应准备就绪前超时。 更有问题的是、当它发生在响应数据包终止之前、通信脱离电源轨导致真正的灾难。

    此致、

    Mathias