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.

[参考译文] TMS320F2.8027万:全局变量何时生成?

Guru**** 2606725 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/631309/tms320f28027-when-do-global-variables-generate

部件号:TMS320F2.8027万

例如,我在设备上有bootloader项目和app1项目,并想将应用程序项目升级到App2项目。

在app1项目的main.c中,有以下代码:

int a=1;//全局变量

主{}

在App2项目的main.c中,有以下代码:

int a=1;//全局变量

float b=float 0.5 ;//全局变量

主{}

1.升级应用程序项目后,App2项目闪存,全局变量的初始值在设备闪存上,但全局变量“a和b”本身如何?

2.我知道全局变量的初始值被复制到函数c_int00中的全局变量,但是升级应用程序项目后,我无法运行到c_int00来初始化全局变量,因为c_int00将最终运行到main()函数(bootloader项目), 但我想运行应用程序代码,升级应用程序项目后如何初始化全局变量,同时运行应用程序代码?

谢谢。

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

    1. C引导例程将闪存中这些表中的数据复制到.ebss RAM部分中已初始化的变量。
    2.请参阅下面指南中的“7.9 (系统预初始化)?1引导钩功能”部分以了解系统预初始化。 这可能会满足您的需求。 将转到编译器论坛以获得专家的确认。

    www.ti.com/.../spru514o.pdf

    此致
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复,但我想知道全局变量本身是何时生成的,而不是如何初始化它们。 因为在应用程序代码升级后,全局变量的数量可能会增加,因此.ebss将占用更大的RAM空间,设备何时为这些变量分配更大的空间?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    霍华德

    您能澄清一下"生成"的含义吗? 不清楚您要的是什么。

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

    例如,升级应用程序项目后,全局变量的数量可能会增加,因此设备需要更大的内存空间来存储.ebss,设备何时会分配更大的RAM空间来存储.ebss?

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

    Howard Zou 说:
    设备何时会分配更大的RAM空间来存储.ebss?[/QUOT]

    它不是这样工作的。  在生成时,编译器看到全局变量的定义时,它会发出汇编程序指令,在.ebss部分为该目标文件保留空间。  链接器将所有目标文件中的这些.ebss部分组合到一个输出部分(也称为.ebss)中。  链接程序命令文件告诉链接程序在内存中的何处分配此.ebss输出部分。  链接程序命令文件入门一文介绍了此过程的链接程序部分

    谢谢,此致,

    -George

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

    非常感谢。

    有关.ebss空间要求的信息,例如,它需要0x080。 这些信息存储在闪存中,对吧? 设备通电后,RAM何时会分配这样一个空间来存储全局变量? 我的意思是应该有这样一个瞬间。

    例如,如果我在设备上升级应用程序项目,但没有关闭和打开设备电源, .ebss空间要求信息将存储在闪存中,但它何时生效?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    否,这都是在链接时决定的。 链接程序决定.ebss的确切位置,可执行文件具有起始地址。 在重置/开机时,.ebss区域未创建-它只是在那里。 您知道它的唯一方式是.ebss,因为可执行文件说明了这一点。 对于程序,它只是另一个内存区域。