ZHCUAQ1F july 2015 – april 2023
在 C6000 架构上,不能在分支的延迟时隙中接受中断。在某些情况下,编译器可以生成在多个潜在的周期内不能被中断的代码。对于给定的实时系统,可以硬性规定中断禁用的时间。
--interrupt_threshold=n 选项指定中断阈值 n。该阈值指定编译器可以禁用中断的最大周期数。如果省略 n,编译器会假设代码永不中断。在 Code Composer Studio 中,要指定代码永不中断,请选中“Interrupt Threshold”复选框,并将“Build Options”对话框“Compiler”选项卡上的“Advanced”类别中的文本框留空。
如果未指定 --interrupt_threshold=n 选项,则仅在软件流水线循环周围显式禁用中断。使用 --interrupt_threshold=n 选项时,则编译器分析循环结构和循环计数器,以确定执行循环所需的最大周期数。如果可以确定最大循环数小于阈值,则编译器会生成最快/最佳的循环版本。如果循环小于六个周期,就不会发生中断,因为循环总是在分支的延迟时隙内执行。否则,编译器将生成一个可以中断的循环(但仍然生成正确的结果:单赋值代码),这在大多数情况下会降低循环的性能。
--interrupt_threshold=n 选项无法理解内存系统的影响。在确定循环的最大执行周期数时,编译器不会计算使用慢速片外内存或内存条冲突的影响。建议使用保守的阈值来调整内存系统的影响。
有关更多信息,请参阅节 7.9.13或《TMS320C6000 编程指南》。
编译器附带的运行时支持库文件不是使用中断灵活性选项构建的。请参阅自述文件以了解如何为您的版本构建运行时支持库文件。请参阅节 9.4,以使用中断灵活性选项构建您自己的运行时支持库文件。
--interrupt_threshold=0 选项生成与未使用 --interrupt_threshold 选项时相同的代码来禁用软件流水线循环周围的中断。
--interrupt_threshold 选项(省略阈值)意味着没有添加代码来禁用软件流水线循环周围的中断,这意味着不能安全地中断代码。此外,循环性能不会降低,因为编译器不会通过确保循环内核中至少有一个周期不在分支指令的延迟时隙中来尝试使循环可中断。