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.

[参考译文] TMS320F2809:大小为32和33的全局变量的编译器/连接器逻辑

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1380968/tms320f2809-logic-of-compiler-linker-for-global-variable-with-size-32-and-33

器件型号:TMS320F2809
主题中讨论的其他器件:test2

工具与软件:

hi champs、

我是为我们的客户提出这个问题。

用户发现为全局变量(即.ebss)分配的 RAM 大小在增加超过32时似乎会大幅增加。

也就是说、  

第33章我是谁

uint16_t test1[大小]

uint16_t test2[大小]

uint16_t test3[大小]

......

当大小增加到32以下(例如30、31、32)时、.ebss 线性增加。

当大小增加超过32 (例如32、33、34)时、.ebss 将线性增加。

但当大小从32变为33时、.ebss 似乎会大幅增加。

问题:

1.对我们的编译器/链接器来说是否有意义?

2.如果用户必须使用大小33、用户是否可以避免这种情况和/或优化.ebss 分配大小?

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

    您好!

    您如何测量尺寸? 我在 f280049项目中进行了快速测试、在我的示例中、大小呈线性增长(数据取自映射文件:

    0000001f     main.c.obj (.ebss:_test1)
    00000020     main.c.obj (.ebss:_test2)
    00000021     main.c.obj (.ebss:_test3)
    00000022     main.c.obj (.ebss:_test4)
    00000023     main.c.obj (.ebss:_test5)
    

    代码如下:

    #define SIZE 31
    
    uint16_t test1[SIZE];
    
    uint16_t test2[SIZE+1];
    
    uint16_t test3[SIZE+2];
    
    uint16_t test4[SIZE+3];
    
    uint16_t test5[SIZE+4];
    

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

    请参阅文章 C2000 MCU 编译器中的数据分块。  因此、可能的权变措施是"应用" __attribute__((noblocked)) 问题数组。

    谢谢。此致、

    -George.