snifer

[原创]Blackfin处理器中M3文件的作用

0
阅读(2608)

前面写了一些Blackfin处理器中的LDF文件的设置及理解,其实,在使用VisualDSP++时,还有另外一个文件很重要,就是M3文件。全称是M3_RESERVED,M3_RESERVED选项用于模拟器。缺省时,模拟器将Blackfin处理器的堆栈用作工作区,不过,可以使用M3寄存器来替代它。构建的run-time库具有-reserve m3开关,允许使用寄存器替代堆栈用作工作区。但有少量程序需要额外的处理。如,如果保留了M3,中断处理程序可能不存储和恢复M3,但如果没保留,就必须进行这样存储和恢复。因此,用一些库的两个变量来处理这种情况。LIBM3包括异常处理程序setjmp()和longjmp(),而LIBDSP包括与DSP有关的优化程序,当M3被模拟器保留时,会损失一些性能。

如:

#ifdef M3_RESERVED        /* { */
#ifdef __WORKAROUNDS_ENABLED        /* { */
#define LIBM3 libm3res532y.dlb
#define LIBDSP libdspm3res532y.dlb
#define SFTFLT libsftflt532y.dlb
#else
#define LIBM3 libm3res532.dlb
#define LIBDSP libdspm3res532.dlb
#define SFTFLT libsftflt532.dlb
#endif        /* } */
#else
*********************************************************************************

只要链接时需要工作区,__WORKAROUNDS_ENABLED选项就被编译器驱动器定义;尽管编译时可以单独选择每个可用的工作区,不能对所有的工作区组合提供预构建库。因此,每个库和目标都有单个激活工作区版本,选择了所有的工作区。

#ifdef __WORKAROUNDS_ENABLED        /* { */
#define LIBM3 libm3free532y.dlb
#define LIBDSP libdsp532y.dlb
#define SFTFLT libsftflt532y.dlb
#else
#define LIBM3 libm3free532.dlb
#define LIBDSP libdsp532.dlb
#define SFTFLT libsftflt532.dlb
#endif        /* } */
#endif        /* } */
*********************************************************************************

通过排序选择浮点库。完全兼容的库是独立的库,高性能库是LIBDSP的一部分。这两个库的排序根据需要的浮点库而改变。由–ieee-fp编译器开关设置IEEEFP选项,选择替代排序方案。