Добрый день. Разбираю пример из «Programming Embedded Systems, Second Edition with C and GNU Development Tools», касающийся тестирования памяти и непременно вылетаю в сегфолт. В примере ниже я пытаюсь пройтись по блоку размером 64 KB алгоритмом «шагающей единицы»
test.h
#ifndef _test_h
#define _test_h
/*
* Define NULL pointer value.
*/
#ifndef NULL
#define NULL (void *) 0
#endif
/*
* Set the data bus width.
*/
typedef unsigned long datum;
/*
* Function prototypes.
*/
datum memTestDataBus(volatile datum * address);
#endif
test.c
#include "test.h"
#define BASE_ADDRESS (datum *)(0x00500000)
datum
memTestDataBus(volatile datum * address)
{
datum pattern;
/*
* Perform a walking 1's test at the given address.
*/
for (pattern = 1; pattern != 0; pattern <<= 1)
{
/*
* Write the test pattern.
*/
*address = pattern;
/*
* Read it back (immediately is okay for this test).
*/
if (*address != pattern)
{
return (pattern);
}
}
return (0);
}
int main(int argc, char **argv){
memTestDataBus(BASE_ADDRESS);
return 0;
}
В чём может быть ошибка?