ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
您可以通過(guò)將 .set 指令與 .def 或 .global 指令結(jié)合使用,在匯編語(yǔ)言中定義全局常量,也可以使用鏈接器賦值語(yǔ)句在鏈接器命令文件中定義它們。這些常量只能通過(guò)使用特殊運(yùn)算符從 C/C++ 中訪問(wèn)。
對(duì)于 C/C++ 或匯編語(yǔ)言中定義的變量,符號(hào)表包含變量所包含的值的地址。從 C/C++ 按名稱訪問(wèn)程序集變量時(shí),編譯器使用符號(hào)表中的地址獲取值。
但是,對(duì)于匯編語(yǔ)言常量,符號(hào)表包含常量的實(shí)際值。編譯器無(wú)法分辨符號(hào)表中的哪些項(xiàng)是地址,哪些是值。如果按名稱訪問(wèn)匯編語(yǔ)言(或鏈接器)常量,編譯器將嘗試使用符號(hào)表中的值作為地址來(lái)獲取值。若要防止這種行為,必須使用 & (address of) 運(yùn)算符來(lái)獲取值 (_symval)。換而言之,如果 x 是匯編語(yǔ)言常量,那么它在 C/C++ 中的值是 &x。請(qǐng)參閱《ARM 匯編語(yǔ)言工具用戶指南》中的“在 C/C++ 應(yīng)用程序中使用鏈接器符號(hào)”,了解更多使用 _symval 的示例。
有關(guān)符號(hào)和符號(hào)表的更多信息,請(qǐng)參閱《ARM 匯編語(yǔ)言工具用戶指南》中的“符號(hào)”部分。
您可以使用 cast 和 #define 來(lái)簡(jiǎn)化這些符號(hào)在程序中的使用,如Example6-5 和Example6-6 中所示。