📄 memtest1.c
字号:
/*--------------------------------------------------------*/
/* WQ21ST SOFTWARE STUDIO. */
/*--------------------------------------------------------*/
/* Data space memory test */
/*--------------------------------------------------------*/
/* */
/* filename: memtest1.c */
/* original: 08/12/2001 by: WQ */
/* last update: 08/18/2001 by: WQ */
/*--------------------------------------------------------*/
#include "prot2407.h"
#define DATA_START_ADDR 0x8500 /* must be greater than "end" */
/* in test.map - near etext */
#define DATA_END_ADDR 0xf3ff /* each memory bank/test */
unsigned int data_pattern_table[] = { 0x0000, 0xffff, 0x0000, 0xaaaa, 0x5555 };
/*
This memory test does the following:
1. check the range, error 1
2. fill range with all 0's
3. verfiy the fill, error 2
4. fill range with all 0xffff's
5. verfiy the fill, error 3
6. fill range with all 0's
7. verfiy the fill, error 4
8. fill range with all 0xaaaa's
9. verfiy the fill, error 5
10. fill range with all 05555's
11. verfiy the fill, error 6
*/
unsigned int d_fill_test1(unsigned int *begin_ptr,
unsigned int *stop_ptr,
unsigned int bit_pattern)
{
unsigned int save_ptr;
unsigned int loop_cnt;
unsigned int loop_save;
unsigned int addr;
unsigned int read_back;
save_ptr = *begin_ptr; /* save the start addr */
loop_cnt = (*stop_ptr) - (*begin_ptr);
addr = *begin_ptr;
/* check data lines */
while( loop_cnt-- )
{
*(unsigned int*) addr = bit_pattern; /* fill with pattern */
addr++;
}
addr = save_ptr; /* get start again */
loop_cnt = loop_save;
while( loop_cnt-- )
{
read_back = *( unsigned int *)addr;
if ( read_back!= bit_pattern) /* verify pattern */
{
return( read_back ); /* show error */
}
}
return((unsigned int)0); /* show no error */
}
unsigned int d_addr_test1(unsigned int *begin_ptr,
unsigned int *stop_ptr)
{
unsigned int save_ptr;
unsigned int loop_cnt;
unsigned int loop_save;
unsigned int addr;
unsigned int read_back;
loop_cnt = (*stop_ptr) - (*begin_ptr);
loop_save= loop_cnt;
addr = *begin_ptr;
save_ptr = *begin_ptr; /* save the start addr */
while( loop_cnt-- )
{
*(unsigned int *)addr = addr; /* fill with address */
addr++;
}
addr = save_ptr; /* get start again */
loop_cnt= loop_save;
while( loop_cnt-- )
{
read_back = *(unsigned int *) addr;
if ( read_back != addr ) /* verify data */
{
return( addr ); /* show error */
}
addr++;
}
addr = save_ptr; /* get start again */
loop_cnt= loop_save;
while( loop_cnt-- )
{
*(unsigned int *) addr = ~(unsigned int)addr; /* fill with inverted address */
addr++;
}
addr = save_ptr; /* get start again */
loop_cnt = loop_save;
while( loop_cnt-- )
{
read_back = *(unsigned int *) addr;
if ( read_back != (~(unsigned int)addr) ) /* verify data */
{
return( addr); /* show error */
}
addr++;
}
return((unsigned int)0); /* show no error */
}
unsigned int d_pattern_test1(unsigned int *start_ptr,
unsigned int *end_ptr)
{
unsigned int mem_error;
unsigned int start_save;
unsigned int end_save;
int i, j;
if ((*start_ptr) >= (*end_ptr))
{
return((unsigned int)1); /* show 1st error */
}
start_save = *start_ptr;
end_save = *end_ptr;
i = sizeof(data_pattern_table); /* get size of table */
for (j = 0; j < i; j++)
{
mem_error = d_fill_test1(start_ptr, end_ptr, data_pattern_table[j]);
if (mem_error)
{
return((unsigned int)(j + 2)); /* show error */
}
}
j++;
*start_ptr = start_save;
*end_ptr = end_save;
mem_error = d_addr_test1(start_ptr, end_ptr);
if (mem_error)
{
return((unsigned int)(j + 2)); /* show error */
}
return((unsigned int)0); /* show no error */
}
unsigned int memtest1(void)
{
unsigned int mem_err;
unsigned int start_add;
unsigned int end_add;
mem_err = 0;
/* any number of memory banks */
/* can be put in here with */
/* different begin, end addrs */
start_add = DATA_START_ADDR;
end_add = DATA_END_ADDR;
mem_err = d_pattern_test1( &start_add, &end_add );
return(mem_err); /* return the good or bad result */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -