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.

[参考译文] TMS320F28075:RAM 构建:从 Code Composer Studio (CCS)加载到 RAM GS1的.text 不正确

Guru**** 2394305 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1108031/tms320f28075-ram-builds-incorrect-text-loaded-to-ram-gs1-from-code-composer-studio-ccs

器件型号:TMS320F28075

您好!  

我们的团队喜欢将 RAM 构建用于我们的开发、因为编程周期时间 比闪存构建快得多。

遗憾的是、我看到 RAM 中的内容与我在反汇编.out 文件时看到的运算代码不匹配的问题。

例如:

在此示例中、我在链接器中将 RAMGS1 (地址0xD000)配置为.text 扇区。

   .text            : >> RAMGS1_3 | RAMGS4_7 | RAMLS4 | RAMLS5 | RAMD0_1, PAGE = 0, ALIGN(8)

奇怪的是、即使我更改了.text ram 链接器中扇区的顺序并将函数存储在 RAM 中、位于0xd000和0xd001的代码看起来也是一样的。  在程序运行到 main()之前,我已经验证了程序加载时 RAM 内容是否损坏。  即在 _c_int00处

CCS 在将.out 文件加载到 RAM 时是否执行优化?  什么 可能导致 dis2000输出与我在 CCS 中看到的结果不匹配?

