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.

[参考译文] 编译器/MSP430FR2433:在未使用的代码 FRAM 中填充0xFF

Guru**** 2560010 points
Other Parts Discussed in Thread: MSP430FR2433

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/772578/compiler-msp430fr2433-fill-0xff-in-unused-code-fram

器件型号:MSP430FR2433

工具/软件:TI C/C++编译器

尊敬的香槟:

我的客户希望为所有未使用的 FRAM 填充0xFF。 根据本文档 第12.4章

http://downloads.ti.com/docs/esd/SLAU131K/Content/SLAU131K_HTML/hex_conversion_utility_description.html#STDZ0799222

我在  msp430fr243x_1_1.c 示例项目中的 lnk_msp430fr2433.cmd 中添加了 ROMS{}指令。 但是、ROMS 似乎不是关键字、我遇到了这样的错误。

请指导我们如何生成 fill = 0xFF 的.hex 文件

非常感谢!!

Jo

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

    默认情况下、未使用的 FRAM 存储器应为0xFF。 客户是否发现这方面的问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Jo、

    您需要定义/拆分存储器范围以填充链接器文件的存储器部分中的特定模式。 您可以在 CCS 帮助中找到详细信息(下面复制了一些内容)。 希望这对您有所帮助。

    此致、
    乔维·何

    8.5.4.2 MEMORY 指令语法

    MEMORY 指令标识目标系统中实际存在且可供程序使用的存储器范围。 每个范围都有几个特性:
    ◦名称
    ◦起始地址
    ◦长度
    ◦可选属性集
    ◦可选填充规格

    使用 MEMORY 指令时、请确保识别程序在运行时可访问的所有存储器范围。 MEMORY 指令定义的存储器已配置;未使用 MEMORY 显式说明的任何存储器均未配置。 链接器不会将程序的任何部分放入未配置的存储器中。 只需在 MEMORY 指令语句中不包含地址范围、即可表示不存在的存储器空间。

    MEMORY 指令在命令文件中由 MEMORY (大写)一词指定、后跟用大括号括起来的存储器范围规范列表。 示例8-3中的 MEMORY 指令定义了一个系统、该系统在地址0x1100处具有0xEEE0字节的闪存、在地址0x0200处具有0x0800字节的 RAM。 它还演示了存储器范围表达式以及开始/结束/大小地址运算符的使用(请参阅示例8-4)。


    示例8-3 MEMORY 指令
    /********* /
    /*带有 MEMORY 指令的示例命令文件*/
    /********* /
    file1.obj file2.obj /*输入文件*/
    --output_file=prog.out /*选项*/

    存储器

    闪存(RX):origin = 0x1100 length = 0xEEE0
    RAM (RX):origin = 0x0200 length = 0x0800





    MEMORY 指令的一般语法为:
    存储器

    name 1 [(attr)]:origin = expression、length = expression [、fill = constant]


    name n [(attr)]:origin = expression、length = expression [、fill = constant]







    name 指定存储器范围的名称。 存储器名称可以是一到64个字符;有效字符包括 A-Z、a-z、$、.和_。 这些名称对链接器没有特殊意义;它们只是标识存储器范围。 存储器范围名称是链接器内部的名称、不会保留在输出文件或符号表中。 所有存储器范围都必须具有唯一的名称、并且不能重叠。
    attr 指定与命名区域关联的一到四个属性。 属性是可选的;使用时、它们必须括在括号中。 属性将输出段的分配限制在特定的存储器范围内。 如果不使用任何属性、则可以将任何输出段分配到任何范围、而不受限制。 任何未指定属性的存储器(包括默认型号中的所有存储器)都具有全部四个属性。 有效属性包括:
    R 表示可以读取存储器。
    W 指定可以写入存储器。
    x 指定存储器可以包含可执行代码。
    我指定可以初始化存储器。
    origin 指定存储器范围的起始地址;输入为 origin、org 或 o。以字节为单位指定的值是16位整数常量表达式、可以是十进制、八进制或十六进制。
    length 指定存储器范围的长度;输入为 length、len 或 L。以字节为单位指定的值是32位整数常量表达式、可以是十进制、八进制或十六进制。
    fill 指定存储器范围的填充字符;输入为 fill 或 f。填充是可选的。 该值是整数常量、可以是十进制、八进制或十六进制。 填充值用于填充未分配给段的存储器范围区域。 (有关使用纠错码(ECC)时存储器范围的虚拟填充、请参阅第8.5.9.3节。)


    注释
    填充存储器范围
    如果为较大的存储器范围指定填充值、则输出文件将非常大、因为填充存储器范围(即使填充为0)会导致为该范围中所有未分配的存储器块生成原始数据。

    以下示例指定了一个具有 R 和 W 属性以及填充常量0FFFFh 的存储器范围:
    存储器

    RFILE (RW):o = 0x0020、l = 0x1000、f = 0x0FFFF

    通常情况下、MEMORY 指令与 SECTIONS 指令结合使用来控制输出段的放置。 有关 SECTIONS 指令的更多信息、请参阅第8.5.5节。