2017-09-04 111 views
0

最近我检查了遗留项目(在10年前开发)。什么是位置编译需要

我碰到了#pragma DATA_SECTION。几乎每个全局变量都会添加 到特定的数据部分。 不知道为什么全局变量专门移动到DATA_SECTION?

在最近几天,当我们开发一个C应用程序时,我们并不担心数据段和所有。

那么现在使用位置编译指示的原因是什么,现在不使用 ?

+2

这很大程度上取决于您正在编译的平台。这种编译指示有时甚至在今天仍然是嵌入式代码所必需的。 – user694733

+1

告诉我们更多关于此代码用于的平台。 –

+0

是的。它是一个具有统一内存模型的嵌入式平台(TMS320 DSP)。我可以知道为什么它只需要嵌入式平台... –

回答

3

#pragma用于编译器做超出C标准范围的事情。如果代码是用另一个不能识别#pragma的编译器编译的,则该行将被忽略。

#pragma DATA_SECTION NAME#pragma DATA_SECTION DEFAULT一起用于某些嵌入式系统编译器,当您需要在特定存储器部分(如特定地址)中分配变量时。本示例中的NAME是内存段的自定义名称。

(它类似于__declspec(section "NAME"),你会发现在其他的编译器。)

我怀疑这是飞思卡尔/ NXP的CodeWarrior,其中#pragma DATA_SECTION NAME的意思是:把所有静态存储时间读/写变量部分NAME从这里开始。

你会这样做的原因取决于应用程序。在嵌入式系统中,您需要将变量放置在特定地址是非常常见的。

+0

是的。 Iam在嵌入式应用程序中看到它。需要知道为什么变量放置在数据部分 –

+1

@ Balaganesh.V我们不是千里眼。阅读文档并询问作者。这都是来自这里的猜测。 – Olaf

+0

@ Balaganesh.V如果你不明白为什么,你不需要它。当你第一次需要它时 - 你会明白为什么 –

相关问题