DSP编程技巧之:不得不看的编译指示
C代码: #pragma FUNCTION_OPTIONS ( func, "additional options" ); C++代码: #pragma FUNCTION_OPTIONS( "additional options" ); 10. INTERRUPT 使用这个选项可以在C代码中直接操作中断,其使用方法是: C代码: #pragma INTERRUPT ( func ); C++代码: #pragma INTERRUPT ; 被该指令直接操作的函数将使用IRP(中断返回指针)来返回值。 在使用FPU时,中断分为两种:高优先级中断HPI和低优先级中断LPI,其中HPI使用快速的上下文存储机制,不能被嵌套,LPI则与普通的C28x中断机制一样,并且可以被嵌套。此时可以增加第二个参数来控制: C代码: #pragma INTERRUPT ( func , {HPI|LPI} ); C++代码: #pragma INTERRUPT ( {HPI|LPI} ); 在DSP/BIOS和SYS/BIOS HWI对象中,不能使用INTERRUPT指令,因为Hwi_enter/Hwi_exit宏和Hwi解包器已经包含了该函数,此时使用该指令会产生负面的效果。 11. MUST_ITERATE 使用这个指令的情况下,我们确信某个for循环能够执行指定的次数。使用这个指令能够帮助编译器确定循环的次数和最佳的实现方式,从而减小代码的尺寸。其使用方法是: #pragma MUST_ITERATE ( min, max, multiple ); min是循环的最小次数,max是最大执行次数,multiple则是循环次数的整数倍,如果这其中某个参数不存在,则可以省略,例如: #pragma MUST_ITERATE(5); /* 最少循环5次 */ #pragma MUST_ITERATE(5, , 5); /* max参数省略;循环次数是5的倍数次(至少1倍) */ pragma MUST_ITERATE(8, 48, 8); /* 循环此时可能为8, 16, 24, 32, 40, 48 */ 12. NO_HOOKS 该指令阻止在调用函数时自动产生进入钩子和退出钩子,使用方法是: C代码: #pragma NO_HOOKS ( func ); C++代码: #pragma NO_HOOKS; 13. RESET_MISRA 顾名思义,这个指令会把MISRA-C:2004规则检查恢复到它原先的设定状态。例如,某条规则在命令行里被使能,但是在某段代码中被屏蔽了(某些原因导致它无法通过规则检查),使用该指令会规则检查重新使能。使用方法是: #pragma RESET_MISRA (" {all|required|advisory|rulespec} ") 14. RETAIN 使用这个指令,可以避免某些符号在条件链接时被优化掉,从而在输出文件中保留它。使用方法是: #pragma RETAIN ( symbol ) 这个指令与我们的第二条,CLINK的效果是整好相反的。 15. SET_CODE_SECTION与SET_DATA_SECTION 这两条指令用来设置其后所有声明的段。使用方法是: C代码: #pragma SET_CODE_SECTION ("section name") C++代码: #pragma SET_DATA_SECTION ("section name") 例如: #pragma SET_DATA_SECTION("mydata") int x; int y; #pragma SET_DATA_SECTION() 其中的x和y都被会放入我们指定的段mydata中,直到我们使用空参数SET_DATA_SECTION(),之后的代码或数据才会被放入默认的段之中。 16. UNROLL UNROLL是“摊开”的意思,这个指令与for/while相关,意思是把n次的循环给展开,从而有个n份同样的代码。循环展开,是一种牺牲程序的尺寸来加快程序的执行速度的优化方法。可以手动编程完成,也可由编译器自动优化完成。循环展开通过将循环体代码复制多次实现。循环展开能够增大指令调度的空间,减少循环分支指令的开销。循环展开可以更好地实现数据预取技术。其使用方法是: #pragma UNROLL( n ); 只有在编译器认为n是安全的(即展开之后确实都能执行),才能执行此操作。
DSP编程技 相关文章:
- DSP编程技巧之:编译流程与处理器选项(12-21)
- DSP编程技巧---在main函数运行之前,你需要知道的(12-21)
- DSP编程技巧---详解浮点运算的定点编程(12-21)
- DSP编程技巧---详解cmd文件(12-21)
- DSP编程技巧-使用代码优化时必须考虑的五大问题(12-21)
- DSP编程技巧---理解函数的调用过程(12-21)