外接板具有 TMS570LC4357、4MB 外部 SRAM、16MB SPI 闪存、8MB CFI 闪存
我正在尝试调试在 Ubuntu 18.04上开发的、由 gcc 编译的应用程序。
我计划在外部 SRAM 中执行应用程序。 CCS 显然无法将 ELF 文件下载到外部闪存/SRAM。
因此、我使用 objcopy 创建一个原始二进制文件、并使用引导加载程序/Y-modem 将其下载到外部 SRAM。
我使用引导加载程序使用二进制文件对外部 SPI 闪存进行编程、并将其加载到正确的位置。
在此期间、启用参数覆盖模块、并将前64KB 重定向到0x08050000处的内部 SRAM。
在引导加载程序主循环中(POM 仍然被启用),我使用 CCS 10.2和一个 J-Link 连接到电路板。
我加载应用程序符号并为引导加载程序添加 sy、s符号。
调试器显示"(未定义任何符号)"、但反汇编器似乎具有符号、但是
无源代码。
"连接"会导致复位吗?
是否有办法避免复位。 我想连接到正在运行的系统并将其停止。
如果我打开一个存储器窗口、闪存存储器的前64KB 似乎全部为零。
如果我在未连接任何探针的情况下应用手动复位、引导加载程序将启动并执行
通常情况下、0x00000000处的闪存是正确的、并非全部为零。
如果我在"Memory"窗口中查看0x08000000、则总内存会被清除。
如果 POM 被启用并且存储器被清除、那么它解释了前64KB 被清除的原因。
为什么 SRAM 是清晰的?
我的 GEL 文件中没有任何看起来可以清除 RAM 的内容。
它们几乎是默认值。
如果我在覆盖位置0x08050000修改存储器、然后在反汇编窗口中点击刷新
它仍然在0x00000000读取数据。 它不变。
如果我在0x08050000处打开反汇编窗口、那么更改内存窗口会影响反汇编窗口。
结论:POM 产生问题的理论似乎不能控制水。
我可以看到生成问题的另一个单元是 MPU
引导加载程序设置第一个 MPU 区域(0)以接受对所有闪存的访问
第二个 MPU 区域覆盖了闪存的前64KB、并且被设置为允许读取和执行、但块写入。
如果 CPU 被复位、那么所有 MPU 区域应该被禁用、对吧?
为什么调试器会在前64 KB 中读出零?