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.

[参考译文] MSP430FR2355:TI v21.6.1:循环行为很奇怪

Guru**** 2694555 points

Other Parts Discussed in Thread: MSP430FR2355

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1592146/msp430fr2355-ti-v21-6-1-strange-for-loop-behavior

器件型号: 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。


两个编译的优化标志相同、我只更改了工程设置中的编译器版本。


我错过了什么吗? 还是我出了问题?  

提前感谢您。
此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    我今天不在办公室。 我将在下一个星期一回复您。

    BR、

    Janz Bai

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Janz。 不用担心、提前感谢您。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Giacomo、

    如果将编译器优化级别设置为 0、这意味着编译器不会进行编译优化、那么会观察到什么结果? 不同的编译器版本是否会有不同的结果?  

    完成测试后、我可以将这篇文章发给我们负责编译器和 IDE 的其他团队、也许他们可以给您更多注释。

    顺便说一句,如果选择使用 v16.9.4,你的开发能继续正常吗?

    BR、

    Janz Bai

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Janz

    如果将编译器优化级别设置为 0、这意味着编译器不会进行编译优化、那么会观察到什么结果? 不同的编译器版本是否会有不同的结果?  [/报价]

    您是否打算将优化级别设置为“关闭“?

    顺便说一下、我将它设置为 0。 然后我使用两个编译器进行构建和测试

    使用 21.6.1 构建的版本给出了报告的问题。  

    PC=0x000004、SP=0x2FCC。
      

    16 没有任何问题。 我将使用这个。


    在您进行测试后、我可以将此帖子提供给我们负责编译器和 IDE 的其他团队、也许他们可以给您更多评论。

    太好了、谢谢。


    顺便说一下、如果选择使用 v16.9.4、您的开发能否继续正常?

    是的,它可以,它是我做的。 我想向 TI 团队报告遇到的问题。

    谢谢你

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的测试和报告,Giacomo 。 我会将此帖子转发给我们的另一个团队、也许他们可以就这个问题对编译器发表更多评论

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢你能抽出时间。 非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于包含问题循环的源文件、 请遵循 如何提交编译器测试用例一文中的说明

    谢谢。此致、

    -乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、George、感谢您联系我们。

    我将提交代码。 只是一个小提示: 我删除了 ASM 标签,###FOR### 而是放置了注释。

    编译器版本 21.6.1.LTS
    命令行标志 :  "C:/ti/ccs2031/ccs/tools/compiler/ti-cgt-msp430_21.6.1.LTS/bin/cl430" -vmspx --use_hw_mpy=F5 --include_path="C:/ti/ccs2031/ccs/ccs_base/msp430/include" --include_path="C:/ti/ccs2031/ccs/tools/compiler/ti-cgt-msp430_21.6.1.LTS/include" --include_path="D:/Sources/MCU/OculusRackSystemTester" --include_path="D:/Sources/MCU/OculusRackSystemTester/inc" --include_path="D:/Sources/MCU/OculusRackSystemTester/modbus_api_glue" --include_path="D:/Sources/MCU/OculusRackSystemTester/modbus/include" --advice:power=all --advice:hw_config=all --define=__MSP430FR2355__ --define=_FRWP_ENABLE --define=_INFO_FRWP_ENABLE -g --printf_support=minimal --preproc_with_comment --preproc_with_compile --diag_warning=225 --diag_wrap=off --display_error_number --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU40 --src_interlist --gen_preprocessor_listing --obj_directory="src" "../src/general_purpose_timer.c"


    e2e.ti.com/.../general_5F00_purpose_5F00_timer.pp.txt


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    乔治目前不在。 因此、我已提请其他编译器专家注意这一主题、以寻求进一步的帮助。

    谢谢

    Ki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ki、非常感谢。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Giacomo、感谢您提供测试用例。  在您之前使用 v21.6.1 的测试中、似乎从未启用过优化。  您是否可以尝试优化级别 1 或更高并查看运行时问题是否仍然存在? 优化级别将影响循环的结构、但我想验证它是否是测试用例的有效权变措施。

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我还提交了 https://sir.ext.ti.com/jira/browse/EXT_EP-13061 以跟踪此问题、欢迎您关注此问题。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Alan、感谢您的回复!

    刚尝试过优化级别 1 和 2:

      

    但我仍然遇到 运行时问题错误... 您可以看到 PC 为 0x04。

    正如我对 Janz Bai 所说、 我将使用 TI 16。

    再次感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、谢谢。 我肯定会遵循它。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Giacomo,

    只是为了确认、您是否曾经运行过--opt_level=off 并重现此问题?

    对于 cl430、如果未显式设置该选项、则默认-opt_level 为 0。

    此外、正如您所指出的、--opt_level=0 仍然启用优化器。 只有使用--opt_level=off 将避免使用优化器。  

    谢谢
    GREG

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Greg 您好:

    是的、我也运行了 --opt_level=off、问题仍然存在。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢我也确认了同样的问题,并确定了这个问题。 它涉及对 for 循环的 GNU 语句表达式的解析器处理。 遗憾的是、唯一的解决方法是避免在 for 循环中使用语句表达式。 我们将在 26 年第 1 季度初的下一个补丁版本中修复此问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Greg:  
    感谢您和所有 TI 团队的投入和支持。
    非常感谢。 很棒的工作!
    祝你度过美好的一天!