⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 semc.c

📁 在TORNADO下写的基于VXWORKS的多信号量通信的源代码
💻 C
字号:
#include "vxWorks.h"
#include "semLib.h"

SEM_ID semC_id;

/*
	SEM_Q_FIFO (0x0)
	SEM_Q_PRIORITY (0x1)
	SEM_DELETE_SAFE (0x4) 
	SEM_INVERSION_SAFE (0x8)
	SEM_EVENTSEND_ERR_NOTIFY (0x10)
*/

#define COUNT_NUM 5
int nCount = COUNT_NUM;

void semCTask(SEM_ID semId)
{
	FOREVER
	{
		printf("[%s] task is waiting for a COUNT semaphore... -- count = %d \n",taskName(0),nCount);
		if(semTake(semId,WAIT_FOREVER)==ERROR)
        {
            printErr("semTake failed\n");
        }
        else
		{
			nCount--;
			printf("[%s] task TAKEs a semaphore!!! Doing SOMETHING...\n",taskName(0));
			taskDelay(300);
			printf("[%s] ============>>> Done!!! \n\n",taskName(0));
		}
	}
}


void testC()
{
	semC_id = semCCreate(SEM_Q_PRIORITY, COUNT_NUM);

	printf("========== Counting semphore created!\n");
	printf("semC_id = 0x%8x \n",semC_id);

	nCount = COUNT_NUM;

	taskSpawn("semCTask1",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
	taskSpawn("semCTask2",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
	taskSpawn("semCTask3",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
	taskSpawn("semCTask4",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
	taskSpawn("semCTask5",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
	taskSpawn("semCTask6",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
	taskSpawn("semCTask7",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
	taskSpawn("semCTask8",100,0,1000,semCTask,semC_id,2,3,4,5,6,7,8,9,0);
}

void giveC()
{
	semGive(semC_id);
	nCount++;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -