1.函數如下
2、測試結果如下:
這個函數在兩個不同優先級里面調用,可以得出兩個實驗結論:
a.即使沒有vtaskdelay或者其他信號量獲取阻塞存在,依然會發生調度,操作系統美一個系統節拍調度一次(我的節拍周期是1ms)。
b.函數cnt計數是靜態變量,任務再次回來已經不是原來的值了,因此函數里面如果存在靜態變量或者全局變量並且不希望被擅自被其他任務臨時切換改變了,則需要加互斥信號量,如果不在乎全局變量的值,那可以不加互斥量。在帶os的系統中,存在靜態變量和全局變量的函數稱為不可重入函數。
3.如果cnt是局部非靜態變量會怎么么樣呢?測試結果如下:
可以看出局部變量並不會累加,這個局部變量占用了各自任務的棧,在每個任務的棧空間里都有自己的位置,每個任務就相當於一個小小的mcu,有棧空間保存自己的局部變量值。
4.如果函數帶傳入指針呢?測試結果如下:
可以看出指針的值並不會被打亂,但依然會發生調度