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.
您好!
我正在使用 eZdsp F28335、并且在 RAM 中有一个工作正常的应用、我正尝试从闪存运行。 我相信我已经接近实现这一目标了、但是当我对 DSP 进行下电上电时、代码似乎没有运行。 启动时、我有一些 CAN 消息从 DSP 发送到笔记本电脑、并且在我重启加载闪存的项目后、这些消息不会发送。
我已经完成了三件事情来尝试将项目从 RAM 转换为闪存。
1.将 SW1引导开关更改为0000 =跳转至闪存
2.在主函数中添加了以下命令:
memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(uint32)&RamfuncsLoadSize);
InitFlash();
3.已使用闪存示例中使用的常用 F28335.cmd 文件。
所有闪存扇区都被擦除/报告、代码在调试后正常运行。 但是、当我对器件执行下电上电时、我看不到从 DSP 发送到计算机的 CAN 消息、并且程序似乎没有运行。 我是否遗漏了什么?
有两点需要考虑。 这种情况下最常见的是一个变量、您的代码需要将其初始化为0、但不会初始化为0。 调试器将在 RAM 中为您执行此操作、但当您从闪存独立运行时、未由代码显式初始化的变量可能具有任何值、因为 RAM 在复位时(在此器件上)未初始化。 首先检查未初始化的变量以及代码如何使用它们。
另一件事是看门狗计时器超时。 本应用报告的第7节对此进行了详细介绍:
http://www.ti.com/lit/an/spra958l/spra958l.pdf
您能看一下这两件事并告诉我们吗?
此致、
Richard
尊敬的 Jeff:
在 Richard 的答复中、还请检查您的项目中是否有文件"D" 2833x_CodeStartBranch.asm'。 这是您的应用正确跳转到闪存所必需的、并在应用报告 Richard Linked 中提到。
位于 c2000ware 中的文件:C:\ti\c2000\C2000Ware_2_00_00_03\device_support\F2833x\con\source
有关此汇编例程的功能的更多信息、请参阅以下内容:
https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/396203
最棒的
Kevin
Kevin、Richard、您好!
感谢你的帮助。 我想说、我可以根据以下实验排除看门狗超时的问题、并忽略 codestart asm 文件(我确实包含了这个文件)。 我在主程序中添加了以大约1Hz 的频率对 LED 进行切换、当我对 DSP 进行下电上电时、我看到指示灯仍然闪烁。 因此、我认为闪存配置正确。
但问题可能是我有未初始化的变量。 我现在将对此进行研究。 只需注意、我知道主代码中的1秒延迟(我有一个无限循环使 LED 闪烁;中断处理 CAN 消息)可能会影响 CAN、因此我将在查找未初始化值时将其取出。 请告诉我这是否是正确的方法。
我认为,这就是我无论如何要做的事情。 在执行程序时请记住、从闪存运行的代码将比从 RAM 运行的代码慢。 如果您有任何与时序密切相关的内容、例如软件延迟等、则应在运行前将其加载到 RAM 中。 前面提到的应用报告的第4节讨论了该主题。
此致、
Richard
尊敬的 Jeff:
您最终是否有此问题的更新? 您是否能够解决该问题、或者您是否需要我们提供更多支持? 如果解决、我将继续并关闭该线程。
谢谢、
Kevin