主题中讨论的其他器件:LAUNCHXL2-RM57L、 LAUNCHXL2-570LC43、 HALCOGEN
工具/软件:Code Composer Studio
尊敬的专家:
我尝试调试 在 LAUNCHXL2-RM57L 套件上运行的代码。 但我无法在 CCS 7.1调试窗口中获取"temp"全局变量的值。
我还看到我们论坛上描述相同问题的主题:
但我看到这个问题还没有解决。 是否有人可以帮助我解决或解决此问题?
非常感谢。
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.
工具/软件:Code Composer Studio
尊敬的专家:
我尝试调试 在 LAUNCHXL2-RM57L 套件上运行的代码。 但我无法在 CCS 7.1调试窗口中获取"temp"全局变量的值。
我还看到我们论坛上描述相同问题的主题:
但我看到这个问题还没有解决。 是否有人可以帮助我解决或解决此问题?
非常感谢。
尊敬的 Chuck 先生:
我已经制作了 test.gel 文件并添加到 CCS 7.1中。 但我得到以下错误:
CortexR5:GEL:加载文件时遇到问题:Blinky.out 无法打开文件
LoadSymbolsForDAP()无法计算。
加载文件 Blinky.out 时遇到问题
无法打开文件
在 GEL_SymbolLoad ("blinky.out")[test.gel:2]
在 LoadSymbolsForDAP()上
test.gel 文件包含以下代码:
MenuItem "DAP_Access";
Hotmenu LoadSymbolsForDAP(){GEL_SymbolLoad("blinky.out");
}
您能向我展示一下将.gel 文件添加到 CCS7.1的进度吗?
非常感谢。
[引用 user="hung ">我尝试调试 在 LAUNCHXL2-RM57Lkit 上运行的代码。 但我无法在 CCS 7.1调试窗口中获取"temp"全局变量的值。使用 CCS 7.2.0.00012时发现、当使用 LAUNCHXL2-570LC43时、CCS 调试器可以在程序运行时从器件读取。 例如、当程序正在运行时、表达式视图可以持续刷新 正在运行的程序正在更新的 GioB_dout GPIO 外设寄存器的值。
但是、当正在运行的程序在 SRAM 存储器区域上启用缓存并进行回写操作时、运行程序更新的全局变量的值在程序运行时未正确显示、 在中、表达式视图在程序运行时将值显示为零。 当程序被暂停时、全局变量被正确显示。
这是因为当程序正在运行时、DAP 被用来执行读取、而当程序被暂停时、CPU 被用来执行读取。 从 CPU 读取可以从高速缓存获取数据、从 DAP 读取只能访问内存。 因此、如果 CPU 正在更新高速缓存中的变量、DAP 将无法在程序运行时看到更新的值。
可能的选项包括:
1) 1)更新程序运行时需要观察的变量后、执行缓存清理操作、以将更新后的值写入内存。
2) 2)放置程序在缓存禁用存储器中运行时需要观察/更改的变量。
3) 3)更改 SRAM 存储器区域的 MPU 设置、以将缓存配置为通过写而不是回写。
4) 4)禁用高速缓存。
选项1)对正在运行的程序的性能影响最小。 例如 、在 LAUNCHXL2-570LC43上运行的程序中具有以下全局变量、其中 HALCoGen 已配置为启用缓存:
unsigned int num_interrupts;
初始程序只是在中断例程中递增 num_interrupts 变量:
void rtiNotification (rtibase_t * rtiREG、uint32通知) { //在用户代码开始和用户代码结束之间输入用户代码。 * gioToggleBit (gioPORTB、6); gioToggleBit (gioPORTB、7); num_interrupts++; }
在程序运行时使用上述代码、CortexR5的 CCS 调试器表达式视图报告 num_interrupts 的值为零、因为仅在 CPU 缓存中更新。
然后、中断例程被修改为执行缓存清理、以便在每次更新后将 num_interrupts 变量写回存储器:
void rtiNotification (rtibase_t * rtiREG、uint32通知) { //在用户代码开始和用户代码结束之间输入用户代码。 * gioToggleBit (gioPORTB、6); gioToggleBit (gioPORTB、7); num_interrupts++; /*在包含 num_interrupts 的高速缓存行上执行"通过 MVA 到 PoC"清理数据高速缓存行 *将修改后的高速缓存行写回内存的变量。 这允许更改 num_interrupts 变量 由于 DAP 仅访问存储器、因此在程序继续运行时由 DAP 监控 *并且没有硬件高速缓存一致性。 * *由于 num_interrupts 是一个32位整数、因此它不会占用一个32字节 Cortex-R5高速缓存行、 *因此一个操作就足够了。 * _mcr (15、0、(无符号整型)&num_interrupts、7、10、 1); }
在进行上述修改的情况下、当程序运行 针对 CortexR5的 CCS 调试器表达式视图时、显示了对 num_interrupts 变量的更新。
从 HALCoGen 04.06.00开始、似乎没有任何函数可执行缓存管理操作、因此使用 TI ARM _MCR 编译器内在函数来访问协处理器寄存器以执行 ARM Cortex-R5缓存操作
随附了示例 CCS 工程
e2e.ti.com/.../1738.TMS570LC4357_5F00_rtiblinky.zip
编辑:澄清了对 SRAM 存储器区域的缓存集进行了写回测试。