1.FreeRTOS不同任务调用同一个函数

1.函数如下

 2、测试结果如下:

 这个函数在两个不同优先级里面调用,可以得出两个实验结论:

a.即使没有vtaskdelay或者其他信号量获取阻塞存在,依然会发生调度,操作系统美一个系统节拍调度一次(我的节拍周期是1ms)。

b.函数cnt计数是静态变量,任务再次回来已经不是原来的值了,因此函数里面如果存在静态变量或者全局变量并且不希望被擅自被其他任务临时切换改变了,则需要加互斥信号量,如果不在乎全局变量的值,那可以不加互斥量。在带os的系统中,存在静态变量和全局变量的函数称为不可重入函数。

3.如果cnt是局部非静态变量会怎么么样呢?测试结果如下:

可以看出局部变量并不会累加,这个局部变量占用了各自任务的栈,在每个任务的栈空间里都有自己的位置,每个任务就相当于一个小小的mcu,有栈空间保存自己的局部变量值。

 4.如果函数带传入指针呢?测试结果如下:

可以看出指针的值并不会被打乱,但依然会发生调度

猜你喜欢

转载自www.cnblogs.com/ycpkbql/p/12620060.html