Other Parts Discussed in Thread: MSP430FR2355
器件型号: MSP430FR2355
早上好、
在使用 Code Composer Studio 20.3.1.5 对 MSP430FR2355 上的固件应用进行调试时、我遇到了一种奇怪的行为。
这是代码(请注意,我将这些 asm 注释放置为标记,以便在汇编代码中轻松找到):
__asm(";------------- BEGIN list_for_each_entry_safe"); // marker
list_for_each_entry_safe(event, tmp, &gpt_internal.used_events_queue, head) { // <=== I have the issue here
__asm(";------------- END list_for_each_entry_safe"); // marker
// rest of the code...
}
list_for_each_entry_safe 与相同 Linux/list.h (v2.6.32)。
使用 TI v21.6.1.LTS 调试 list_for_each_entry_safe 主体时、我看到了奇怪的行为情况:
在第一次迭代时、事件变量包含无效数据、导致固件崩溃 (PC=0x0004)。
打捆针说:所有结构都已正确初始化。
使用 TI v16.9.4.LTS 时的相同代码可生成预期的结果。
经过一些调试后、我可能会找出问题的根源:正在评估 for 循环的增量部分 解决方案 每次执行循环体而不是之后执行。 这可以解释遇到的问题。
如果需要、我可以提供该特定模块生成的 asm 源文件(带有 TI16 和 TI21)。
以下是编译器标志:
-vmspx --use_hw_mpy=f5 --include_path=“${ccs_base_root}/msp430/include“--
include_path=“${CG_TOOL_ROOT}/include“ -advice:power=all --advice:hw_config=all -
-define=__MSP430FR2355 __--define=_FRWP_ENABLE --define=_INFO_FRWP_ENABLE -g --
printf_support=minimal --diag_warning=225 --diag_wrap=off --display_error_number --
silicon_errat=CPU21 -- silicon_errata=CPU22 -- silicon_errata=CPU40 --
gen_preprocessor_listing。
两个编译的优化标志相同、我只更改了工程设置中的编译器版本。
我错过了什么吗? 还是我出了问题?
提前感谢您。
此致、



