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

📄 dmaidetest.c

📁 ks8695的ide硬盘程序
💻 C
字号:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <asm/ioctl.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include "config.h"
#include "nwAtaDrv.h"
#include "pciConfigLib.h"
/*#include "pciIntLib.h"*/
#include "ks8695p.h"
#include "../Vxworks2Linux/Vxworks2Linux.h"

#define FILESIZE (1024*1024*32)
#define IDEBUFSIZE (1024*8)

/*#undef IDE_DATA_VALIDATE */
#define IDE_DATA_VALIDATE
/*
#undef IDE_READ_TESTING
#undef IDE_WRITE_TESTING

*/
#define IDE_READ_TESTING
#define IDE_WRITE_TESTING


unsigned int g_StartBlk = 1024;

void main(void)
{
	int cycleTimes =0;
	/*unsigned char *pTempData=NULL;
	unsigned char *pRWBuf=NULL;*/
	unsigned char pTempData[IDEBUFSIZE];
	unsigned char pRWBuf[IDEBUFSIZE];
	unsigned int i = 0;
	unsigned int startBlk = 1024;
	unsigned int error = 0;
	int wCount = 0;
	int eCount = 0;
	int iError;
	int ideStatus =0;
	unsigned int OldTicks;
	unsigned int NewTIcks;
	unsigned int DIskCap=0;
	int DiskNum;
	int DiskRile=0;
	ATA_APP_DISK_INFO AtaInfo;
	int TestCount;
  
  /*pci_init();*/
  printf("ide start\n");
  if(ata_app_Scandisk()!=OK)
  {
    printf("PCI-ATA No Found DIsk.\n");
    return;
  }
  printf("ide start1\n");
  /*pTempData = (unsigned char *)malloc(IDEBUFSIZE);
  pRWBuf = (unsigned char *)malloc(IDEBUFSIZE);*/
  if((!pTempData) || (!pRWBuf))
  {
    printf("malloc memory Error.\n");
    return;
  }
  for(i=0;i<IDEBUFSIZE;i++)
  {
    pTempData[i] = (i&0xff);
  }
  memset(pRWBuf,0,IDEBUFSIZE);

  DiskNum = ata_app_GetDiskDev();
  printf("Disk Number is %d\n",DiskNum);
  if(DiskNum == 0)
    return;
	while(1)
	{
          DiskRile = 0;
	  for(;;)
	  {
	    printf("Start Disk is %d\n",DiskRile);
            if(DiskRile > 1)
               break;     
	  if (g_StartBlk > 200121728)
		{
			  g_StartBlk = 1024;
		}
#ifdef IDE_READ_TESTING 
  printf("\nStarting IDE_READ_TESTING test...\n\n");
    sysClkRateSet(100);
	  for(i=0;i<1000;i++);
	  startBlk = g_StartBlk;
	  ata_app_rw(0,0, g_StartBlk, IDEBUFSIZE/512, pTempData, O_WRONLY);
	  /*读32M数据,测试其读数据的效率,总共测试5次*/
	  for(TestCount = 0;TestCount<5;TestCount++)
	  {
	    eCount=0;
	    wCount = FILESIZE/IDEBUFSIZE;
	    OldTicks = tickGet();
	    for(i=0;i<wCount;i++)
	    {
	      error = ata_app_rw(0,DiskRile, g_StartBlk, IDEBUFSIZE/512, pRWBuf, O_RDONLY);
	      if (error != OK)
	        eCount++;
	      g_StartBlk+=(IDEBUFSIZE/512);
	      if (g_StartBlk > 200121728)
		    {
			    g_StartBlk = 1024;
		    }
	    }
	    NewTIcks = tickGet();
	    printf("Ide Read Rate is: %d Kbyte/s \n",  ((FILESIZE/(NewTIcks - OldTicks))*100)/1024);
	    printf("Read Error Count is %d\n",eCount);
	  }
#endif

#ifdef IDE_WRITE_TESTING 
  printf("\nStarting IDE_WRITE_TESTING test...\n\n");
    sysClkRateSet(100);
	  for(i=0;i<1000;i++);
	  /*读32M数据,测试其读数据的效率,总共测试5次*/
	  for(TestCount = 0;TestCount<5;TestCount++)
	  {
	    eCount=0;
	    wCount = FILESIZE/IDEBUFSIZE;
	    OldTicks = tickGet();
	    for(i=0;i<wCount;i++)
	    {
	      error = ata_app_rw(0,DiskRile, g_StartBlk, IDEBUFSIZE/512, pTempData, O_WRONLY);
	      if (error != OK)
	        eCount++;
	      g_StartBlk+=(IDEBUFSIZE/512);
	      if (g_StartBlk > 200121728)
		    {
			    g_StartBlk = 1024;
	    	}  
	    }
	    NewTIcks = tickGet();
	    printf("Ide Write Rate is: %d KByte/s \n",  ((FILESIZE/(NewTIcks - OldTicks))*100)/1024);
	    printf("Read Error Count is %d\n",eCount);
	  }
#endif

#ifdef IDE_DATA_VALIDATE
  printf("\nStart IDE_DATA_VALIDATE test...\n\n");
  for(i=0;i<IDEBUFSIZE;i++)
  {
    pTempData[i] = (i&0xff);
  }
  eCount = 0;
  for(TestCount = 0;TestCount < 1000;TestCount++)
  {
  	error = ata_app_rw(0,DiskRile, g_StartBlk, IDEBUFSIZE/512, pTempData, O_WRONLY);
		if (error != OK)
		{
			printf("--IDE write error\n");
		}
		memset(pRWBuf,0,IDEBUFSIZE);
	  error = ata_app_rw(0,DiskRile, g_StartBlk, IDEBUFSIZE/512, pRWBuf, O_RDONLY);
	  if (error != OK)
	  {
	    printf("--IDE read error!\n");
	  }
	  iError = 0;
	  for (i=0; i<IDEBUFSIZE; i++)
	  {
		  if (pTempData[i]!= pRWBuf[i])
		    {
          printf("Serial = %d TempData = 0x%x ; RWBuf = 0x%x\n",i,pTempData[i],pRWBuf[i]);
		    	iError++;
		    }
	    }
		if (iError > 0)
		{
		  eCount++;
		  printf("--Identify error %d\n", iError);
		}
		g_StartBlk += IDEBUFSIZE/512;
    if (g_StartBlk > 200121728)
		{
			  g_StartBlk = 1024;
		}
		taskDelay(1);
	}
	printf("IDE_DATA_VALIDATE Test Result: %d/1000.\n",eCount);
	
#endif
     DiskRile++;
  }
}
}




⌨️ 快捷键说明

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