i为Altera/Nios II微处理器(UP)编写了一些C-Program代码。此代码将与Altera Arm 9微处理器不同。因此,我需要为不同的UP-S编写2个不同的代码件。我如何检查存在的执行时间。或更简单,当前的UP是NIOS。
由于两个处理器来自不同的体系结构,因此您将无法检查哪个处理器在运行时运行。您可以在编译时进行操作,因为您将拥有由工具链设置的特定定义标志(请参见https://sourceforge.net/p/predef/wiki/architectures/)。对于手臂,它应该是__arm__
或类似的,具体取决于您用于HPS的工具链。
#ifdef __arm__
<specific code for HPS>
#else
<specific code for NIOS>
#endif /* __arm__ */
您还可以使用C前处理器命令(CPP)查看工具链的定义:
<toolchain>-cpp -dM /dev/null
注意:对于ARM处理器,可以使用MIDR寄存器来知道您正在运行的类型,并且可以在运行时访问该类型。但是,在为NIOS II构建时,您将遇到汇编错误。因此,您需要使用预处理器来调用特定的ARM寄存器名称,并在为Niosii构建时删除代码。
大概会与其他编译器编译?这些编译器(很可能)将具有某种形式的#Define,您可以用来为每个代码构建不同的代码。
您可以使编译器转储其所有默认的预处理程序使用以下方式定义:
echo | ./nios2-elf-gcc.exe -dM -E -
这将特别发射:
#define nios2 1