码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-04-02 15:51:27      阅读:321      评论:0      收藏:0      [点我收藏+]

标签:怎么   其他   task   静态变量   delay   调度   空间   nbsp   info   

1.函数如下

技术图片

 

 2、测试结果如下:

技术图片

 

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

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

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

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

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

技术图片

 

 

技术图片

 

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

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

技术图片

 

 

技术图片

 

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

标签:怎么   其他   task   静态变量   delay   调度   空间   nbsp   info   

原文地址:https://www.cnblogs.com/ycpkbql/p/12620060.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!