示例代码:
#include <includes.h>
#define TEST_SEM_EN 0 //test switch, 0: off 1:on
#define TASK_STK_SIZE 128
OS_STK Task01Stk[TASK_STK_SIZE];
OS_STK Task02Stk[TASK_STK_SIZE];
static OS_EVENT *sem_p;
static OS_EVENT *sem_v;
static void task_01(void *p_arg);
static void task_02(void *p_arg);
void main(int argc, char *argv[])
{
OSInit();
//create P V semaphore
sem_p = OSSemCreate(1);
sem_v = OSSemCreate(1);
OSTaskCreate(task_01, NULL, (OS_STK *)&Task01Stk[TASK_STK_SIZE-1], (INT8U)10);
OSTaskCreate(task_02, NULL, (OS_STK *)&Task02Stk[TASK_STK_SIZE-1], (INT8U)11);
OSStart();
}
void task_01(void *p_arg)
{
INT8U err;
p_arg = p_arg;
while (TRUE)
{
#if TEST_SEM_EN
OSSemPend(sem_p, 0, &err);
#endif
OS_Printf("A");
OSTimeDlyHMSM(0, 0, 1, 0);
#if TEST_SEM_EN
OSSemPost(sem_v);
#endif
}
}
void task_02(void *p_arg)
{
INT8U err;
p_arg = p_arg;
while (TRUE)
{
#if TEST_SEM_EN
OSSemPend(sem_v, 0, &err);
#endif
OS_Printf("B");
OSTimeDlyHMSM(0, 0, 3, 0);
#if TEST_SEM_EN
OSSemPost(sem_p);
#endif
}
}
不使用信号量运行的结果(将宏TEST_SEM_EN设置为0)
进程同步,使用信号量控制,运行结果(将宏TEST_SEM_EN设置为1)