25.3 任务信号量实验
25.3.1 任务信号量代替二值信号量
任务通知代替消息队列是在 UCOS 中创建了两个任务,其中一个任务是用于接收任务
信号量,另一个任务发送任务信号量。两个任务独立运行,发送任务信号量的任务是通过
检测按键的按下情况发送,等待任务在任务信号量中没有可用的信号量之前就一直等待,
获取到信号量以后就继续执行,这样子是为了代替二值信号量,任务同步成功则继续执行,
然后在串口调试助手里将运行信息打印出来,具体见代码清单 25-6 加粗部分。
代码清单 25-6 任务通知代替二值信号量
1 #include
2
3
4 static OS_TCB AppTaskStartTCB; //任务控制块
5
6 static OS_TCB AppTaskPostTCB;
7 static OS_TCB AppTaskPendTCB;
8
9
10
11
12 static CPU_STK AppTaskStartStk[APP_TASK_START_STK_SIZE]; //任务堆栈
13
14 static CPU_STK AppTaskPostStk [ APP_TASK_POST_STK_SIZE ];
15 static CPU_STK AppTaskPendStk [ APP_TASK_PEND_STK_SIZE ];
16
17
18
19
20 static void AppTaskStart (void *p_arg); //任务函数声明
21
22 static void AppTaskPost ( void * p_arg );
23 static void AppTaskPend ( void * p_arg );
24
25
26
27 int main (void)
28 {
29 OS_ERR err;
30
31
32 OSInit(&err);
//初始化
33 uC/OS-III
34
35 /* 创建起始任务 */
36 OSTaskCreate((OS_TCB *)&AppTaskStartTCB,
37 //任务控制块地址
38 (CPU_CHAR *)"App Task Start",
39 //任务名称
40 (OS_TASK_PTR ) AppTaskStart,
41 //任务函数
42 (void *) 0,
43 //传递给任务函数(形参 p_arg)的实参
44 (OS_PRIO ) APP_TASK_START_PRIO,
1