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.

[参考译文] TMS320F28377S:软件未从闪存运行。

Guru**** 2445440 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/986715/tms320f28377s-software-not-running-from-flash

器件型号:TMS320F28377S
主题中讨论的其他器件:C2000WARE

您好!

我升级了我的计算机并进行了解密(可能不是明智的决定...) 将我的项目升级到 TI 提供的新工具。

我的旧工具、其中: CCS v7.4.0.00015  Compiler v16.9.4.LTS  C2000Ware 1.00.3.00

新工具集为 :CCS v10.2.0.00009 编译器 v20.2.4.LTS  C2000Ware 3.4.0.00

首先、我创建了一个"empty project with main.c"、并用我的 main.cpp 替换并添加了我的所有.cpp 和.h 文件。

在"C2000 Compiler"->"Include Options"部分中添加了相关的"Includes"后、我得到了要编译的工程。

 

我使用 XDS100V2 作为调试探针。

现在 、在连接调试器的情况下、项目会编译并运行。

但是、在下电上电后、软件 剂量不会运行。

下面粘贴的是链接器文件。

请帮助

谢谢


存储器

第0页:/*程序内存*/
/*内存(RAM/FLASH)块可移动到 Page1进行数据分配*/
/* begin 用于"引导至闪存"引导加载程序模式*/

开始:origin = 0x080000,length = 0x000002
RAMM0:origin = 0x000122、length = 0x0002DE
RAMD0:origin = 0x00B000、length = 0x000800
RAMLS0:origin = 0x008000、length = 0x000800
RAMLS1:origin = 0x008800,length = 0x000800
RAMLS2:origin = 0x009000,length = 0x000800
RAMLS3:origin = 0x009800,length = 0x000800
RAMLS4:origin = 0x00A000,length = 0x000800
RAMGS14:origin = 0x01A000,length = 0x001000
RAMGS15:origin = 0x01B000,length = 0x001000
复位:origin = 0x3FFFC0,length = 0x000002

/*闪存扇区*/
FLASHA:origin = 0x080002,length = 0x001FFE /*片上闪存*/
FLASHB:origin = 0x082000、length = 0x002000 //片上闪存*
FLASHC:origin = 0x084000,length = 0x002000 //片上闪存*/
FLASHD:origin = 0x086000、length = 0x002000 //片上闪存*/
FLASHE:origin = 0x088000、length = 0x008000 //片上闪存*/
FLASHF:origin = 0x090000,length = 0x008000 //片上闪存*
FLASHG:origin = 0x098000、length = 0x008000 //片上闪存*/
FLASHH:origin = 0x0A0000,length = 0x008000 //片上闪存*/
FLASHI:origin = 0x0A8000、length = 0x008000 //片上闪存*/
FLASHJ:origin = 0x0B0000,length = 0x008000 //片上闪存*/
FLASHK:origin = 0x0B8000、length = 0x002000 //片上闪存*/
FLASHL:origin = 0x0BA000、length = 0x002000 //片上闪存*/
FLASHM:origin = 0x0BC000、length = 0x002000 //片上闪存*/
FLASHN:origin = 0x0BE000、length = 0x002000 //片上闪存*/
FLASHO:origin = 0x0C0000、length = 0x002000 //片上闪存*/
FLASHP:origin = 0x0C2000,length = 0x002000 //片上闪存*/
FLASHQ:origin = 0x0C4000、length = 0x002000 //片上闪存*/
FLASHR:origin = 0x0C6000,length = 0x002000 //片上闪存*/
FLASHS:origin = 0x0C8000、length = 0x008000 //片上闪存*/
FLASHT:origin = 0x0D0000,length = 0x008000 //片上闪存*/
FLASHU:origin = 0x0D8000,length = 0x008000 //片上闪存*/
FLASHV:origin = 0x0E0000,length = 0x008000 //片上闪存*/
FLASHW:origin = 0x0E8000、length = 0x008000 //片上闪存*/
FLASHX:origin = 0x0F0000,length = 0x008000 //片上闪存*/
flashy:origin = 0x0F8000,length = 0x002000 //片上闪存*/
FLASHZ:origin = 0x0FA000、length = 0x002000 //片上闪存*/
FLASHAA:origin = 0x0FC000、length = 0x002000 //片上闪存*/
FLASHAB:origin = 0x0FE000、length = 0x002000 //片上闪存*/

