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

📄 memtest.c

📁 detailed memory test for embedded systems, checks for shorted address/data lines too
💻 C
字号:
/**@file memset.c ************************************************************************************ *	Name	: memtest.c																* *	Purpose	: Library for testing memory											* *																					* *	Author	: Vijay Vikrant Balyan													* ************************************************************************************//** Includes */#include<stdio.h>#include<stdlib.h>/** Defines */#define PAT_PLAIN	0	/* Fixed pattern all across the memory*/#define PAT_INCR	1	/* incremental pattern - helps to catch address bus shorts */#define PAT_XOR		2	/* helps to detect the horizontally and vertically shorted lines *//* checker board   0xAAAAAAAA, 0x55555555,   0xAAAAAAAA, 0x55555555,   0xAAAAAAAA, 0x55555555,   0xAAAAAAAA, 0x55555555, *//* inverted checker board    0x55555555, 0xAAAAAAAA,   0x55555555, 0xAAAAAAAA,   0x55555555, 0xAAAAAAAA,   0x55555555, 0xAAAAAAAA, *///#define MEM_SIZE	(16 * 1024 * 1024)#define MEM_SIZE	(64)/** Function prototypes */int memtest_trigger();int memtest_fill(unsigned int *p, unsigned int pat, unsigned int flag, unsigned int size);int memtest_verify(unsigned int *p, unsigned int pat, unsigned int flag, unsigned int size);/* Functions */int main(){		memtest_trigger();		return 0;}unsigned char * memtest_flag_return(unsigned int flag){		switch (flag)		{				case PAT_PLAIN:						return "PAT_PLAIN";				case PAT_INCR:						return "PAT_INCR";				case PAT_XOR:						return "PAT_XOR";		}		return "NULL";}int printmem(unsigned int *p, int size){	/* prints all the buffer, delimited by the size specified */	int i,j;	for (i = 0; i < (size >> 4) ; i++)	{		printf("\r\n");		for (j = 0; j < 8; j++)			printf ("%08X ", p[(i * 8) + j]);	}		printf("\r\n");return 0;}int memtest_trigger(){		unsigned int *p;		unsigned int pat, flag, i;		typedef struct		{				unsigned char *name;				unsigned int pat;				unsigned int flag;		}param_t;		param_t param[6] = {				{"ALL_ZERO", 0x00000000, PAT_PLAIN}, {"ALL_F", 0xFFFFFFFF, PAT_PLAIN},				{"ALL_FIVE", 0x55555555, PAT_PLAIN}, {"ALL_A", 0xAAAAAAAA, PAT_PLAIN},				{"Checker Board", 0xAAAAAAAA, PAT_XOR},				{"Linear Increment", 0x00000000, PAT_INCR}		};		p = malloc (sizeof(unsigned int) * MEM_SIZE);		for (i = 0; i < (sizeof(param)/sizeof(param_t)); i++)		{				printf("pattern [%16s] flag [%9s]  ", param[i].name , memtest_flag_return(param[i].flag));				pat = param[i].pat;				flag = param[i].flag;				printf("Filling ... ");				memtest_fill(p, pat, flag, MEM_SIZE);				printf("Verifying ... ");				memtest_verify(p, pat, flag, MEM_SIZE);		}		return 0;}int memtest_fill(unsigned int *p, unsigned int pat, unsigned int flag, unsigned int size){		int i;		for (i = 0; i < size; i ++)		{				if (flag == PAT_PLAIN)				{						p[i] = pat;				}				else if (flag == PAT_INCR)				{						p[i] = pat++;				}				else if (flag == PAT_XOR)				{						if (i%2 == 0)								p[i] = pat;						else								p[i] = ~pat;				}		}		return 0;}int memtest_verify(unsigned int *p, unsigned int pat, unsigned int flag, unsigned int size){		int i, error = 0;		for (i = 0; i < size; i++)		{				if (flag == PAT_PLAIN)				{						if (p[i] != pat)						{								printf("MEMORY ERROR DETCETED \r\n");								error = 1;						}				}				else if(flag == PAT_INCR)				{						if (p[i] != pat++)						{								printf("MEMORY ERROR DETCETED \r\n");								error = 1;						}				}				else if (flag == PAT_XOR)				{						if (i%2 == 0)						{								if (p[i] != pat)								{										printf("MEMORY ERROR DETCETED \r\n");										error = 1;								}						}						else						{								if (p[i] != (~pat))								{										printf("MEMORY ERROR DETCETED \r\n");										error = 1;								}						}				}		}		if (!error)				printf("mem ok\r\n");		return 0;}

⌨️ 快捷键说明

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