ZHCU876Z July 2001 – October 2023 SM320F28335-EP
除了 --cla_support 命令行选项外,以下命令行选项也专门适用于 CLA 编译器:
--cla_background_task={on|off}
启用或禁用对标识为后台任务的中断服务例程的支持。默认设置为关闭。当 --cla_background_task=on 时,系统会为非后台 ISR 保存和恢复 MR0、MR1、MR2、MAR0 和 MSTF 寄存器。有关创建后台任务的信息,请参阅节 6.9.15、节 10.2.2和节 10.2.4。
如果后台任务被禁用(默认)并且:
如果启用了后台任务并且:
由于只有 CLA2 支持后台任务,因此,如果 --cla_support 设置为非 cla2 值,那么在尝试使用 --cla_background_task=on 创建后台任务或启用后台任务时,系统会出现错误。
--cla_default
致使扩展名为 .c 的文件也被编译为 CLA 文件。
--cla_signed_compare_workaround={on|off}
允许对影响整数比较的 CLA 硬件缺陷自动使用权变措施。这是必要的,因为某些类型的整数比较可能会由于整数溢出而生成不正确的结果,例如,当比较的值具有相反的符号并且接近极值时。默认情况下,此选项处于禁用状态。
如果启用此选项,内部会使用浮点比较来检查正被比较的整数值的高位。如果所比较的值之间的差异过大,该比较会检测是否可能发生整数溢出。如果整数比较的结果不正确,则执行浮点比较。对于类似 if (x < y)
的比较,所执行的经修改的比较如下所示:
(float)x < (float)y || (float)x == (float)y && (x <= y)
如果代码执行许多 32 位整数比较,启用此选项会增加代码大小和延长执行时间。
以下类型的整数比较始终是安全的,不会出现整数溢出。即使启用了此选项,也不会对以下类型的比较使用权变措施。
请注意,无符号整数之间的比较仍然会出现不正确的结果,因为比较是根据有符号整数在内部执行的。
如果您由于权变措施对代码大小和执行时间的影响而不想使用它,则可以使用以下任何手动编码替代方案:
if (__mlt(x, y))
if ((short)x < (short)y)
for (short i = 0; i < (short)y); i++)
if ((float)x < (float)y)
for (float i = 0; i < (float)y); i++)
for (int i = y-1; i >= 0; i--)