編譯指示指令location——(IAR使用筆記)
最近有專案用到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檔案中定義。