第1页:/*数据存储器*/
/*内存(RAM/FLASH)块可移动到 PAGE0进行程序分配*/

BOOT_RSVD:origin = 0x000002,length = 0x000120 // M0的一部分,引导 ROM 将此用于栈*/
RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
RAMD1:origin = 0x00B800,length = 0x000800

RAMLS5:origin = 0x00A800,length = 0x000800

RAMGS0:origin = 0x00C000、length = 0x001000
RAMGS1:origin = 0x00D000、length = 0x001000
RAMGS2:origin = 0x00E000、length = 0x001000
RAMGS3:origin = 0x00F000、length = 0x001000
RAMGS4:origin = 0x010000,length = 0x001000
RAMGS5:origin = 0x011000,length = 0x001000
RAMGS6:origin = 0x012000,length = 0x001000
RAMGS7:origin = 0x013000,length = 0x001000
RAMGS8:origin = 0x014000,length = 0x001000
RAMGS9:origin = 0x015000,length = 0x001000
RAMGS10:origin = 0x016000,length = 0x001000
RAMGS11:origin = 0x017000,length = 0x001000
RAMGS12:origin = 0x018000,length = 0x001000
RAMGS13:origin = 0x019000,length = 0x001000


部分

/*分配计划领域:*/
.cinit:> FLASHB PAGE = 0,ALIGN (4)
.pinit:> FLASHB,PAGE = 0,ALIGN (4)
.text:>> FLASHB | FLASHC | FLASHD | FLASHE PAGE = 0,ALIG(4)
codestart:> begin page = 0,align (4)

#ifdef __TI_Compiler_version__
#if __TI_Compiler_version__>=15009000
.TI.ramfunc:{}负载= FLASHD,
RUN = RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)
其他
ramfuncs:load = FLASHD,
RUN = RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)
#endif
#endif

/*分配未初始化的数据段:*/
.stack:>RAMM1 page = 1.
.ebss:>> RAMLS5 | RAMGS0 | RAMGS1 PAGE = 1.
.esysmem:> RAMLS5 PAGE = 1.

/*初始化段进入闪存*/
econst:>> FLASHF | FLASHG | FLASHH PAGE = 0,ALIGN (4)
.switch:> FLASHB PAGE = 0,ALIGN (4)

