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

📄 seriatest.c

📁 z85c30 DRIVER RUN ON PC104 PC AND VXWORKS SYSTERM.
💻 C
字号:
/********************
 two task--send task/receivetask
*********************/

#include "vxWorks.h"
#include "stdio.h"
#include "taskLib.h"
#include "ioLib.h"


#define MaxStackSize 20000
#define PrioritySend 200
#define PriorityRecv 201

int SendTaskId;
int RecvTaskId;

/******************
ttyDrv()--初始化,sysSerialChanGet()--得到管理串口的结构体指针,
ttyDevCreate()--创建逻辑设备,open()--打开串口,ioctl()--设波特率等,
write()--写串口,read()--读串口,close()--关串口
ttyDrv-->sysSerialChanGet-->ttyDevCreate-->open-->ioctl
-->write/read-->close是串口操作的顺序流程。
*******************/

int portfd[6]={-1,-1,-1,-1,-1,-1};
int debugnum=0;
int debugrs=0;
int portnum=6;
int Serialtest_run=0;




void tty_open()
{
	int ifor1=0;
	char str[20]={0,0,0,0,0,0,0,0,0,0,0,};
	for(ifor1=0;ifor1<portnum;ifor1++)
	{
		sprintf(str,"/tyCo/%d",ifor1);
		printf("devname= %s ",str);
		portfd[ifor1]=open(str,O_RDWR,0);
		if(portfd[ifor1]==ERROR)
		{
			printf("error!\n");
			continue;
		}
		printf("fd=%x\n",portfd[ifor1]);
		ioctl(portfd[ifor1],FIOBAUDRATE,9600);
	}
}

void tty_close()
{
	int ifor1=0;
	for(ifor1=0;ifor1<portnum;ifor1++)
	{
		close(portfd[ifor1]);
	}	
}

void tty_send(void)
{
	
	int f;
	char *buf="serial test 01234567890012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890 ok!\n";
	unsigned char rbuf[100];
	char str[20]={0,0,0,0,0,0,0,0,0,0,0,};
	int ifor1=0,ifor2=0;
	int byteNum;

	
    while(Serialtest_run)
	{	
		taskDelay(10);
		for(ifor1=0;ifor1<portnum;ifor1++)
		{
			
			if(portfd[ifor1]==ERROR)continue;
			
			ioctl(portfd[ifor1],FIONWRITE,(int)&byteNum);
			if(byteNum<=10)
			{
			if((debugnum==ifor1)&&(debugrs==1))
			printf("%s\n",buf);
			f=write(portfd[ifor1],buf,strlen(buf));
			}
		}
	}


}

void tty_receive(void)
{

	int f;
	unsigned char rbuf[200];
	int ifor1=0,ifor2=0;
	int byteNum;

    while(Serialtest_run)
	{	
		for(ifor1=0;ifor1<portnum;ifor1++)
		{
			
			if(portfd[ifor1]==ERROR)continue;
			
			ioctl(portfd[ifor1],FIONREAD,(int)&byteNum);
			if(byteNum>0)
			{
				f=read(portfd[ifor1],rbuf,200);
				if(f>0)
				{
					if((debugnum==ifor1)&&(debugrs==0))
					{
						for(ifor2=0;ifor2<f;ifor2++)
							printf("%c",rbuf[ifor2]);
						printf("\n");
					}
				}
			}
		}

		taskDelay(5);
	/*	f=read(portfd[2],rbuf,100);
		rbuf[f]=0;
		printf("port%d receive data len=%d is->%s\n",2,f,rbuf);*/
	}
}

STATUS SerialStart(int num)
{

	portnum=num;
	tty_open();
	Serialtest_run=1;
	
	if((SendTaskId=taskSpawn("Tsend",PrioritySend,0,MaxStackSize,(FUNCPTR)tty_send,0,0,0,0,0,0,0,0,0,0))==ERROR)
	{
		printf("send task cannot be create.");
		return ERROR;
	}
     

	if((RecvTaskId=taskSpawn("Trecv",PriorityRecv,0,MaxStackSize,(FUNCPTR)tty_receive,0,0,0,0,0,0,0,0,0,0))==ERROR)
	{
		printf("receive task cannot be create.");
		return ERROR;
	}

	/*FOREVER
	{
		taskDelay(60);
	}*/

	return OK;
} 

STATUS SerialStop(void)
{
	Serialtest_run=0;
	tty_close();
	portfd[0]=-1;
	portfd[1]=-1;
	portfd[2]=-1;
	portfd[3]=-1;
	portfd[4]=-1;
	portfd[5]=-1;
}

⌨️ 快捷键说明

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