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.

[参考译文] 在某些情况下、代码无法从闪存运行? 280049上的 c_int00问题

Guru**** 2538950 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/600819/the-code-could-not-run-from-the-flash-under-some-conditions-a-c_int00-problem-on-the-280049

最近、我的客户在调试280049时遇到问题、发现当他们在软件中添加一个变量定义、例如"int16 test"时、MCU 工作异常。 当它们使用"int16 test = 0;"时、CPU 工作正常。

我们今天进行了详细测试、发现当 CPU 工作异常时、代码无法 在主函数中运行! 修改 code-start.asm 中的代码时:更改代码:

code_start:
   如果 WD_DISABLE = 1
       LB WD_DISABLE      ;分支到看门狗禁用代码
   其他
       LB _c_int00        ;分支到 RTS 库中启动。_asm
   .endif

更改为

code_start:
   如果 WD_DISABLE = 1
       LB WD_DISABLE      ;分支到看门狗禁用代码
   其他
       LB 主        域;分支到启动。_asm 在 RTS 库中
   .endif

CPU 工作正常!  为什么!

问题可能会在 TI 280049演示中重现。

附件是 用于正常和异常项目的.out 和.map 文件。它们使用与所附相同的 cmd 文件。

对于普通文件、当运行演示时、我们可以在 加电演示后测量周期 GPIO 齿(GPIO 59)。 对于异常文件 、可能不会测量切换。  

是否有人遇到过类似的问题?

或者如何找到此问题的根源?

e2e.ti.com/.../280049cmd_5F00_file.zip

e2e.ti.com/.../map-and-out-file.zip

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

    这可能是与您的持续问题相关的原因: e2e.ti.com/.../598734
    解决后、我想这也会出现。

    此致
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Chris,ñ o
    感谢您的回复。 我更新并编辑我的问题,您能帮您解决吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Chris,
    此问题可能不是我的监测问题。您能帮助回答吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您在代码启动 asm 文件中有.ref _c_int00?
    对于工程编译链接器设置、是否将入口点设置为"code_start"?
    由于某种原因、我看不到 boot28.obj 被拉入 rts2800_fpu32.lib。 这就是_c_int00所在的位置。

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

    您在代码启动 asm 文件中有.ref _c_int00?

    是,客户使用与我们 C2000器件中文件相同的 asm 文件。

    对于工程编译链接器设置、是否将入口点设置为"code_start"?

    CCS?上的这些设置是否未找到,您能告诉我吗?

    由于某种原因、我看不到 boot28.obj 被拉入 rts2800_fpu32.lib。 这就是_c_int00所在的位置。

    您是说我们应该在 项目中添加 rts2800_fpu32.lib?

     

     

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

    Shuai、

    很抱歉耽误你的回答。 Chris 正在度假。

    关于 Chris 提到的工程编译链接器设置:在 CCS 中右键点击工程->显示编译设置->编译-> C2000链接器->高级选项->符号管理->输出模块的特定程序入口点(--entry_point、-e)。 您应该在此处提到 code_start。 请检查。

    关于 rts2800_fpu32.lib:是的、如果尚未包含运行时支持库、则应包含该库。

    谢谢、此致、
    Vamsi

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

    客户应始终使用_c_int00分支、如下所示。 不应直接分支到 main(),因为全局变量是由 RTS 支持库函数作为_c_int00的一部分通过 C 启动代码初始化的,因此这些变量已准备好用于 main()。

    此外、用户应始终将全局变量初始化为已知值、如"0"。 与全局变量一起使用的代码不应假定全局变量是初始化为0的。



    code_start:
    如果 WD_DISABLE = 1
    LB wd_disable ;分支到看门狗禁用代码
    其他
    LB _c_int00 ;分支到 RTS 库中启动。_asm
    .endif


    另请参阅如果您打开下面的 ALIGN (4)、是否有用、不确定为什么会将其注释掉? 在工作的映射文件和不工作的映射文件之间,我看到与 command.obj 的数据大小的唯一区别。 检查 command.obj 文件是否存在代码异常。

    .cinit :> CINIT_FLASH、PAGE = 0//、ALIGN (4)
    .pinit :> init_flash,page = 0//,align (4)
    切换 :> init_flash,page = 0//,align (4)


    希望这对您有所帮助。

    此致
    Santosh Athuru
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Santosh、
    感谢您的帮助、我们尝试了演示、打开 ALIGN (4)、但问题仍然存在。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    供其他人参考:

    此问题已脱机调试并已关闭。

    有关此帖子的其他人的详细信息:
    客户应用程序中的.cinit 段很大。 RTS 库在到达 main 之前初始化所有这些全局变量/静态变量。 这会导致看门狗在被处理之前过期。 建议客户在 code_start.asm 中分支到_c_int00之前禁用看门狗、并在到达 main 后启用看门狗。

    由于 GEL 文件禁用了看门狗、客户的应用在调试器连接的情况下工作。

    此外、我们修改了客户的链接器命令文件、以将某些段映射到闪存进行加载、并将 RAM 映射到执行。

    谢谢、此致、
    Vamsi