欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

memtst.c

mips架构的bootloader,99左右的版本 但源代码现在没人更新了
C
字号:
/************************************************************* * File: imon/memtst.c * Purpose: Part of the Ice Monitor * Author: Phil Bunce (pjb@carmel.com) * Revision History: *	970304	Start of revision history *	970318	Updated and added FASTMODE switch. *	980811	Don't use sizemem() if MEMSIZE is defined. */#include <pmon.h>#define FASTMODE	/* don't use read_target and write_target */Optdesc mt_opts[] = {	{"[-c][adr [siz]]","memory test"},	{"-c","continuous test"},	{0}};#ifdef TEST #define memtst mainint tikcnt;dotik(a,b) {tikcnt--;if (tikcnt > 0) return;tikcnt = 256000;printf(".");}long memorysize = 8*1024*1024;get_rsa(sp,p)long *sp;char *p;{sscanf(p,"%x",sp);return(1);}#endif/**************************************************************  memtst(ac,av)*	The 'mt' memory test command */memtst(ac,av)int ac;char *av[];{int i,j,cnt,cflag,err;unsigned long adr,siz,eadr;cflag = 0; cnt = 0;adr = CLIENTPC|K1BASE;siz = 0;for (i=1;i<ac;i++) {	if (av[i][0] == '-') {		for (j=1;av[i][j];j++) {			if (av[i][j] == 'c') cflag = 1;			else printf("%c: bad option\n");			}		}	else {		switch (cnt) {			case 0 : 				if (!get_rsa(&adr,av[i])) return; 				cnt++;				break;			case 1 :				if (!get_rsa(&siz,av[i])) return;				cnt++;				break;			default :				printf("%s: Unknown argument\n",av[i]);			}		}	}/* make sure the address is word aligned */adr = adr & ~0x3;#ifdef MEMSIZE /* 980811 */if (!siz) siz = MEMSIZE;#elseif (!siz) siz = sizemem(adr);printf("%d bytes found at %08x\n",siz,adr);#endifsiz &= ~0x3;	/* make sure it's an exact number of words */if (cnt == 0) {	eadr = adr+siz;	eadr &= ~(siz-1);	siz = eadr - adr;	}ioctl_cbreak(STDIN);printf("Testing %08x to %08x %s\n",adr,adr+siz,(cflag)?"continuous":"");printf("Memory test running..  ");if (cflag) while(! (err=domt(adr,siz))) ;else err = domt(adr,siz);if (err) printf("\b\nThere were %d errors.\n",err);else printf("\b\nTest passed with no errors.\n");}/**************************************************************  domt(adr,siz)*	This is not an exhaustive memory test. The intent is to provide*	a test that completes within a reasonable time, that checks that*	none of the address or data lines are stuck or shorted together.*/domt(adr,siz)unsigned int *adr;int siz;{int i,j,err,temp;unsigned int w,r;volatile unsigned int *p;err = 0;/* walking ones test */for (p=adr,i=0;i<siz;i+=4,p++) {	w = 1;	for (j=0;j<32;j++) {#ifdef FASTMODE		*p = w;		temp = 0;		r = *p;#else		write_target(XT_MEM,p,w,4);		temp = 0;		r = read_target(XT_MEM,p,4);#endif		if (r != w) {			err++;			printf("\b\nerror: addr=%08x read=%08x expected=%08x  ",				p,r,w);			}		w <<= 1;		dotik(1,0);		}	}/* store the address in each address */for (p=adr,i=0;i<siz;i+=4,p++) {#ifdef FASTMODE	*p = (unsigned int)p;#else	write_target(XT_MEM,p,p,4);#endif	dotik(1,0);	}/* check that each address contains its address */for (p=adr,i=0;i<siz;i+=4,p++) {#ifdef FASTMODE	r = *p;#else	r = read_target(XT_MEM,p,4);#endif	if (r != (unsigned int)p) {		err++;		printf("\b\nerror: adr=%08x read=%08x expected=%08x  ",p,r,p);		}	dotik(1,0);	}return(err);}

⌨️ 快捷键说明

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