我正在将一个ARM芯片的程序从IAR编译器移植到gcc.
在原始代码中,IAR特定的运算符如__segment_begin和__segment_size用于分别获取某些内存段的开头和大小.
有没有办法和海湾合作委员会做同样的事情?我查了GCC手册,却找不到任何相关内容.
更多细节:所讨论
的存储器段必须位于固定位置,以便程序可以正确连接芯片上的某些外设.原始代码使用__segment_begin运算符来获取此内存的地址,并__segment_size确保它不会溢出此内存.
我可以通过添加变量来指示这些内存段的开始和结束来实现相同的功能,但是如果GCC具有类似的运算符,这将有助于最小化编译器相关代码的数量,我最终必须编写和维护.
小智 1
现代版本的 GCC 将为每个段声明两个变量,即 __start_MY_SEGMENT 和 __stop_MY_SEGMENT。要使用这些变量,您需要将它们声明为具有所需类型的外部变量。接下来,您可以使用“&”运算符来获取该段的开头和结尾的地址。
extern uint8_t __start_MY_SEGMENT;
extern uint8_t __stop_MY_SEGMENT;
#define MY_SEGMENT_LEN (&__stop_MY_SEGMENT - &__start_MY_SEGMENT)
Run Code Online (Sandbox Code Playgroud)