?? seriatest.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 + -