UCOS_II学习笔记---信号量管理之信号量的使用-进程(任务)同步

示例代码:

#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)

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值