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.

[参考译文] CCS/TMS320F2.8379万D:加载到RAM,而闪存将在主条目处使用ESTOP0覆盖指令

Guru**** 2604655 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/628691/ccs-tms320f28379d-loading-to-ram-instead-flash-overwrites-instruction-with-estop0-at-main-entry

部件号:TMS320F2.8379万D
主题:controlSUITE中讨论的其他部件

工具/软件:Code Composer Studio

您好,

当我将我的代码加载到RAM而不是闪存时,main条目中的第一个指令将被ESTOP0替换。 被覆盖的指令移动了stackpointer。 由于RAM执行中缺少此项,所以栈指针会移动,堆栈会下移并覆盖其他代码。 最终应用程序崩溃。

调试时,MCU也会在主条目处停止两次。

装入RAM时拆卸:

       主要():
1.4405万:  7625       ESTOP0       
40       volatile boole_T runModel =1;
1.4406万:  56BF0141   MOVB        *-SP[1],#0x01,UNC
41       float modelBaseRate = 0.2 ;
1.4408万:  2844CCCD   MOV         *-SP[4],#0xcccd
0.144万a:  2.8433万E4C   MOV         *-SP[3],#0x3e4c
42       浮点系统时钟=200;
0.144万c:  E8021A40   MOVIZ       R0,#0x4348
0.144万e:  E203.0046万   MOV32       *-SP[6],R0H
43       c2000_flash_init();

装入闪存时拆卸:

       主要():
0816eb:  FE06       ADDB        SP,#6
40       volatile boole_T runModel =1;
0816ec:  56BF0141   MOVB        *-SP[1],#0x01,UNC
41       float modelBaseRate = 0.2 ;
0816ee:  2844CCCD   MOV         *-SP[4],#0xcccd
0816f0:  2.8433万E4C   MOV         *-SP[3],#0x3e4c
42       浮点系统时钟=200;
0816f2:  E8021A40   MOVIZ       R0,#0x4348
0816f4:  E203.0046万   MOV32       *-SP[6],R0H
43       c2000_flash_init();

代码是使用Simulink和嵌入式编码器生成的。 CCS版本是6.2。

据我所见,构建过程中的唯一区别是--define=boot_fby_flash=0/1。

原因可能是什么?

此致,

