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/CC1310:不初始化内部闪存中的区域

Guru**** 2606375 points
Other Parts Discussed in Thread: CC1310

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/628357/ccs-cc1310-not-initialize-regions-in-internal-flash-memory

部件号:CC1310

工具/软件:Code Composer Studio

大家好,

我使用的是Code Composer Studio的最新版本的cc1310f128。

我有一些任务,正如我在 IAR下的e2e.ti.com/.../61.0637万中描述和解决的那样。

我通过修改CC1310DK_7xD_NoRTOS.cmd文件来创建此区域:

#define flash_base 0x0

#define flash_size 0x1BFFF//0x2万

#define HW_ERR_BASE 0x1C000

#define HW_ERR_SIZE 0x1000

#define Bank_0_BASE 0x1D000

#define Bank_0_size 0x1000

#define Bank_1_base 0x1E000

#define Bank_1_size 0x1000

#define CCFG_BASE 0x1F000

#define CCFG_SIZE 0x1000

 

内存

 ...

/* RFCM参数和错误代码存储在内部闪存中*/

Bank_0 (RW):Origin = Bank_0_base,length = Bank_0_size

Bank_1 (RW):Origin = Bank_1_base,length = Bank_1_size

HW_ERR (RW):原点= HW_ERR_BASE,长度= HW_ERR_SIZE

CCFG (RW):Origin = CCFG_base,length = CCFG_Size

 ...

}

章节

...

Bank_0:> Bank_0

Bank_1:> Bank_1

.hw_err:> HW_ERR

ccfg:> CCFG (高)

...

}

1)我可以定义那些 未初始化的闪存区域,我的意思是编译器/链接器不输入任何值,也不擦除这些区域。

(2)我可否在申请书中宣布指向这些地区的指针?

3)为了将ccfg数据保存在原始位置,我为此创建了单独的区域。  我可以通过哪种方式在指定的地址将一个部分创建到内部存储器中,而不为每个部分定义单独的区域

