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.
尊敬的 C2000团队。
我正在尝试将在 CCSv6中创建的客户项目迁移到 CCSv10。
客户的项目基于 controlSUITE。
迁移和下载后、TMS320F28377S 进入陷阱。
您如何迁移它? 您是否对代码进行了许多更改? 更新编译器版本?
它是在加载后立即直接到达 Estop,还是能够先到达 main()? 如果执行重置和重新启动,是否可以将其转至 main()?
惠特尼
我没有更改代码并升级到最新版本。 (CCS v10.2.0.00009)
一旦加载、它就会直接到达 Estop。
执行重置和重新启动时会发生什么情况? 如果转到"Tools"->"Debugger Options"->"Auto Run and Launch Options"、是否已配置为在程序加载或重新启动时运行到 main?
自从您获得了 ITRAP、您能否使用内存浏览器或反汇编窗口确认您的代码是否已实际加载?
其他应用程序(如 C2000Ware 示例)是否可以在此硬件上加载并运行? 是否只有这个应用程序存在这种问题?
惠特尼
你好。
关于这个问题、我已经对其进行了跟进。
首先、如果在同一硬件上加载了 TI 的示例代码、则运行正常。
我们将使用最新的 CCS 来使用从 CCSV6 (编译器5.12)到20.12的新电机库...
当代码开始时,主问题不是从 main()入口点开始的。
如果我在 main()的条目中设置断点,它永远不会达到该点和代码中的任何其他断点。
之后、如果我停止并重新运行代码、它将使我能够挂起断点。 此时、我可以处理代码并测量 LED 切换等参数、并查看系统是否正常运行。
问题是代码为什么没有从主条目运行以及一些异常行为。
这是否与用于创建存储器和段的 cmd 文件相关? 我们修改并重新生成了 cmd 文件。
非常感谢。
放置断点时是否会出现任何错误? 如果您检查 CCS 中的"Breakpoints"面板、它是否显示断点处于活动状态?
对 cmd 文件的更改可能是原因。 在切换编译器版本时、您是否也从 COFF ABI 更改为 EABI?还是仍为 COFF?
在 CodeStartBranch.asm 文件(或等效文件)中、您可以尝试禁用看门狗吗?
惠特尼
你(们)好
我检查了编译器选项并找到"Legacy COFF"。 我将其更改为 EABI、但发生了编译器错误。 请参阅以下控制台消息。 我将 EABI 设置更改为另一个示例工程(blinky_cpu01)、并且也发生了错误。 非常感谢。
===================================================================================================================================
构建目标:"inverter.out"
调用:C2000链接器
"c:/ti/ccs1030/ccs/tools/compiler/ti-cgt-c2000_20.2.4.LTS/bin/cl2000 /ti/ccs1030/ccs/tools/compiler/ti-cgt-c2000_20.2.4.LTS/lib /ti/ccs1030/ccs/tools/compiler/ti-cgt-c2000_20.2.4.LTS/include -v28 -ml -mt --cla_support=cla1 -float_support=fpu32 -tmu_support=tmu0 -vcu_support=vcu2 -O1 -opt_for_speed=3 -fp_mode=strict -fp_reassoc=on -advice:performance-vcu_support=vcu-ovcu-ature-d=-ate-m=-exclus-m=-m=-m=-ate-dag-m=-inverter-m=-m=-m=-m=-exclus-m=-m=-m=-m=-rid-m=-m=-m=-m=-exclus-m=-m=-dag-inverter-m=-m=-m=-m=-m=-m=-m=-m=-m=-exclus-m-inverter-m-/Users/seungwook.ahn/workspace_v10/INVERTER/lib display_error_number -no_warnings -xml_link_info="inverter_linkInfo.xml"-- rom_model -o "inverter.out""./src/AbsoluteEncoder.obj ""./src/Accelerometer.obj ""./src/Adc.obj ""./src/Brake.obj ""./src/CRC32.obj ""./src/DSP28xxx_SectionCopy_nonBIOS.obj ""./src/DigitalInput.obj ""./src/F2837xS_CodeStartBranch.obj ""./src/F2837xS_Adc.obj ""./src/F2837xS_DefaultISR.obj /src/F2837xS_EQep.obj /src/F2837xS_Gpio.obj /src/F2837xS_PieCtrl.obj /src/F2837xS_Spi.obj /src/F2837xS_usDelay.obj /src/HallSensor.obj /src/Inverter.obj /src/ModuleData.obj /src/Parameters.obj /src/Variable.obj /src/cc.obj ""./src/F2837xS_Dma.obj ""./src/DRA_ecat.obj "./src/Digital_Pll.obj "./src/F2837xS_Emif.obj "./src/F2837xS_CpuTimers.obj "./src/F2837xS_EPwm.obj "./src/F2837xS_I2C.obj "./src/F2837xS_GlobalVariableDefs.obj "./src/F2837xS_Mcbsp.obj "./src/F2837xS_SysCtrl.obj /src/FTSensor.obj /src/Homing.obj /src/JointTorqueSensor.obj /src/MotorOffset.obj /src/RingBuff.obj /src/can.obj /src/dac.obj "./src/F2837xS_PieVect.obj /src/F2837xS_Sci.obj /src/F2837xS_TempSensorConv.obj /src/Flash.obj /src/IndexCheck.obj /src/LSPBTrajectory.obj /src/ParameterTables.obj /src/SpeedObserver.obj /src/can_open_object_dictionary.obj "./src/easy2833x_sci_FIFO_v8.6.obj "./src/eeprom.obj "./src/esc.obj "./src/esc_sdo.obj "./src/fault.obj "./src/flash_programming_cpu1_FLASH.cmd "./src/filter.obj "./src/flange.obj "./src/interrupt.obj "./src/sc.obj "./src/main.obj "./src/os_100m.obj "."../lib/F021_API_F2837xS_FPU32.lib "../src/F2837xS_Headers_nonBIOS.cmd ".."..-l"C:/ti/ccs1030/ccs/tools/compiler/ti-cgt-c2000_20.2.4.LTS/lib/rts2800_fpu32.lib -llibc.a
致命错误#16000:目标文件具有不兼容的格式("C:/ti/ccs1030/ccs/tools/compiler/ti-cgt-c2000_20.2.4.LTS/lib/rts2800_fpu32.lib "= TI-COFF、"./src/AbsoluteEncoder.obj = ELF)
>>编译失败
Makefile:203:目标'inverter.out'的配方失败
gmake.1]:***[inverter.out]错误1
gmake[1]:目标"辅助输出"不会由于错误而重新生成。
Makefile:199:目标'all'的配方失败
gmake:***[全部]错误2.
****构建完成****
没关系-现在请坚持使用 COFF。 我认为最好不要在工作项目和失败项目之间引入另一个区别、直到我们找到问题。 如果您想稍后迁移、 这里有一个很好的指南。
您能否尝试比较旧的工作应用程序和新应用程序之间的.map 文件、以查看是否有任何显著差异可以解释该问题?
查看 Ki 在本主题中的建议是否有助于:
惠特尼
你(们)好
我检查了.cmd 文件并发现了怪异的东西。 请参阅以下脚本。
(笑声)
RAMGS2 :origin = 0x00E000、length = 0x001000
(笑声)
Flash28_API:
{
-l F021_API_F2837xS_FPU32.lib (.econst)
-l F021_API_F2837xS_FPU32.lib (.text)
}负载= FLASHL、
运行= RAMGS2,//内存位置? --@μ A
Load_start (_Flash28_API_LoadStart)、
Load_End (_Flash28_API_LoadEnd)、
RUN_START (_Flash28_API_RunStart)、
PAGE = 0、ALIGN (4)
ramfuncs:load = FLASHF,// ramfuncs
运行= RAMGS2,//内存位置? --@μ A
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)
(笑声)
ramfuncs 的运行位置与 FLASH28_API 位置与 RAMGS2相同。
我检查了映射文件。
(笑声)
RAMfuncs 0 00090000 00000090运行 ADDR = 0000e7b8
00090000 00000090 F2837xS_SYSCTRL.obj (ramfuncs)
(笑声)
如果您看到运行的 ADDR、它不是从0000e000开始。
"7B8"的大小与 FLASH28_API 段大小相同。
显示了映射文件
(笑声)
Flash28_API
* 0 000ba000 000007b5运行 ADDR = 0000e000
(笑声)
我想这种重复的存储器位置可能会导致异常加载问题。 我将进行更多研究。
谢谢。
这对我来说似乎是可以的。 我看不出为什么这两个段在同一 RAM 中执行时都会出现问题的任何原因。
应用应该如何从闪存入口点到达_c_int00? 您使用的是 C2000Ware 中的 F2837xS_CodeStartBranch.asm 文件还是一些自定义代码?
惠特尼
你(们)好 感谢您的回复。
关于 .asm 文件、我们修改了 codestart 部分、如下所示。
=================== ===================================================
WD_DISABLE .set 1;设置为1可禁用 WD、否则设置为0
.ref copy_sections
全局代码_start
.sect "codestart"
code_start:
如果 WD_DISABLE = 1
LB wd_disable
其他
LB COPY_SECTIONS
.endif
如果 WD_DISABLE = 1
.sect "wddisable"(禁用 wddisable)
WD_DISABLE:
SETC OBJMODE
EALLOW
MOVZ DP,#7029h>>6.
MOV @7029h、#0068h
EDIS
LB COPY_SECTIONS
.endif
.end
=========== ===================
.ref _c_int00
.global copy_sections
全局_cinit_loadstart、_cinit_runstart、_cinit_size
全局_const_loadstart、_const_runstart、_const_size
全局_econst_loadstart、_econst_runstart、_econst_size
全局_PinIT_loadstart、_PinIT_runstart、_PinIT_size
全局_switch_loadstart、_switch_runstart、_switch_size
全局_text_loadstart、_text_runstart、_text_size
.sect "copysects"
COPY_SECTIONS:
MOVL XAR5、#_const_size
MOVL ACC、@XAR5
MOVL XAR6、#_const_loadstart
MOVL XAR7、#_const_runstart
LCR 副本
MOVL XAR5、#_econst_size
MOVL ACC、@XAR5
MOVL XAR6、#_econst_loadstart
MOVL XAR7、#_econst_runstart
LCR 副本
MOVL XAR5、#_PinIT_SIZE
MOVL ACC、@XAR5
MOVL XAR6、#_PinIT_loadstart
MOVL XAR7、#_PinIT_runstart
LCR 副本
MOVL XAR5、#_SWITCH_SIZE
MOVL ACC、@XAR5
MOVL XAR6、#_SWITCH_loadstart
MOVL XAR7、#_SWITCH_runstart
LCR 副本
MOVL XAR5、#_TEXT_SIZE
MOVL ACC、@XAR5
MOVL XAR6、#_TEXT_LOADSTART
MOVL XAR7、#_TEXT_runstart
LCR 副本
MOVL XAR5、#_cinit_size
MOVL ACC、@XAR5
MOVL XAR6、#_cinit_loadstart
MOVL XAR7、#_cinit_runstart
LCR 副本
LB _c_int00
副本:
B 返回、EQ
RPT AL
|| PWRITE *XAR7、*XAR6++
返回:
LRETR
.end
===================================================================================================================================
我认为这似乎没有问题。 之前的存储器段地址冲突不是问题。
我更改并排列了一些存储器段、但结果相同。
我在旧版本编译器(15.12...) CCSV6中测试了该工作项目。 XDS110 JTAG 更新后、主入口问题也出现了相同的问题。 因此、我认为这不是一个与工具相关的问题。
我注意到、在尝试使用一些编译器选项进行调试时、代码从主条目开始两次。 然而,它从未出现过。 即使我将编译器选项设置为相同、我也没有再次重新生成该现象。
嗯... 我将尝试使用我们自己的源代码从零开始逐步启动项目。 这需要更多时间。 但这是迁移它的一个重要问题。
非常感谢。
好的、希望分步迁移将缩小代码中引入问题的部分。 如果您需要进一步的帮助、请告诉我。
惠特尼