Gcc 如何从C代码中引用段的开头和大小

Gcc 如何从C代码中引用段的开头和大小,gcc,porting,iar,Gcc,Porting,Iar,我正在将一个ARM芯片的程序从IAR编译器移植到gcc 在原始代码中,IAR特定运算符(如\uuu段\u开始和\uu段\u大小)用于分别获取某些内存段的开始和大小 有没有办法用GCC做同样的事情?我搜索了GCC手册,但找不到任何相关内容 更多详细信息: 所讨论的内存段必须位于固定位置,以便程序能够与芯片上的某些外围设备正确接口。原始代码使用\uuu segment\u begin运算符获取此内存的地址,并使用\uu segment\u size确保不会溢出此内存 我可以通过添加变量来指示这些内

我正在将一个ARM芯片的程序从IAR编译器移植到gcc

在原始代码中,IAR特定运算符(如
\uuu段\u开始
\uu段\u大小
)用于分别获取某些内存段的开始和大小

有没有办法用GCC做同样的事情?我搜索了GCC手册,但找不到任何相关内容


更多详细信息:
所讨论的内存段必须位于固定位置,以便程序能够与芯片上的某些外围设备正确接口。原始代码使用
\uuu segment\u begin
运算符获取此内存的地址,并使用
\uu segment\u size
确保不会溢出此内存


我可以通过添加变量来指示这些内存段的开始和结束来实现相同的功能,但是如果GCC具有类似的运算符,这将有助于最大限度地减少我最终不得不编写和维护的依赖于编译器的代码量。

那么链接器的标志
--section start
呢?我读到的是支持的

有关如何使用它的示例,请参见:


然后您必须添加到链接器的选项中:
-Wl,--section start=.honk=address

GCC的现代版本将为每个段声明两个变量,即uu start\u MY\u段和u stop\u MY\u段。要使用这些变量,需要将它们声明为所需类型的外部变量。然后,使用“&”运算符获取该段开始和结束的地址

extern uint8_t __start_MY_SEGMENT;
extern uint8_t __stop_MY_SEGMENT;
#define MY_SEGMENT_LEN (&__stop_MY_SEGMENT - &__start_MY_SEGMENT)

您能否更具体地说明您需要哪些网段地址和大小,以及需要哪些网段?谢谢。我希望避免必须更改链接器设置,因为我移植的代码是针对库的,这意味着库的所有用户都必须编辑链接器设置才能使其工作,如果可能的话,我希望避免这种情况。
extern uint8_t __start_MY_SEGMENT;
extern uint8_t __stop_MY_SEGMENT;
#define MY_SEGMENT_LEN (&__stop_MY_SEGMENT - &__start_MY_SEGMENT)