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

Posted 不积跬步*无以至千里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.FreeRTOS不同任务调用同一个函数相关的知识,希望对你有一定的参考价值。

1.函数如下

 

 2、测试结果如下:

 

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

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

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

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

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

 

 

 

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

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

 

 

 

以上是关于1.FreeRTOS不同任务调用同一个函数的主要内容,如果未能解决你的问题,请参考以下文章

FreeRTOS——任务管理

FreeRTOS Posix原理

不可重入和可重入函数概述使用信号避免僵尸进程

调用释放已存储值的 char 指针时,free() 函数失败

围绕函数调用 std::thread() 的工作方式不同

free rtos 任务切换的理解