我为Altera / Nios II微处理器(uP)编写了一些C程序代码。该代码将与Altera Arm 9微处理器不同。因此,我需要为不同的uP-s编写2个不同的代码段。我该如何检查存在uP的执行时间。或更简单地说,当前的uP是否为Nios。
答案 0 :(得分:1)
由于这两个处理器来自不同的体系结构,因此您将无法在运行时检查哪个处理器正在运行。您可以在编译时执行此操作,因为您的工具链将设置一个特定的define标志(请参见https://sourceforge.net/p/predef/wiki/Architectures/)。对于Arm,应为__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进行构建时,会出现编译错误。因此,在为NiosII进行构建时,您需要使用预处理器来调用特定的Arm寄存器名称并删除代码。
答案 1 :(得分:0)
大概它会用其他编译器编译吗?这些编译器将(很有可能)具有某种#define,可用于为每个#define构建不同的代码。