Thomas。

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

    Thomas

    Estop是一个软件断点。  CCS被配置为在加载程序后运行到main()。  在加载到RAM时,CCS将为此使用软件断点。  当您在遇到断点后点击RUN时,CCS将在运行前将原始操作码放回原位。  这不应导致您看到的行为。  从Flash运行时,无法使用软件断点,因此CCS正在使用硬件断点资源。

    如果要确认是否是这导致了您所看到的问题,可以禁用run to main()。

    在启动调试会话之前,转到项目的属性,然后从要运行的符号所在的框中清除main,或者取消选中该框以在加载并重新启动时运行。

    此致,

    John

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

    您好,John:

    感谢您的帮助!

    我尝试了您建议的选项,但行为几乎相同。

    当开始调试时,它不会在main停止,而是在c_int00()停止(如预期)。 主条目上的ESTOP0仍在原位。 调试器也在该处停止,但现在 仅停止一次(在同一位置停止两次之前,两次都在“调试”选项卡中显示为SW断点的位置停止)。

    SW-Breakpoint是否设置了两次,而一个从未被真实代码替换?

    我还检查了生成的.asm文件。 主条目处有正确的代码。

    还有一件事:只有Simulink生成的项目才会发生这种情况。 当我加载示例时,一切正常。

    此致,

    Thomas。

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

    是的,它似乎是设置该软件断点的另一个因素。 我对西穆林克不太熟悉。 我不知道它是否为您提供了这样的选择。

    如果您查看CCS中的断点视图,它是否在其中显示断点? 如果插入的不是CCS,则CCS稍后将不会在相应的操作码中交换(而且它不知道它是什么)。 我将检查是否有方法显示CCS设置的系统断点。

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

    您好,John:

    我检查了断点视图,它是空的。 此处既不显示ESTOP0断点,也不显示主条目处的断点。

    Simulink的嵌入式编码器只创建代码文件和CCS项目。 则不再存在连接。 因此 ,调试只能在CCS中完成。 但所有的选项和设置都是由Simulink完成的。 所以我猜是出了什么问题。

    我也检查了CCSv7,结果是一样的。

    此致,

    Thomas。

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

    您好,

    请更新您看到此问题的MATLAB版本。例如:2017a??

    此致,

    Venkatesh C

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

    您好,Venkatesh,

    我的版本是:

    MATLAB:2017a

    用于TI C2000的嵌入式编码器支持包:17.1 .................................................................3.

    CCS:6.2 .0.0.005万

    此致,

    Thomas。

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

    I已检查断点视图,但该视图为空。 此处看不到ESTOP0断点或主条目处的断点。[/QUET]我认为断点视图会过滤掉一些可以由CCS自动设置的断点。

    因此,建议您打开 脚本控制台 并键入:

    js:> eval("debug_DumpBreakpoints()")

    并将出现在控制台视图中的输出剪切并粘贴到此线程。

    这应报告所有断点以及设置断点的内容。

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

    您好,Chester,

    我按照你们的指示,结果就在这里。 为了进行比较,我还尝试了使用linky_demo (工作正常) ,没有运行到主选项(见上文)。 老实说,我看不出来有什么不同。 我希望您能看到更多信息。

    我的项目,从跑步到主

    C28xx_CPU1:断点管理器转储:分配的逻辑断点总数:17
    C28xx_CPU1:断点管理器转储:分配的软件物理断点总数:21
    C28xx_CPU1:断点管理器转储:分配的传统硬件物理断点总数:0
    C28xx_CPU1:断点管理器转储:分配的硬件物理断点总数为55:0
    C28xx_CPU1:断点管理器转储:分配的线程物理断点总数:0
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储:已启用:0
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储:已禁用:4
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"c$exit"(0xa7c9)
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:终止程序执行
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"C$EXITE"
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:终止程序执行
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"c$io$"
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:流程CIO
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"C$IOE$$"
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:流程CIO
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点

    我的项目;没有运行到主页

    C28xx_CPU1:断点管理器转储:分配的逻辑断点总数:17
    C28xx_CPU1:断点管理器转储:分配的软件物理断点总数:21
    C28xx_CPU1:断点管理器转储:分配的传统硬件物理断点总数:0
    C28xx_CPU1:断点管理器转储:分配的硬件物理断点总数为55:0
    C28xx_CPU1:断点管理器转储:分配的线程物理断点总数:0
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储:已启用:0
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储:已禁用:4
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"c$io$"
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:流程CIO
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"C$IOE$$"
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:流程CIO
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"c$exit"(0xa7c9)
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:终止程序执行
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"C$EXITE"
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:终止程序执行
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点

    Blinky_demo;运行到主菜单

    C28xx_CPU1:断点管理器转储:分配的逻辑断点总数:16
    C28xx_CPU1:断点管理器转储:分配的软件物理断点总数:20
    C28xx_CPU1:断点管理器转储:分配的传统硬件物理断点总数:0
    C28xx_CPU1:断点管理器转储:分配的硬件物理断点总数为55:0
    C28xx_CPU1:断点管理器转储:分配的线程物理断点总数:0
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储:已启用:0
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储:已禁用:4
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"C$EXITE"
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:终止程序执行
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"C$IOE$$"
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:流程CIO
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"c$io$"
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:流程CIO
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"c$exit"(0xb5fb)
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:终止程序执行
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点

    Blinky_demo;不运行到主菜单

    C28xx_CPU1:断点管理器转储:分配的逻辑断点总数:16
    C28xx_CPU1:断点管理器转储:分配的软件物理断点总数:20
    C28xx_CPU1:断点管理器转储:分配的传统硬件物理断点总数:0
    C28xx_CPU1:断点管理器转储:分配的硬件物理断点总数为55:0
    C28xx_CPU1:断点管理器转储:分配的线程物理断点总数:0
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储:已启用:0
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储:已禁用:4
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"c$io$"
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:流程CIO
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"C$IOE$$"
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:流程CIO
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"c$exit"(0xb5fb)
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:终止程序执行
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点
    C28xx_CPU1:断点管理器转储:
    C28xx_CPU1:断点管理器转储: 硬件配置
    C28xx_CPU1:断点管理器转储:  位置:"C$EXITE"
    C28xx_CPU1:断点管理器转储: 调试器响应
    C28xx_CPU1:断点管理器转储:  条件:
    C28xx_CPU1:断点管理器转储:  跳过计数:0
    C28xx_CPU1:断点管理器转储:   当前计数:0
    C28xx_CPU1:断点管理器转储:  操作:终止程序执行
    C28xx_CPU1:断点管理器转储: 杂项
    C28xx_CPU1:断点管理器转储:  组:默认组
    C28xx_CPU1:断点管理器转储:  名称:
    C28xx_CPU1:断点管理器转储: 系统设置的断点

    此致,

    Thomas。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    已设置退出标签和CIO断点,但我看不到其他断点。 我怀疑Simulink正在嵌入estop。 拆分是否显示在CCS拆分视图或编译器生成的列表文件的第一篇文章中?

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

    您好,John:

    调试时,从CCS拆卸视图复制了第一个帖子中的列表。 编译器生成的.asm文件在此没有ESTOP0,而是正常的指令。

    就在此刻,我可以用controlSUITE中的盲样例再现这种行为。 我唯一改变的是我将.text部分移到了GS8RAM,因为它是通过生成的代码/项目完成的。

    使用原始链接程序命令文件:

           主要():
    00b5cb:  7640.8万   LCR         InitSysCtrl
     40        EINT;
    00b5cd:  2910       CLRC        INTM
     46        伊尼特·格皮奥();
    00b5ce:  FF69       SPM         #0
    00b5CF:  7640.014万   LCR         InitGpio
     47        GPIO_SetupPinMux (Blinky_LED_GPIO,GPIO _MUX_CPU1,0);
    00b5d1:  9A1F       MOVB        AL,#0x1f
    00b5d2:  D400       MOVB        XAR4,#0x0
    00b5d3:  9B00       MOVB        AH,#0x0
    00b5d4:  7640.018万   LCR         GPIO_SetupPinMux


    GS8RAM中的.text:

           主要():
    014ba0:  7625       ESTOP0       
    014ba1:  4585       TBIT        * XAR5++,#0x5
     40        EINT;
    014ba2:  2910       CLRC        INTM
     46        伊尼特·格皮奥();
    014ba3:  FF69       SPM         #0
    014ba4:  76.4148万C0   LCR         InitGpio
     47        GPIO_SetupPinMux (Blinky_LED_GPIO,GPIO _MUX_CPU1,0);
    014ba6:  9A1F       MOVB        AL,#0x1f
    014ba7:  D400       MOVB        XAR4,#0x0
    014ba8:  9B00       MOVB        AH,#0x0
    014ba9:  7641.49万   LCR         GPIO设置PinMux

    我修改的链接程序命令文件(更改粗体):

    内存

    第0页:
      /* BEGIN用于“引导至SARAM”引导加载程序模式  */

      BEGIN           :Origin = 0x0万,length = 0x0.0002万
      RAMM0           :原点= 0x0.0122万,长度= 0x0002DE
      RAMD0           :原点= 0x00B000,长度= 0x0.08万
      RAMLS0          :原点= 0x0.8万,长度= 0x0.08万
      RAMLS1          :原点= 0x0.88万,长度= 0x0.08万
      RAMLS2       :原点= 0x0.9万,长度= 0x0.08万
      RAMLS3       :原点= 0x0.98万,长度= 0x0.08万
      RAMLS4       :原点= 0x00A000,长度= 0x0.08万
      重置           :原始= 0x3FFFC0,长度= 0x0.0002万

    // TW:
      RAMGS8     :原点= 0x1.4万,长度= 0x0.1万
      RAMGS9     :原点= 0x1.5万,长度= 0x0.1万


    第1页:

      BOOT_RSVD      :Origin = 0x0.0002万,length = 0x0.012万    /* M0的一部分,boot ROM将使用此堆栈*/
      RAMM1          :原点= 0x0.04万,长度= 0x0.04万    /*片上RAM块M1 */
      RAMD1          :原点= 0x00B800,长度= 0x0.08万


      RAMLS5     :原点= 0x00A800,长度= 0x0.08万

      RAMGS0     :原点= 0x00C000,长度= 0x0.1万
      RAMGS1     :原点= 0x00D000,长度= 0x0.1万
      RAMGS2     :原点= 0x00E000,长度= 0x0.1万
      RAMGS3     :原点= 0x00F000,长度= 0x0.1万
      RAMGS4     :原点= 0x1万,长度= 0x0.1万
      RAMGS5     :原点= 0x1.1万,长度= 0x0.1万
      RAMGS6     :原点= 0x1.2万,长度= 0x0.1万
      RAMGS7     :原点= 0x1.3万,长度= 0x0.1万
    //TW  RAMGS8     :原点= 0x1.4万,长度= 0x0.1万
    //TW  RAMGS9     :原点= 0x1.5万,长度= 0x0.1万
      RAMGS10    :原点= 0x1.6万,长度= 0x0.1万
      RAMGS11    :原点= 0x1.7万,长度= 0x0.1万
      RAMGS12    :原点= 0x1.8万,长度= 0x0.1万
      RAMGS13    :原点= 0x1.9万,长度= 0x0.1万
      RAMGS14    :原点= 0x01A000,长度= 0x0.1万
      RAMGS15    :原点= 0x01B000,长度= 0x0.1万
      
      CPU2TOCPU1RAM  :原点= 0x03F800,长度= 0x0.04万
      CPU1TOCPU2RAM  :原点= 0x03FC00,长度= 0x0.04万
    }


    章节

      codegstart       :> begin,    page =0
      ramfuncs        :> RAMM0     page =0
      
    #ifdef __TI_Compiler_version__
      #if __TI_Compiler_version__>= 1500.9万
       .ti.ramfunc :{}> RAMM0,     页=0
      #endif
    #endif   
      
    // TW:
    //  .text           :>>RAMM0 | RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4,  第=0页
      text           :>>RAMGS8 | RAMGS9  page =0

      .cinit          :> RAMM0,    page =0
      .Pinit          :> RAMM0,    页=0
      .switch         :> RAMM0,    page =0
      .reset          :> reset,    page =0,type = DSECT /* not used,*/

      .stack          :> RAMM1,    页= 1
      .ebss           :> RAMLS5,   页面=1
      econst         :> RAMLS5,   页面=1
      esysmem        :> RAMLS5,   页面= 1
      Filter_RegsFile :> RAMGS0,   页面= 1

      ramgs0          :> RAMGS0,   页=1
      ramgs1          :> RAMGS1,   页= 1.
      
      /*使用IPC API驱动程序时,需要以下部分定义*/
       组:> CPU1TOCPU2RAM,页= 1
       {
           PUTBUFFER
           PUTWRITEIDX
           GETREADIDX
       }
       
       组:> CPU2TOCPU1RAM,页= 1
       {
           GETBUFFER:   类型= DSECT
           GETWRITEIDX: 类型= DSECT
           PUTREADIDX :  类型= DSECT
       }  
     
    }

    /*
    //===========================================================================================================================================
    //文件结束。
    //===========================================================================================================================================
    */

    您是否可以重现此行为? 是否有办法避免这种情况?

    此致,
    Thomas。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Thomas:
    我无法再现此问题。 我在F2837xD中使用了linky_cpu01示例,在修改链接器命令文件之前或之后没有Estop作为main。 请告诉我您使用的确切项目(包括示例的版本)以确保。

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

    您好,Ki:

    我从这里使用了该项目:

    C:\ti\controlSUITE\DEVICE_SUPPORT\F2837xD\V210\F2837xD_Examples_CPU1\flinky</s>2837

    今天,我带来了第二台计算机进行验证。 我发现,除了更改的链接器命令文件之外,在启动调试会话时还需要选择两个CPU (我从C2000多日研讨会上了解到,通常 只应选择CPU1; 感谢您将这些资料放在网上,以便我可以在剩余时间内随时执行!)。 此外,调试过程中,一旦我停止CPU2,ESTOP0就会消失。 现在我想我们看到的是第二个内核的SW断点。 您同意吗?

    我不得不说,我对这个MCU很陌生,决定开始忽略第二个内核。 因此,我将所有设置都保留为默认设置。 我接下来应该研究两个内核的处理方法。

    此致,

    Thomas。

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

    [报价用户="Thomas7.8173万">C:\ti\controlSUITE\DEVICE_SUPPORT\F2837xD\V210\F2837xD_Examples_CPU1\blinky[/que]2837 \blinky[/que]

    是的,我当时正在使用相同的项目

    [报价用户="Thomas7.8173万"]在开始调试会话时选择两个CPU (我从C2000多天研讨会了解到通常 只应选择CPU1;感谢您将这些材料放在网上,以便我可以在剩余时间内随时进行!)。[/QUOT]

    您是否正在使用上述示例加载和运行两个CPU? 您能否详细提供您正在执行的确切步骤,以便我可以在我的环境中复制它?

    谢谢

    KI

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

    别介意我最后的要求 我可以重现该问题。

    Estop外观是由于代码位于共享内存中,并且启用了自动运行至主选项。 正如John前面提到的,当启用自动运行到main时,它将在main (Estop)的开头设置SW断点。 您的情形中发生的情况如下:

    1)启动调试会话,并将相同的代码加载到两个CPU
    2)断点设置在CPU1的main位置,并且CPU1已执行
    3) CPU1在main处挂起,断点被清除
    4)断点设置为CPU2的main,并执行CPU2
    5) CPU2从不到达主(断点(紧急停止)从未清除)
    6) CPU1不知道CPU2的断点集,因此当您查看主拆卸视图时,您将看到CPU2的Estop集 (仅当反汇编视图与为其设置断点的CPU处于同一上下文时,才会执行操作代码替换)

    7)当CPU2停止时,断点将被清除,而Estop将在CPU1的反汇编视图中消失

    可以通过禁用两个CPU的主CPU的自动运行来确认上述情况,然后在为两个内核启动调试会话时,两个内核都应在代码入口点停止。 如果您检查CPU1的拆卸视图,您将不会看到Estop。 选择CPU2并通过Run (运行)-> Go Main (主菜单)运行它。 调试器将在main处为CPU2设置断点并运行。 CPU2将继续运行,因为它无法到达主。 如果您转至CPU1的拆卸视图,您将看到Estop出现在主菜单中。 此Estop是CPU2中的SW断点。

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

    另请注意,同一代码加载两次(第二个CPU的加载正在覆盖CPU1加载的同一全局共享位置的相同代码)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢大家帮助我解决这个问题。