工具/软件:TI PRU编译器
你(们)好
我正在尝试使用cdecls将C头文件(具有多个#ifdef /#endif)包含到程序集源文件中。
http://downloads.ti.com/docs/esd/SLAU131K/Content/SLAU131K_HTML/sharing_c_c_header_files_with_assembly_source.html 提到,目前它不会进行有条件的编译。 有人可以建议解决此问题的方法吗?
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.
工具/软件:TI PRU编译器
你(们)好
我正在尝试使用cdecls将C头文件(具有多个#ifdef /#endif)包含到程序集源文件中。
http://downloads.ti.com/docs/esd/SLAU131K/Content/SLAU131K_HTML/sharing_c_c_header_files_with_assembly_source.html 提到,目前它不会进行有条件的编译。 有人可以建议解决此问题的方法吗?
感谢您的快速回复。 我认为我的用例有点不同,我将在此处解释。
假设有一个C头文件A_C.h包含
#ifdef P
#定义 R
#endif
和另一个ASM头文件A_ASM.h文件执行相同的操作,格式为汇编程序,如图所示
如果$isdefed ("P")
R组1
endif
如果我在某些程序集源文件中包含A_ASM.h,并且在构建配置中将P作为预定义符号,我可以在.if $isdefed("R")下看到正在执行的语句。 但当我使用cdecls直接包含C头文件A_C.h时,则不会。 此外,现在如果我也将R作为预定义符号添加到构建配置中,它将正确构建,但会发出R声明为R的警告
这表明在两种情况下都定义了R,但在以前的情况下,它没有进入符号表。 因此,我想知道,在构建配置中没有明确提及的情况下,是否有某种方法可以让R进入符号表?
总之,使用#define,测试在.cdecls内创建的符号是否存在...
如果$defined (C_Define_name);有效
...而不是使用...
如果$isdefed("C_Define_name");失败
要理解为什么需要了解汇编程序定义的一些概念。 有两种符号:常规(也称为标准)符号和替换符号。 C也有这些,但没有这些条款。 在C中,#define符号将一段文本替换为另一段文本。 例如
#Define Forever While (1)
...意味着文本将永远替换为文本"while (1)"。 这与常规符号完全不同...
int global_variable;
指令.set创建一个正则符号。 使用.define指令实现#define符号,并创建替换符号。 替换符号出现的任何位置都将替换为相应的文本。
$isdefed运算符只检查常规符号表。 但$defined运算符同时检查常规符号表和替换符号表。
有关详细信息,请参阅 PRU装配工具手册。
谢谢,此致,
-George