.reset:> reset,page = 0,type = DSECT //未使用,*/

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

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

    您好!

    您能否检查 BEGIN 部分是否使用 CODE_START 函数填充? 加载 .out 后、您可以检查映射文件或在反汇编视图中检查存储器内容

    您是否正在使用 controlCARD?

    此致、

    Veena

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

    您好!

    我正在使用我的定制硬件。

    以下是映射文件中有关 begin 和 code_start 的所有内容:

    包括上面和下面的几行...

    RAMD0 0000b000 00000800 00000000 00000800 RWIX
    RAMGS14 0001a000 00001000 00000aa9 00000557 RWIX
    RAMGS15 0001b000 00001000 00000000 00001000 RWIX
    BEGIN 00080000 00000002 00000002 00000000 RWIX
    FLASHA 00080002 00001ffe 00000000 00001ffe RWIX
    FLASHB 00082000 00002000 00001ffd 00000003 RWIX
    FLASHC 00084000 00002000 00002000 00000000 RWIX
    FLASHD 00086000 00002000 00001fff 00000001 RWIX

    段页原点长度输入段
    ---- -------- ------ --------
    codestart
    * 0 00080000 00000002
    00080000 00000002 F2837xS_CodeStartBranch.obj (codestart)

    .cinit 0 00082000 00000a05

    abs ffffff 活页夹
    0 00082000 cinit
    0 00080000 CODE_START
    ABS FFFFFF etext
    0 00082c18引脚

    0 0001aa97 _FlashOff _BANK1
    0 0001aa5 _F28x_usDelay
    0 00080000 CODE_START
    0 00082000 __cinit__
    0 00082000 cinit
    0 00082c18 __PinIT__

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

    您好!

    您是否在 CODE_START 中禁用了看门狗?

    WD_DISABLE .set 0;设置为1以禁用 WD、否则设置为0

    如果没有、您可以将  WD_DISABLE 设置为1并尝试吗?

    此致、

    Veena

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

    感谢您的快速重播。

    请参阅下面的整个 F2837xS_CodeStartBranch.asm 文件。

    WD_DISABLE .set 1;设置为1可禁用 WD、否则设置为0

    .ref _c_int00
    全局代码_start

    (三
    *函数:codestart 段
    *
    *说明:分支到代码起始点
    (三

    .sect "codestart"

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

    ;结束 codestart 段

    (三
    *函数:WD_DISABLE
    *
    *说明:禁用看门狗计时器
    (三
    如果 WD_DISABLE = 1

    .text
    WD_DISABLE:
    SETC OBJMODE;为28x 目标代码设置 OBJMODE
    EALLOW;启用 EALLOW 受保护寄存器访问
    MOVZ DP,#7029h>>>6;设置 WDCR 寄存器的数据页
    MOV @7029h、#0068h;将 WDCR 中的 WDDIS 位置位以禁用 WD
    EDIS;禁用 EALLOW 受保护寄存器访问
    LB _c_int00;分支到 RTS 库中启动。_asm

    .endif

    ;结束 wd_disable

    .end

    ====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    ;//文件结束。
    ====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

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

    您好!

    我无法想到为什么它不是独立运行的。

    您是否说过与旧版编译器和 C2000ware 版本完全相同的应用程序代码?

    您可以做的一项检查是在 C2000ware 中尝试一个示例、并检查它是否独立运行? 如果定制硬件上有 LED、则尝试运行 LED_Blinky 示例、该示例易于独立验证

    此致、

    Veena

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

    您好!

    C2000Ware 剂量独立运行的项目。

    我决定采取一种新的办法。  

    我为目标创建了一个新项目、并且只将源文件和头文件复制到新项目。

    我花了很多时间将所有东西连接在一起。

    最终、编译成功后、我会收到 fifil允许 警告:


    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段"ramfuncs"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"BufferDataSection"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"AdcaResultRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"AdcbResultRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"AdccResultRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"AdcdResultRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"Clb1LogicCfgRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"Clb2LogicCfgRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"Clb3LogicCfgRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"Clb4LogicCfgRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"Clb1LogicCtrlRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"Clb2LogicCtrlRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"Clb3LogicCtrlRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"Clb4LogicCtrlRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"Clb1DataExchRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"Clb2DataExchRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"Clb3DataExchRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"Clb4DataExchRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"CanaRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段"CanbRegsFile"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".CIO"
    警告#10210-D:创建默认大小为0x400的".esysmim"段;使用-heap 选项更改默认大小
    完成构建目标:"Trion Dual V1.Out"

    有什么想法吗?

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

    需要使用映射到正确存储器区域的段来更新链接器命令文件。 为外设寄存器结构创建* RegsFile 段。 这些映射在 F2837xS_Headers_nonBIOS.cmd 文件中。 您可以添加此文件以解决这些问题。

    对于其他段、您需要将它们映射到存储器块。 您可以在 common\cmd 文件夹中找到参考 cmd 文件。 您可以使用 2837xS_Generic_flash_lnk.cmd 作为参考。

    esysmem 用于分配堆。 看起来您尚未在项目设置中配置堆选项。 因此、它使用默认值 0x400。 您可以在 Project Properties->C2000 Linker->Basic Options 中更新堆大小

    此致、

    Veena

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

    您好!

    我忘记了有关此问题的更新。

    问题是项目中缺少_flash 定义。

    谢谢