Я пытаюсь проверить оперативную память устройства, над которым я работаю, просматривая диапазон адресов, скажем, от 0x0 до 0xfef.
Я пробовал множество вещей, но ничего не сработало. Вот пример того, что я хочу сделать:
unsigned char temp;
unsigned char* addr = 0x0; // create ptr to point to address in mem
while(addr != 0xfef) // while not at end of mem
{
temp = *addr; // save value at current addr
*addr = 0xAA; // set value at addr to 0xAA
if(*addr != 0xAA) // if value did not write properly, do not run software
while(1);
*addr = temp; // restore value at addr to original value
++addr; // move on to next addr
}
Единственная операция, которая работает в этом коде, — установка значения по адресу addr в 0xAA. Операторы while и if выдают ошибку: «Для сравнения требуются совместимые скалярные операнды с ошибкой [1128]».
Я также пытался создать указатели со значением адресов, которые я хочу, но попытка установить указатель на другой указатель приводит к ошибке «Несоответствие типа ошибки [1131] в назначении».
Заранее спасибо.
РЕДАКТИРОВАТЬ 2018-04-06:
Еще немного информации: я использую PIC18F66K80. Мы можем выполнить эту функциональность, используя SFR:
FSR0 = 0x00;
while(FSR0 != 0xfef)
{
temp = INDF0;
INDF0 = 0xAA;
if(INDF0 != 0xAA)
while(1);
POSTINC0 = temp;
};
Код C теперь запускается и изменяет память, оказывается, я искал не то место в памяти...
Однако, похоже, он не работает по адресу addr = 0xDAA. Замечу, что адрес указателя addr 0xD08, а адрес temp 0xD07.
while(addr != 0xfef)
-- это никогда не будет оцениваться как true, если толькоsizeof(int) = 1
. Вместо этого попробуйте объявитьaddr
указателем наunsigned char
. И изменитеif(addr != 0xAA)
наif(*addr != 0xAA)
- person r3mainer   schedule 06.04.2018