(这是 CCS 7.4.0.00015下的代码-是的、我知道它相当旧、我正在处理一些旧代码...) 在汇编器中、对原始代码进行了大幅简化:
.cdecls C
%{
enum{cpu_mode = 0x1f};
%}
.text
和 r5、r0、#cpu_mode
绘制"未知符号"错误。 汇编器代码似乎没有任何方法可以引用不带枚举标签名称声明的 C 枚举常量(这是合法的 C 语言、一直以来都是这样的、现在是一种声明整数常量的非常常用的方法)。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
(这是 CCS 7.4.0.00015下的代码-是的、我知道它相当旧、我正在处理一些旧代码...) 在汇编器中、对原始代码进行了大幅简化:
.cdecls C
%{
enum{cpu_mode = 0x1f};
%}
.text
和 r5、r0、#cpu_mode
绘制"未知符号"错误。 汇编器代码似乎没有任何方法可以引用不带枚举标签名称声明的 C 枚举常量(这是合法的 C 语言、一直以来都是这样的、现在是一种声明整数常量的非常常用的方法)。
尊敬的 Henry:
不幸的是、 .cdecls 指令不受支持。
请参阅以下主题、了解更多详细信息:
(+) TMS570LS1114:tiarmclang:此目标不支持.cdecls 指令-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛
--
谢谢。此致、
Jagadish。
我已经知道它确实起作用。 正如我说过的、问题不在于.cdecls 在一般情况下不起作用(在 CCS 7.4.0和类似的旧版本中)、但它显然无法处理这一特定情况: 枚举(不是#defined)常量声明没有枚举标签名称。 这很重要、因为.cdecls 的巨大优势是能够使用_existing_C 头文件、而无需为了汇编器的利益而重新写入它们。 一些头文件使用麻烦的语法声明了很多常量,这是合法的 C 语言,我不想使用#define 重写所有常量。
我想知道、大多数情况下、这实际上是否起作用、除了必须使用一些未记录的特殊语法在汇编器中访问此类名称外。 正常的汇编程序对.cdecls 枚举常量的访问需要写入 enumtagname.constantname、因此可以通过使用一些特殊的占位符 标签名称来访问声明没有标签名称的常量。 实际上、这比替代方案更有意义、那就是实施者根本就没有实施这种情况。 遗憾的是、 汇编语言工具手册 根本没有提到无标签名称的情况、因此没有提示占位符是什么、一些采用明显选择的实验都不成功。