реклама на сайте
подробности

 
 
> Запись в DDR2, NIOS II
x66
сообщение Mar 3 2015, 09:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
doom13
сообщение Mar 3 2015, 10:22
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(x66 @ Mar 3 2015, 12:17) *

Что-то результат работы вообще не соответствует приведённому коду, где у Вас там инкремент указателя? Как оно работает если указатель не изменяется? Должно писать одни и те же данные по одному адресу.
Go to the top of the page
 
+Quote Post
x66
сообщение Mar 3 2015, 10:30
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
doom13
сообщение Mar 3 2015, 10:34
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 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 );
      }
}

???
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01395 секунд с 7
ELECTRONIX ©2004-2016