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

📄 mainus.cpp

📁 基于XILINX的内嵌POWERPC的处理器的串行通讯的应用源代码.
💻 CPP
字号:
//---------------------------------------------------------------------------#include <stdio.h>#include <string.h>#include <conio.h>#include <windows.h>#include "main.h"#include "Thread.h"#pragma hdrstop//---------------------------------------------------------------------------#pragma argsused#define BUFLENGTH 500	// Size of the cyclic buffer for emit/receive checkingThread_Com *Thread_Com1;char Buf[BUFLENGTH];int BufTop, BufBot;bool CompErr;int main(int argc, char* argv[]){	int n, i;   int ComN;   unsigned int BaudRate;   long unsigned ncEmit;   char str[80];   HANDLE hConsole;   COORD c1;   DWORD dw1;   hConsole =  GetStdHandle (STD_OUTPUT_HANDLE);   if (argc > 3)   {   	printf ("Too many arguments on the command line.\n");      return 0;	}   if (argc == 0)printf ("Err 0.\n");   if (argc == 1)   {      printf("RS232 serial line tester\n");      printf("By Philippe Carton the 8/01/2002 (pc@microsystemes.com)\n");      printf("This program give a way to test the reliability of a closed-loop serial line\n");      printf("It emit a continuous random byte stream, and check that it receive exacly what\n");      printf("has been sent. The serial line, or the connected equipment must work in CLOSED-\n");      printf("LOOP, that is to say TxD and RxD tied.\n");      printf("Syntax:\n");      printf("TESTCOM port baudrate\n");      printf("\tport = com port number\n");      printf("\tFile2 = baudrate (9600, 19200 ...)\n");      return 0;   }   // Parse for the com port	n = sscanf (argv[1], "%d", &ComN);   if (n == 0 || ComN < 1 || ComN > 4)   {   	printf ("invalid com port (1 to 4).\n");      return 0;	}   // Parse for the baudrate   BaudRate = 9600; 	// default   if (argc == 3)   {		n = sscanf (argv[2], "%d", &BaudRate);		if (n == 0 || BaudRate < 110 || BaudRate > 921600)	   {	   	printf ("Invalid baudrate. (110 to 921600)\n");	      return 0;		}   }   // Launch process   printf ("Com=%d  Baudrate=%d\n", ComN, BaudRate);   printf ("--Test running, Ctrl-C to stop--\n");   // Open the thread communication thread   Thread_Com1 = new Thread_Com(true, ComN, BaudRate);   if (Thread_Com1->dwLastErr)   {   	printf ("%s\n", Thread_Com1->sLastErr);      exit (0);   }   // Ctrl-C Handler   SetConsoleCtrlHandler (CtrlHandler, true);   // Continuous random byte emit   BufTop = 0;   BufBot = 0;   CompErr = false;   ncEmit = 0;	while (1)   {   	// Test that cycling buf don't overflow      if (BufTop + 1 == BufBot || (BufBot == 0 && BufTop == sizeof(Buf)-1))      {      	// Buf is full         printf ("Test Buffer is full.\n");         if (ncEmit == BUFLENGTH-1)         	printf ("No byte has been received. The closed-loop fail.\n");         else  	         printf ("This mean that the OS is too slow compared to the specified baudrate.\n");			break;      }      Buf[BufTop] = random(256);		Thread_Com1->WriteToComPort(Buf[BufTop]);	   if (Thread_Com1->dwLastErr)	   {	   	printf ("%s\n", Thread_Com1->sLastErr);	      break;	   }		BufTop++; if (BufTop >= sizeof(Buf))BufTop = 0;      // Display the char count every 100 loop      ncEmit ++;      if (BufTop == 0)      {         sprintf (str, "car emis = %lu", ncEmit);         c1.X = 4; c1.Y = wherey()-1;			WriteConsoleOutputCharacter(hConsole, str, strlen(str), c1, &dw1);      }      // In case of error detected between Transmit-Receive      if (CompErr == true)      {        	printf ("Mismatch observed between emit/received char.\n");         printf ("Last emitted char = \n\t");         for (i = 0; i < 10; i++)         {         	printf ("%x ", (unsigned char)Buf[BufTop]);            BufTop --; if (BufTop < 0)BufTop = sizeof(Buf);         }         printf ("\n");      	break;      }   }   // Close the communication thread   Thread_Com1->Terminate();   Thread_Com1->WaitFor();   delete Thread_Com1;   return 0;}BOOL WINAPI CtrlHandler(DWORD dwCtrlType){  	printf ("Serial line succesfully tested.\n");   return 0;}void ReceiveCallBack(char *c){	if (*c != Buf[BufBot])   {   	CompErr = true;   }	BufBot++; if (BufBot >= sizeof(Buf))BufBot = 0;}

⌨️ 快捷键说明

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