//===========================================================================
//文件名称：task_read.c
//功能概要：定义task_read任务
//版权所有：苏州大学飞思卡尔嵌入式中心(sumcu.suda.edu.cn)
//===========================================================================
#include "app_inc.h"

//===========================================================================
//函数名称：task_read
//参数说明：无意义
//函数返回：无
//功能概要：打开信号量的连接，等待sem.read，sem.index信号量，读完之后，释放sem.write信号量
//===========================================================================                
void task_read(uint_32 initial_data) 
{
	pointer SEM_WRITE_ptr;
	pointer SEM_READ_ptr;
	pointer SEM_INDEX_ptr;
	//打开和信号量的连接
	_sem_open("SEM_WRITE", &SEM_WRITE_ptr);
	_sem_open("SEM_INDEX", &SEM_INDEX_ptr);
	_sem_open("SEM_READ", &SEM_READ_ptr);
	while (TRUE ) 
	{
		//等待读信号量
		printf("\nReading data...");
		_sem_wait(SEM_READ_ptr, 0);
		//等待共享区访问信号量
		_sem_wait(SEM_INDEX_ptr, 0);
		printf("\n Data %d:0x%lx", fifo.READ_INDEX, fifo.DATA[fifo.READ_INDEX]);
		fifo.READ_INDEX++;
		if (fifo.READ_INDEX >= ARRAY_SIZE)
		{
			fifo.READ_INDEX = 0;
		}
		//释放共享区访问信号量
		_sem_post(SEM_INDEX_ptr);
		//释放写信号量
		_sem_post(SEM_WRITE_ptr);
		_time_delay(1000);
	}
}