-科林

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

    Colin、

    与.out 拆分的代码应与通过 JTAG 加载到器件中的代码匹配。  

    在查看上面的拆分装配体之前、您是否可以确保已运行到主程序?  

    作为 C Init 的一部分、有一些指令会影响 C28x 内核解释某些运算代码的方式(为了实现向后兼容性)、如果我们在执行此操作之前查看拆分、它可能会解释差异。

    最棒的

    Matthew

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

    您好、Matthew、

    感谢您的快速响应。  我已经尝试过、结果是相同的。  这就是我最初确定问题的方式、因为系统没有执行启用 ISR 的函数。

    您对我还可以尝试什么有任何建议吗?  是否有任何方法可以添加额外的日志记录以查看仿真器正在加载到闪存中的内容?  


    -科林   

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

    Colin、

    当您通过 CCS 加载代码时、您是使用调试按钮启动/加载/等活动项目、还是手动连接到目标、然后使用 Run->Load->Load Program、然后选择.out 文件?

    如果将内存浏览器打开到同一位置(0xD000)、内容是否与拆分窗口中第二列中的内容相匹配?

    假设这是"是"、如果刷新存储器窗口、您是否会看到内容发生变化?

    最棒的
    Matthew

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

    我使用了调试按钮和“Run->Load->Select Program to Load->*.out”过程。  我使用的是 CCS 11.2.0.00007和 CDT 21.6.0.0。

    内存浏览器和拆分程序集显示相同的操作代码内容。 下面的屏幕截图显示了刷新后的拆分和存储器内容以及.out 文件的拆分。  (这是通过调试按钮获取的...但加载选项没有变化)

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

    Colin、

    感谢您这么做、我不会过多地使用反汇编器、但一旦编译.out、有关器件的代码加载的任何内容都不应更改内容。

    您能否附加在构建项目时生成的.map 文件、这将帮助我了解正在播放的存储器区域以及是否有任何相邻的存储器使用情况。  如果存在存储器超运行问题、链接器应该不会继续、如果存在栈超运行或超运行/过写入存储器指针、我们通常会看到什么情况。  因为在代码加载时、在 main 之前、情况不应如此。

    您能否打开"Registers"选项卡并找到 SP (内核寄存器下的堆栈指针)、让我知道当您读取存储器时读取的内容?

    最棒的

    Matthew

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

    您好、Matthew、

    我很难在 E2E 论坛中上传地图文件。  我是否可以使用另一个工具来共享它?  在此期间、以下是段输出:

    ******************************************************************************
                 TMS320C2000 Linker Unix v21.6.0                   
    ******************************************************************************
    >> Linked Wed Jun  8 15:20:56 2022
    
    OUTPUT FILE NAME:   <tahoe_500-0120_rev002_RAM.out>
    ENTRY POINT SYMBOL: "_c_int00"  address: 00013c25
    
    
    MEMORY CONFIGURATION
    
             name            origin    length      used     unused   attr    fill
    ----------------------  --------  ---------  --------  --------  ----  --------
    PAGE 0:
      RAMLS3                00009800   00000800  000005ca  00000236  RWIX
      RAMLS4                0000a000   00000800  000000bc  00000744  RWIX
      RAMLS5                0000a800   00000800  00000000  00000800  RWIX
      RAMD0_1               0000b000   00001000  00000e1f  000001e1  RWIX
      RAMGS1_3              0000d000   00003000  00003000  00000000  RWIX
      RAMGS4_7              00010000   00003ff8  00003ff8  00000000  RWIX
      FLASHJ                000b0000   00008000  00001712  000068ee  RWIX
      RESET                 003fffc0   00000002  00000000  00000002  RWIX
    
    PAGE 1:
      BOOT_RSVD             00000002   00000121  00000000  00000121  RWIX
      RAMM0_1               00000124   000006d4  000006d4  00000000  RWIX
      RAMM1_RSVD            000007f8   00000008  00000000  00000008  RWIX
      ADCARESULT            00000b00   00000018  00000000  00000018  RWIX
      ADCBRESULT            00000b20   00000018  00000000  00000018  RWIX
      ADCDRESULT            00000b60   00000018  00000000  00000018  RWIX
      CPUTIMER0             00000c00   00000008  00000000  00000008  RWIX
      CPUTIMER1             00000c08   00000008  00000000  00000008  RWIX
      CPUTIMER2             00000c10   00000008  00000000  00000008  RWIX
      PIECTRL               00000ce0   0000001a  0000001a  00000000  RWIX
      PIEVECTTABLE          00000d00   00000200  00000000  00000200  RWIX
      DMA                   00001000   00000200  00000000  00000200  RWIX
      CLA1                  00001400   00000080  00000000  00000080  RWIX
      CLA1_MSGRAMLOW        00001480   00000080  00000000  00000080  RWIX
      CLA1_MSGRAMHIGH       00001500   00000080  00000000  00000080  RWIX
      CLB1LOGICCFG          00003000   00000052  00000000  00000052  RWIX
      CLB1LOGICCTRL         00003100   00000040  00000000  00000040  RWIX
      CLB1DATAEXCH          00003200   00000200  00000000  00000200  RWIX
      CLB2LOGICCFG          00003400   00000052  00000000  00000052  RWIX
      CLB2LOGICCTRL         00003500   00000040  00000000  00000040  RWIX
      CLB2DATAEXCH          00003600   00000200  00000000  00000200  RWIX
      CLB3LOGICCFG          00003800   00000052  00000000  00000052  RWIX
      CLB3LOGICCTRL         00003900   00000040  00000000  00000040  RWIX
      CLB3DATAEXCH          00003a00   00000200  00000000  00000200  RWIX
      CLB4LOGICCFG          00003c00   00000052  00000000  00000052  RWIX
      CLB4LOGICCTRL         00003d00   00000040  00000000  00000040  RWIX
      CLB4DATAEXCH          00003e00   00000200  00000000  00000200  RWIX
      EPWM1                 00004000   00000100  00000000  00000100  RWIX
      EPWM2                 00004100   00000100  00000000  00000100  RWIX
      EPWM3                 00004200   00000100  00000000  00000100  RWIX
      EPWM4                 00004300   00000100  00000000  00000100  RWIX
      EPWM5                 00004400   00000100  00000000  00000100  RWIX
      EPWM6                 00004500   00000100  00000000  00000100  RWIX
      EPWM7                 00004600   00000100  00000000  00000100  RWIX
      EPWM8                 00004700   00000100  00000000  00000100  RWIX
      EPWM9                 00004800   00000100  00000000  00000100  RWIX
      EPWM10                00004900   00000100  00000000  00000100  RWIX
      EPWM11                00004a00   00000100  00000000  00000100  RWIX
      EPWM12                00004b00   00000100  00000000  00000100  RWIX
      ECAP1                 00005000   00000020  00000000  00000020  RWIX
      ECAP2                 00005020   00000020  00000000  00000020  RWIX
      ECAP3                 00005040   00000020  00000000  00000020  RWIX
      ECAP4                 00005060   00000020  00000000  00000020  RWIX
      ECAP5                 00005080   00000020  00000000  00000020  RWIX
      ECAP6                 000050a0   00000020  00000000  00000020  RWIX
      EQEP1                 00005100   00000022  00000000  00000022  RWIX
      EQEP2                 00005140   00000022  00000000  00000022  RWIX
      EQEP3                 00005180   00000022  00000000  00000022  RWIX
      DACA                  00005c00   00000008  00000000  00000008  RWIX
      DACB                  00005c10   00000008  00000000  00000008  RWIX
      DACC                  00005c20   00000008  00000000  00000008  RWIX
      CMPSS1                00005c80   00000020  00000000  00000020  RWIX
      CMPSS2                00005ca0   00000020  00000000  00000020  RWIX
      CMPSS3                00005cc0   00000020  00000000  00000020  RWIX
      CMPSS4                00005ce0   00000020  00000000  00000020  RWIX
      CMPSS5                00005d00   00000020  00000000  00000020  RWIX
      CMPSS6                00005d20   00000020  00000000  00000020  RWIX
      CMPSS7                00005d40   00000020  00000000  00000020  RWIX
      CMPSS8                00005d60   00000020  00000000  00000020  RWIX
      SDFM1                 00005e00   00000080  00000000  00000080  RWIX
      SDFM2                 00005e80   00000080  00000000  00000080  RWIX
      MCBSPA                00006000   00000024  00000000  00000024  RWIX
      MCBSPB                00006040   00000024  00000000  00000024  RWIX
      SPIA                  00006100   00000010  00000000  00000010  RWIX
      SPIB                  00006110   00000010  00000000  00000010  RWIX
      ***                  00006120   00000010  00000000  00000010  RWIX
      WD                    00007000   0000002b  00000000  0000002b  RWIX
      NMIINTRUPT            00007060   00000007  00000000  00000007  RWIX
      XINT                  00007070   0000000b  00000000  0000000b  RWIX
      SCIA                  00007200   00000010  00000000  00000010  RWIX
      SCIB                  00007210   00000010  00000000  00000010  RWIX
      SCIC                  00007220   00000010  00000000  00000010  RWIX
      SCID                  00007230   00000010  00000000  00000010  RWIX
      I2CA                  00007300   00000022  00000000  00000022  RWIX
      I2CB                  00007340   00000022  00000000  00000022  RWIX
      ADCA                  00007400   00000080  00000000  00000080  RWIX
      ADCB                  00007480   00000080  00000000  00000080  RWIX
      ADCD                  00007580   00000080  00000000  00000080  RWIX
      INPUTXBAR             00007900   00000020  00000000  00000020  RWIX
      XBAR                  00007920   00000020  00000000  00000020  RWIX
      SYNCSOC               00007940   00000006  00000000  00000006  RWIX
      DMACLASRCSEL          00007980   0000001a  00000000  0000001a  RWIX
      EPWMXBAR              00007a00   00000040  00000000  00000040  RWIX
      CLBXBAR               00007a40   00000040  00000000  00000040  RWIX
      OUTPUTXBAR            00007a80   00000040  00000000  00000040  RWIX
      GPIOCTRL              00007c00   00000180  00000000  00000180  RWIX
      GPIODATA              00007f00   00000030  00000030  00000000  RWIX
      RAMLS0                00008000   00000800  00000800  00000000  RWIX
      RAMLS1                00008800   00000800  000003e8  00000418  RWIX
      RAMLS2                00009000   00000800  000000ea  00000716  RWIX
      RAMGS0                0000c000   00001000  00001000  00000000  RWIX
      RAMGS7_RSVD           00013ff8   00000008  00000000  00000008  RWIX
      EMIF1                 00047000   00000070  00000000  00000070  RWIX
      CANA                  00048000   00000200  00000000  00000200  RWIX
      CANB                  0004a000   00000200  00000000  00000200  RWIX
      DEVCFG                0005d000   0000012e  00000000  0000012e  RWIX
      ANALOGSUBSYS          0005d180   00000048  00000000  00000048  RWIX
      CLKCFG                0005d200   00000032  00000000  00000032  RWIX
      CPUSYS                0005d300   00000082  00000000  00000082  RWIX
      ROMPREFETCH           0005e608   00000002  00000000  00000002  RWIX
      DCSMZ1                0005f000   00000023  00000000  00000023  RWIX
      DCSMZ2                0005f040   00000023  00000000  00000023  RWIX
      DCSMCOMMON            0005f070   00000008  00000000  00000008  RWIX
      MEMCFG                0005f400   00000080  00000000  00000080  RWIX
      EMIF1CONFIG           0005f480   00000020  00000000  00000020  RWIX
      ACCESSPROTECTION      0005f4c0   00000040  00000000  00000040  RWIX
      MEMORYERROR           0005f500   00000040  00000000  00000040  RWIX
      ROMWAITSTATE          0005f540   00000002  00000000  00000002  RWIX
      FLASH0CTRL            0005f800   00000182  00000000  00000182  RWIX
      FLASH0ECC             0005fb00   00000028  00000000  00000028  RWIX
      BL_JUMP_TABLE         00085df8   00000008  00000006  00000002  RWIX
      APP_JUMP_TABLE        00086000   00000008  00000000  00000008  RWIX

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

    此外、我将在今天晚些时候接近硬件时获取 SP。

    感谢你的帮助。  这个问题让我感到困惑:)  

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

    Colin、

    我将通过 E2E 向您发送朋友请求、这在附件方面有更多的弹性。  您很快就会收到一条消息。

    最棒的

    Matthew

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

    您好、Colin、

    在链接器命令文件中、如果您将内容映射到闪存和 RAM 存储器、请注意、不保证加载 RAM 内容。

    闪存插件专为完全嵌入式闪存应用而开发。  这意味着、链接器命令文件中所有已初始化的段都应映射到闪存。  如果需要从 RAM 执行任何操作、则在运行时应使用 memcpy()将该内容复制到 RAM 中、然后再执行该内容。  

    请参阅以下常见问题解答、了解有关此问题的更多信息:

    [常见问题解答]闪存-如何将应用程序从 RAM 配置修改为闪存配置?: https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/878674 

    谢谢、此致、
    Vamsi

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

    Colin、

    我即将回复与 Vamsi 类似的内容、尽管我没有他提供的背景(感谢 Vamsi)。 为了扩展 Vamsi 所说的内容、闪存插件本身使用一些 RAM 来对闪存进行编程、可能会对应在 RAM 中的代码进行重新编号、因为首先加载的代码。

    也就是说、如果我将闪存工具设置为仅加载到 RAM (工具->片上闪存)、我就能够使 RAM 映像正确。  因此、在这种情况下、您也许可以正常加载一次(这将对闪存进行编程)、方法是在下图中选择 Erase/Program (擦除/编程)、然后进入闪存工具并仅选择 RAM。  然后再次加载.out、RAM 将被正确加载。  闪存仍将具有其首次加载时的内容。

    正如 Vamsi 提到的、闪存工具更适用于最终映像、您可以在闪存中存储所有内容、并在稍后将其复制到 RAM 中、等等。 但我认为以上内容将有助于您的调试阶段。

    最棒的
    Matthew

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

    感谢

    您的解释很有意义、我很感激周围的工作。

    为了提供上下文、我们的.text 代码大小已发展到无法将所有内容放入所需 RAM 的程度。  和 RAM 构建可显著缩短开发周期。  因此、我尝试将一些基于库的代码写入闪存扇区(基本上是 ROM 库)、以便我们可以继续使用可用的 RAM 来处理我们正在积极开发的代码。

    我对 ROM 库的处理方式将会非常脆弱。  (本质上、调用在链接器文件中未更改的 RTS、nanopb 等的扇区、并将它们放入闪存中)。 但是、由于我有专家在打电话、您能给我一些有关如何创建一个真正的 ROM 库的文档吗?我可以在不同的版本之间可靠地链接该库?  我想我想仿真 F2837xRevB_c1bootROM_CLADataROMSymbols_eabi_fpu32.lib 如何提供闪存中提供的符号的地址。

    谢谢、

    -科林

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

    忽略 ROM 库问题。  我找到 了 www.ti.com/.../spraan5.pdf