主题中讨论的其他器件:MSP430G2553、
我已经为基于 MSP430G2553的项目实施了自定义 BSL 引导加载程序、并且 BSL 使用 UART 链路在 Windows PC 上完美地工作。 然后、我成功地在基于 Linux 的 ARM 器件(ODROID C2和 XU4)上编译了 BSL Scripter、并且失败率很低。
我已经跟踪了这个问题,发现在 UartComm:receiveBuffer()上使用的许多变量是异步更新的,但没有声明为 volatile。 在 x86 CPU 上、这很少是一个问题、因为它们没有许多用于优化的寄存器、并且所有数据的访问往往使用 RAM、但优化的 ARM 代码却不是这样。 因此、读取循环失败率很低。
由于我不知道所有升压内容的内在工作、因此我进行了表面分析来解决这个问题:我对 UartComm 变量 timerEvent、actSize、expSize 和 bytesReceived 的声明进行了一个挥发性的分析、现在它的工作是完美的。
也许人们应该进行深入分析并发布此源代码的更新、特别是关于易失性的使用、因为我发现在同步代码中不必要地使用它、而正如我已经说过的那样、在异步代码上丢失了它。
此致、
Mathias Gruber