RTOS调度锁
调度锁是什么?
一种锁,上锁之后使得当前任务一直运行,不能进行任务切换,解锁后才能切换任务。
代码实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
uint8_t schedLockCount = 0;
void schedLockInit(void){
schedLockCount = 0;
}
void lockSched(void) {
uint32_t st = enterCritical();
if (schedLockCount < 255) schedLockCount++;
leaveCritical(st);
}
void unlockSched(void) {
uint32_t st = enterCritical();
if (schedLockCount > 0) {
if (--schedLockCount == 0) {
taskSched();
}
}
leaveCritical(st);
}
void taskSched(void) {
......
uint32_t st = enterCritical();
if (schedLockCount > 0) {
leaveCritical(st);
return;
}
......
}
本文由作者按照 CC BY 4.0 进行授权