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.

[参考译文] 编译器/TMS320F28069M:为段分配存储器的规则(.cio 属于哪里?)

Guru**** 2553260 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/625989/compiler-tms320f28069m-rules-for-assigning-memory-to-sections-where-does-cio-belong

器件型号:TMS320F28069M

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

您好!

我正在尝试将我自己的.CIO 部分添加到存储器中。 查看链接器命令文件、我可以看到:

a)一些存储器范围重叠良好、例如:

begin:origin (0x50)+ length (0x02)= boot_RSVD:origin (0x02)

boot_RSVD:origin (0x02)+ length (0x4E)= RAMM0:origin (0x50)

RAMM0:origin (0x50)+ length (0x3B0)= RAMM1:origin (0x400) 

...等等。

b)但有一些存储器范围似乎会留下一些未使用的空间。 例如:

RAMM1:原点(0x400)+长度(0x400)= 0x800 


下一部分从0x8000开始: 


RAML0_L8:origin = 0x008000、

(1)这是否意味着我可以安全地将 RAMM1长度增加到7C00?

我实际上已经尝试过这种方法(即使使用较小的值来保留一定的裕度)、然后将.cio 段分配给 RAMM1。 结果如何? 运行程序(可能连接到 printf 函数)时、我收到以下控制台消息:

"无法识别地址(0x800)处 CIO 缓冲器中的无效 CIO 命令(0)。 请检查器件和程序存储器映射。"

映射文件显示 .cio 专门分配给了0x800。

(2)在我将 RAMM1的大小增加到这个缺省限制之上之后、0x800处是否存在存储器重叠? 我看不到这个值的任何其他段!

另一个问题是:

(3) 分配.cio 段的最佳存储器范围是多少? 默认情况下(如果未在链接器文件中实现)、它会放置在 USB_RAM 中。 是否可以使用相同的范围?

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

    您好!

    [引述]

    (1)这是否意味着我可以安全地将 RAMM1长度增加到7C00?

    我实际上已经尝试过这种方法(即使使用较小的值来保留一定的裕度)、然后将.cio 段分配给 RAMM1。 结果如何? 运行程序(可能连接到 printf 函数)时、我收到以下控制台消息:

    "无法识别地址(0x800)处 CIO 缓冲器中的无效 CIO 命令(0)。 请检查器件和程序存储器映射。"

    映射文件显示 .cio 专门分配给了0x800。 [/报价]

    不可以、您不能使用该空间、因为这不是 RAM 空间。 请参阅器件手册的内存映射部分。

    [引用](3) 分配.cio 段的最佳存储器范围是多少? 默认情况下(如果未在链接器文件中实现)、它会放置在 USB_RAM 中。 是否可以使用相同的范围? [/报价]

    您应该能够在一些有效的 RAM 部分进行映射。 USB_RAM 仅供 USB 使用、 不供 USB 使用。

    此致、

    Vivek Singh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢! 数据表中的存储器映射非常有用。 我将.stack 段移到了 RAML0_L8中、它是一个好选择吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    还有一个问题。



    有一个名为 F2806x_Headers_nonBIOS.cmd 的链接器文件、此文件将特定寄存器放置在内存中。 它与基本链接器命令文件(F28069F_ram_ln.cmd)有何关系? 我可以将其用作补码还是某种形式的替代?

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

    这两个链接器在您的项目中都是必需的。 头文件链接器可处理将寄存器结构正确放置到存储器中的问题。 另一个处理所有其他项目内存分配。

    此致
    Chris