最近有项目用到IAR开发环境,之前用的是KEIL,许多针对编译器的指令不是很清楚。
今天我们就来学习编译指示指令:location
代码如下:
#define USB_GLOBAL _Pragma("location = \"m_usb_global\"")
#define USB_BDT _Pragma("location = \"m_usb_bdt\"")
这段代码的作用是,定义一个宏,用该宏定义的变量位于“m_usb_global”节中。
USB_GLOBAL static usb_device_struct_t s_UsbDevice[USB_DEVICE_CONFIG_NUM];/*s_UsbDevice is located in section m_usb_global*/
上面的代码实现定义数组变量s_UsbDevice,并且该数组变量位于“m_usb_global” 节。
其实还有等效的代码:
#pragma location = "m_usb_global"
usb_device_struct_t s_UsbDevice[USB_DEVICE_CONFIG_NUM];/*s_UsbDevice is located in section m_usb_global*/
前一种方法一劳永逸,下次再定义变量位于指定的section时,直接用宏定义就可以了,而第二种每次都需要用伪指令指定某一个section。
这些section都是在.icf文件中定义。