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

📄 c03a_task.c

📁 Tornado的源代码资源包
💻 C
字号:
#include "vxWorks.h"
#include "stdio.h"
#include "stdlib.h"
#include "semLib.h"
#include "taskLib.h"
#include "sysLib.h"

/* 宏定义 */
#define STACK_SIZE  2000 /* 任务堆栈大小为2000bytes */

/* 全局变量 */
SEM_ID dataSemId;        /* 同步信号量 */
int    tidSend;          /* Send Task任务id */
int    tidReceive;       /* Receive Task任务id */

/* 函数声明 */
void   progStart(void);
void   taskSend(void);
void   taskReceive(void);
void   SendInit(void);
void   ReceiveInit(void);
void   progStop(void);

/******************************************************************
* progStart - start程序
* 负责创建Send Task和Receive Task,并开始运行
* RETURNS: N/A
*/
void progStart(void)
{
/* 创建信号量 */
dataSemId  = semBCreate(SEM_Q_FIFO, SEM_EMPTY);

/* 创建任务 */
tidSend    = taskSpawn ("tSend", 200, 0, STACK_SIZE,
                              (FUNCPTR)taskSend,
                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
tidReceive = taskSpawn ("tReceive", 220, 0, STACK_SIZE,
                              (FUNCPTR)taskReceive, 
                              0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

return;
}

/******************************************************************
* taskSend - 发送数据任务
* 每两秒钟释放一次信号量dataSemId,用来模拟收到数据
*/
void taskSend(void)
{
/* Send Task的初始化 */
SendInit();

/* 主循环 */
while(1)
{
/* 任务延时两秒 */
taskDelay(sysClkRateGet() * 2);
/* 释放信号量用来表示收到数据 */
semGive(dataSemId);
}

return;
}

/******************************************************************
* taskReceive - 接收数据任务
* 等待信号量dataSemId,用来判断是否收到数据
*/
void taskReceive(void)
{
/* Receive Task的初始化 */
ReceiveInit();

/* 主循环 */
while(1)
{
/* 等待信号量(收数据) */
semTake(dataSemId, WAIT_FOREVER);
printf("\nReceive a data");
}

return;
}

/******************************************************************
* SendInit - 初始化Send Task
* 初始化Send Task。
*/
void SendInit(void)
{
/* 初始化代码 */
printf("\nInitial Send Task");
return;
}

/******************************************************************
* ReceiveInit - 初始化Receive Task
* 初始化Receive Task。
*/
void ReceiveInit(void)
{
/* 初始化代码 */
printf("\nInitial Receive Task");
return;
}

/******************************************************************
* progStop - 终止程序运行
* 删除信号量,删除所以任务,终止程序运行。
*/
void progStop(void)
{
/* 删除信号量 */
semDelete(dataSemId);

/* 删除所有信号量 */
taskDelete(tidSend);
taskDelete(tidReceive);

printf("The End\n");

return;
}

⌨️ 快捷键说明

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