我是Code Composer的新手,但在CCS帮助中找不到这种想法。  

 

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

    下面链接了了解TI链接器命令文件语法的最佳参考。  

    ARM汇编语言工具用户指南 -请参阅链接器一章
    链接程序命令文件Primer

    如果您的问题超出了这些参考的范围,我建议您在CC1310设备论坛上询问具体问题。 我没有设备专业知识,因此无法指导您如何正确分配/推荐此设备,但是设备论坛中的专家应该能够帮助您解决此问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的建议。
    但是,我可以通过哪种方式将变量放在特定的闪存地址?
    是否也可以提供CCS C编译器的链接?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Igor Natachanny 说:
    但我可以通过哪种方式将变量放在特定的闪存地址?[/QUOT]

    您可以使用data_sectionpragma执行此操作。 这里有一个相关的帖子,以及 关于编译器用户指南中pragma的更多信息。

    此页面包含所有用户指南的链接,您可能需要查看ARM编译器用户指南:  
    http://processors.wiki.ti.com/index.php/TI_Compiler_Information#Compiler_Manuals

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经按照源文件中的描述完成了所有操作
    "
    #pragma data_section(params_0,"Bank_0")
    #pragma data_section(params_1,"Bank_1")
    FLASH_PARAM_ST PARAM_0;
    FLASH_PARAM_ST PARAM_1;
    "
    但在内部版本中,我看到警告“WARNING #1.0247万-D: Creating output section "Bank_0" without a section specification”(警告#1.0247万-D:创建不带节规范的输出节"Bank_0")
    此外,代码不会运行,也不会执行工作。
    哪里出了问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Igor Natachanny 说:
    但在内部版本中,我收到警告"WARNING #1.0247万-D:Creating output section "Bank_0" without a section specification "

    有关 警告的说明,请参阅此链接。

    您需要通过在链接程序命令文件的sections指令中指定“bank_0”,将其显式分配到需要分配到的相应内存区域。

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

    您好,AartiG:

    这是我的实际链接程序命令文件(my_appl.cmd文件)中的片段

    ...

    #define flash_base 0x0

    #define flash_size 0x1BFFF//0x2万

    #define HW_ERR_BASE 0x1C000

    #define HW_ERR_SIZE 0x1000

    #define Bank_0_BASE 0x1D000

    #define Bank_0_size 0x1000

    #define Bank_1_base 0x1E000

    #define Bank_1_size 0x1000

    #define CCFG_BASE 0x1F000

    #define CCFG_SIZE 0x1000

    #define RAM_BASE 0x2000万

    #define RAM_SIZE 0x5000

    /*系统内存映射*/

    内存

    /*存储在中并从内部闪存*/执行的应用程序

    Flash (RX):origin = flash_base,length = flash_size

    /* RFCM参数和错误代码存储在内部闪存中*/

    Bank_0 (RW):Origin = Bank_0_base,length = Bank_0_size

    Bank_1 (RW):Origin = Bank_1_base,length = Bank_1_size

    HW_ERR (RW):原点= HW_ERR_BASE,长度= HW_ERR_SIZE

    CCFG (RW):Origin = CCFG_base,length = CCFG_Size

    /*应用程序使用内部RAM存储数据*/

    SRAM (rwx):origin = RAM_BASE,length = RAM_SIZE

    }

    /*内存中的部分分配*/

    章节

    intvecs :> flash_base

    text:>闪烁

    .TI.ramfunc :{} load=flash, run=SRAM,table(BINIT)

    const:> flash

    constdata:>闪存

    .rodata:>闪存

    .cinit:>闪烁

    .Pinit:>闪光

    init_array:>闪存

    .EMM_TEXT:> FLASH

    Bank_0:> Bank_0

    Bank_1:> Bank_1

    .hw_err:> HW_ERR

    ccfg:> CCFG (高)

    .vtable_ram:> SRAM

    数据:> SRAM

    .bss:> SRAM

    sysmem:> SRAM

    nonretenvar :> SRAM

    .stack:> SRAM (高)

    }

    ...

    当我在*.c文件中注释掉这一行时

    #pragma data_section(params_0,"Bank_0")

    警告消失,程序正在运行。

    此行

    #pragma data_section(params_1,"Bank_1")

    不要做这个警告。

    链接程序命令文件中有什么问题?

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

    data_sectionpragma中的节名与链接程序命令文件中的节名不同(一个有句点,另一个没有)。 确保两者匹配。

    #pragma data_section(params_0,"Bank_0")

    Bank_0:> Bank_0

     

    [报价用户="Igor Natachanny"]

    此行

    #pragma data_section(params_1,"Bank_1")

    不要做这个警告。

    [/引述]

    也许此部分从未生成或优化过。 您可以通过查看为该源文件生成的程序集文件(启用-k编译器选项以保留生成的程序集文件)来检查是否存在该名称的部分。 您还可以查看最终的链接映射文件,以查看这些部分是否正在分配以及分配在何处。

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

    谢谢,AartAG。 这个"时期"就是问题所在。 但现在我遇到了另一个。

    然后是其中一个字符串

     #pragma data_section (hwe,".hw_err")
     #pragma data_section(params_0,".bank_0")
     #pragma data_section(params_1,".bank_1")

    存在于*。c文件中,构建完全通过,没有警告,但调试器 不会进入应用程序起点。

    哪里出了问题?

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

    Igor Natachanny 说:
    哪里出了问题?

    这取决于多种因素,需要全面了解代码/应用程序以及如何设置所有内容,以使其正常工作。 不幸的是,这不是我们在这一CCS论坛中能够提供帮助的专门知识。 也许您可以尝试在CC1310设备论坛中提问。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,AartiG:
    我已通过使用 #pragma location和 #pragma NOINIT代替 #pragma data_section解决了此问题。
    这样我就实现了我的主要目标:将我的变量放在闪存中的特定地址上,并使其内容不可擦除。
    调试器现在可以正常工作。 直到 现在,#pragma data_section的问题仍然被我误解。
    将我创建的部分保留在闪存中还是将返回到原始链接程序命令文件是合理的?
    感谢您为我提供的许多有用链接
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我很高兴听到问题得到解决。 如果您不介意,请继续并将此主题标记为"已回答"。

    Igor Natachanny 说:
    将我已制作的部分保留在闪存中还是将返回到原始链接程序命令文件是合理的吗?[/QUOT]

    我认为任何一种方式都应该是可以的。