|
Запись в DDR2, NIOS II |
|
|
|
Mar 3 2015, 09:17
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122

|
Написал простенькую прогу по записи данных в ОЗУ. int main() { unsigned long *data_inp; unsigned long *ddr_addr; data_inp=(unsigned long*)0x4030000; ddr_addr=(unsigned long*)0x2000003; while (1) { *ddr_addr=*data_inp; iprintf("input %08x %03i\n", data_inp, *data_inp); iprintf("ddr %08x %04i\n", ddr_addr, *ddr_addr ); ddr_addr++; } }
Результаты в консоли input 04030000 255 ddr 02000003 0255 input 04030000 255 ddr 02000007 0255 ... input 04030000 255 ddr 02000203 0255 input 04030000 255 ddr 02000207 281018391 input 04030000 255 ddr 0200020b -524288489 ...
в начале пишет нормально в ОЗУ, а потом после адреса 02000203 начинает писать всякую ерунду. Что надо прописать в проге, чтобы нормально происходила дальше запись?
Сообщение отредактировал x66 - Mar 3 2015, 10:37
|
|
|
|
|
 |
Ответов
|
Mar 3 2015, 10:30
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122

|
Цитата(doom13 @ Mar 3 2015, 13:22)  Что-то результат работы вообще не соответствует приведённому коду, где у Вас там инкремент указателя? Как оно работает если указатель не изменяется? Должно писать одни и те же данные по одному адресу. При инкременте адреса увеличиваются не на 1, а на 4 (может и на другое число увеличиваться в зависимости от типа данных). Вот в консоли ddr 02000003 0255; ddr 02000007 0255 ..., первое число это адрес, а второе это содержимое по адресу.
Сообщение отредактировал x66 - Mar 3 2015, 10:30
|
|
|
|
|
Mar 3 2015, 10:34
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(x66 @ Mar 3 2015, 13:30)  При инкременте адреса увеличиваются не на 1, а на 4 (может и на другое число увеличиваться в зависимости от типа данных). Вот в консоли ddr 02000003 0255; ddr 02000007 0255 ..., первое число это адрес, а второе это содержимое по адресу. А где инкремент адреса в коде: Цитата Код int main() { unsigned long *data_inp; unsigned long *ddr_addr;
data_inp=(unsigned long*)0x4030000; ddr_addr=(unsigned long*)0x2000003;
while (1) { *ddr_addr=*data_inp; iprintf("input %08x %03i\n", data_inp, *data_inp); printf("ddr %08x %04i\n", ddr_addr, *ddr_addr ); } } ???
|
|
|
|
|
Mar 3 2015, 10:37
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122

|
Цитата(doom13 @ Mar 3 2015, 13:34)  А где инкремент адреса в коде:
??? Извиняюсь, подчищал код от других записей случайно удалил, подправил код в 1 сообщени. Инкремент делаю ddr_addr++;
Сообщение отредактировал x66 - Mar 3 2015, 10:38
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|