ucos_ii 生产者消费者问题

本文介绍了一种使用uC/OS-II实时操作系统实现的生产者消费者模型,详细阐述了如何通过信号量、任务创建和同步操作来协调生产者和消费者的交互,确保资源的高效利用和数据的正确传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <includes.h>

#define  TASK_STK_SIZE    128

OS_STK        AppStk_Producer[TASK_STK_SIZE];
OS_STK        AppStk_Consumer[TASK_STK_SIZE];

static void App_Producer(void *p_arg);
static void App_Consumer(void *p_arg);

OS_EVENT *sem_full;
OS_EVENT *sem_empty;
OS_EVENT *sem_mutex;

static INT32U food = 0;

void main(int argc, char *argv[])
{
    OSInit();                              /* Initialize "uC/OS-II"*/

	sem_full  = OSSemCreate(0);
	sem_empty = OSSemCreate(100);
	sem_mutex =	OSSemCreate(1);

	OSTaskCreate(App_Producer,NULL,(OS_STK *)&AppStk_Producer[TASK_STK_SIZE-1],(INT8U)10);
	OSTaskCreate(App_Consumer,NULL,(OS_STK *)&AppStk_Consumer[TASK_STK_SIZE-1],(INT8U)11);
	

    OSStart();                             /* Start multitasking */
}


void App_Producer(void *p_arg)
{
	INT8U err;

	p_arg = p_arg;

    while (TRUE)                            
	{   
		OSSemPend(sem_empty, 0, &err);
		OSSemPend(sem_mutex, 0, &err);
		food++;
		printf("生产者: 食物数量[%03d]\n", food);
		OSSemPost(sem_mutex);
		OSSemPost(sem_full);

        OSTimeDlyHMSM(0, 0, 1, 0); 
    }
}

void App_Consumer(void *p_arg)
{
	INT8U err;

	p_arg = p_arg;
	
    while (TRUE)                            
	{   
		OSSemPend(sem_full, 0, &err);
		OSSemPend(sem_mutex, 0, &err);
		food--; 
		printf("消费者: 食物数量[%03d]\n", food);
		OSSemPost(sem_mutex);
		OSSemPost(sem_empty);
        
		OSTimeDlyHMSM(0, 0, 3, 0); 
    }
}
 

运行结果:



工程源码:

http://download.csdn.net/detail/dl0914791011/6581491

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值