主要内容

-non-preemptable-tasks

指定表示不可抢占任务的函数

语法

-non-preemptable-tasks function1[,function2[,...]]

描述

-non-preemptable-tasks function1[,function2[,...]] 指定表示不可抢占任务的函数。

这些函数不能被其他非周期任务和周期任务中断,但可以被可抢占或不可抢占的中断所中断。非周期任务通过任务 (-entry-points) 选项指定,周期任务通过周期任务 (-cyclic-tasks) 选项指定,而中断则通过中断 (-interrupts) 选项指定。有关示例,请参阅Define Task Priorities for Data Race Detection in Polyspace

要将某个函数指定为不可抢占的周期任务,必须先将该函数指定为周期任务或非周期任务。您指定的函数必须具有以下原型:

void function_name(void);

在用户界面(仅限 Polyspace® 桌面端产品)中,在配置窗格的其他字段中输入此选项。请参阅其他

示例

以下面的程序为例。假设函数 task1task2 表示可以并发运行的任务。

int x;
void task1() {
    x++;
}
void task2() {
    x = 0;
}
void main() {
}

要指定 task1task2 是周期任务,请输入以下命令:

polyspace-bug-finder -sources filename -cyclic-tasks task1,task2
您会看到一个数据争用缺陷,这是因为多个任务试图并发访问共享变量 x

task1 指定为不可抢占。

polyspace-bug-finder -sources multi.c -cyclic-tasks task1,task2 -non-preemptable-tasks task1
数据争用问题已消失,这是因为 task1 中的 x++ 运算无法再被中断。

提示

  • 在 Polyspace as You Code 分析中,此选项无用。

  • Code Prover 解释此选项时有一些限制,因为 Code Prover 认为所有操作都可能是非原子且可中断的。这种过度近似会导致此选项在某些情况下被忽略。有关示例,请参阅Effect of Task Priorities in Code Prover

版本历史记录

在 R2016b 中推出