Перейти к содержанию
    

Скорость работы с памятью AT91RM9200...

Правда пришлось по другому настроить контроллер SDRAM (иначе не заработало):

Странно, но почему-то в цикл теста CalcBogoMips() программа не попадает, не дожидается и вываливается по while((loops_per_sec <<= 1)). Кстати, где в Вашем коде инициализируется системный таймер?

Попробуйте использовать мой модуль AT91_SDRAM.c, только заменить AT91C_SDRC_NC_8 на AT91C_SDRC_NC_9, должно пойти.

Таймер инициализируется там-же в CalcBogoMips, просто задается делитель set_systimer_divider(1);

Можно попробовать увеличить задержку delay_long(0x10000), т.к. после установки делителя таймер вначале выдает бяку.

Странные результаты по скорости памяти, почти нет разницы что внутри кеша, что вне.

P.S.

Добейтесь работы моего проекта с минимальными измерениями иначе не поймем отчего тормозит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте использовать мой модуль AT91_SDRAM.c, только заменить AT91C_SDRC_NC_8 на AT91C_SDRC_NC_9, должно пойти.

 

Странные результаты по скорости памяти, почти нет разницы что внутри кеша, что вне.

P.S.

Добейтесь работы моего проекта с минимальными измерениями иначе не поймем отчего тормозит.

 

SDRAM заработала когда заменил T91C_SDRC_NC_8 на AT91C_SDRC_NC_9. Но скорости остались такие же.

И еще: функция AT91F_InitPMC() выполняется успешно, только если закоментировать AT91F_EnableMainClock() и AT91F_SetMasterClock(), в противном случае программа виснет. Частоты PLLA, PLLB и MCKL при коментировании вышеназванных функций выставляются правильные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И еще: функция AT91F_InitPMC() выполняется успешно, только если закоментировать AT91F_EnableMainClock() и AT91F_SetMasterClock(), в противном случае программа виснет. Частоты PLLA, PLLB и MCKL при коментировании вышеназванных функций выставляются правильные.

Так в этом и ответ, скорость проца не выставляется, он работает на MainClock (18.432) без умножения.

Номиналы деталей в обвязке PLL правильные?

Пошагово посмотрите где виснет.

Без AT91F_EnableMainClock() не заработает и AT91F_SetMasterClock(). Попробуйте вместо ожидания готовности вставить задержку побольше.

Уберите DBG() на всякий случай.

Перед запуском нужен аппаратный ресет для сброса настроек плл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так в этом и ответ, скорость проца не выставляется, он работает на MainClock (18.432) без умножения.

Номиналы деталей в обвязке PLL правильные?

Пошагово посмотрите где виснет.

Без AT91F_EnableMainClock() не заработает и AT91F_SetMasterClock(). Попробуйте вместо ожидания готовности вставить задержку побольше.

Уберите DBG() на всякий случай.

Перед запуском нужен аппаратный ресет для сброса настроек плл.

 

Нет, я навреное не правильно объяснил. Частоты у меня правильные выставляются и процессор работает на 180МГц (смотрел осциллом программируемые клоки). инициализаци возможно не проходит потому что если я работаю с бутлоадером, то инициализация уже там проведена, а если под отладчиком, то тоже в mac-файле настраиваются тактовые. Если бы проц работал на 18МГц, то результаты были б ыгораздо меньше, на эти грабли уже наступал...

Меня насторожило сообщение http://electronix.ru/forum/index.php?showtopic=33473 . Может быть дело в компиляторе? Используемый Вами компилятор где можно найти, не подскажете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, я навреное не правильно объяснил. Частоты у меня правильные выставляются и процессор работает на 180МГц

...

Используемый Вами компилятор где можно найти, не подскажете?

Понял. Можно в mac файле временно отключить установку частоты и глянуть что получится.

 

Да, для чистоты эксперемента лучше взять такой-же компилятор: RVDS2.2

Есть на местном фтп /pub/MCs/_ARM_/ARM.REALVIEW.DEVELOPER.STUDIO.2.2, если нет доступа, то в муле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понял. Можно в mac файле временно отключить установку частоты и глянуть что получится.

Так не получается, потому что чтобы загрузить код в SDRAM надо в mac-файле проинициализировать и PLL и SDRAM контроллер...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так не получается, потому что чтобы загрузить код в SDRAM надо в mac-файле проинициализировать и PLL и SDRAM контроллер...

Я не знаю есть ли в IARe понятие scatter файла, т.е. грузить код в SRAM, а после инициализации периферии код перебрасывается в SDRAM. Или ищите RVDS2.2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не знаю есть ли в IARe понятие scatter файла, т.е. грузить код в SRAM, а после инициализации периферии код перебрасывается в SDRAM. Или ищите RVDS2.2

 

Удалось запустить Ваш проект под ИАРом с минимальными переделками (только настройки SDRAM вместо 8 Columns поставил 9). BogoMips-тест не запускался, потому что оптимизатор ИАРа пустой цикл просто отказывался выполнять :) Пришлось снизить оптимизацию для функции void delay(int loops).

*** CPU Speed Test

59.96 BogoMips

198203 Dhrystone per second, 112 DMIPS

 

*** Memory Speed Test

Block 1Kb, Speed 57638 Kb/s

Block 2Kb, Speed 57816 Kb/s

Block 4Kb, Speed 57848 Kb/s

Block 8Kb, Speed 57889 Kb/s

Block 16Kb, Speed 57865 Kb/s

Block 32Kb, Speed 45038 Kb/s

Block 64Kb, Speed 42835 Kb/s

Block 128Kb, Speed 42654 Kb/s

Block 256Kb, Speed 42653 Kb/s

Block 512Kb, Speed 42653 Kb/s

Block 1024Kb, Speed 42655 Kb/s

 

Вот такие цифры. Итого BogoMips на 16% хуже, Dhrystone в 2,4 хуже, память при малых блоках почти в 7 раз медленнее, а при больших блоках в 2 с небольшим раза медленнее Ваших. Не утешительно. Как думаете, в чём ещё может быть дело? Судя по BogoMips ядро вроде не сильно медленнее работает, а вот когда дело касается памяти и кэшей - всё тормозит...

И ещё: не нашёл в Вашем проекте карты распределения памяти. Вы всё храните в SDRAM? И код, и данные, и стек?

--------------------------------------------------------------------------

 

Попробовал с выключенным DCACH:

*** CPU Speed Test

59.96 BogoMips

31597 Dhrystone per second, 17 DMIPS

*** Memory Speed Test

...

Block 16Kb, Speed 6501 Kb/s

...

Block 1024Kb, Speed 6502 Kb/s

 

и с выключенными MMU и DCACH:

*** CPU Speed Test

59.96 BogoMips

29022 Dhrystone per second, 16 DMIPS

*** Memory Speed Test

...

Block 16Kb, Speed 5809 Kb/s

...

Block 1024Kb, Speed 5808 Kb/s

 

Т.е. можно сделать вывод, что кэширование работает. Но почему так медленно, не понятно.

Изменено пользователем Paramedic

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

получил следующее:

*** CPU Speed Test

71.95 BogoMips

472285 Dhrystone per second, 268 DMIPS

 

*** Memory Speed Test

Block 1Kb, Speed 353514 Kb/s

Block 2Kb, Speed 357576 Kb/s

Block 4Kb, Speed 361896 Kb/s

Block 8Kb, Speed 364112 Kb/s

Block 16Kb, Speed 358656 Kb/s

Block 32Kb, Speed 130348 Kb/s

Block 64Kb, Speed 113954 Kb/s

Block 128Kb, Speed 112366 Kb/s

Block 256Kb, Speed 112324 Kb/s

Block 512Kb, Speed 112334 Kb/s

Block 1024Kb, Speed 112338 Kb/s

 

заливал test.bin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И ещё: не нашёл в Вашем проекте карты распределения памяти. Вы всё храните в SDRAM? И код, и данные, и стек?

Информация для компилятора в файле t1.scf, а способ кеширования для каждого региона в функции AT91F_InitMMU().

Что могу сказать :( пробуйте другой компилятор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Информация для компилятора в файле t1.scf, а способ кеширования для каждого региона в функции AT91F_InitMMU().

Что могу сказать :( пробуйте другой компилятор.

Компилятор в свободном доступе найти не удалось :( Если не затруднит, не могли бы Вы скомпилировать бинарник на своём компиляторе, исправив настройки SDRAM (вместо 8 Columns поставить 9)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Компилятор в свободном доступе найти не удалось :( Если не затруднит, не могли бы Вы скомпилировать бинарник на своём компиляторе, исправив настройки SDRAM (вместо 8 Columns поставить 9)?

могём.

test_9col.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

могём.

 

Спасибо! Наконец-то хоть какой-то результат:

*** CPU Speed Test

71.95 BogoMips

472350 Dhrystone per second, 268 DMIPS

 

*** Memory Speed Test

Block 1Kb, Speed 353564 Kb/s

Block 2Kb, Speed 361920 Kb/s

Block 4Kb, Speed 364208 Kb/s

Block 8Kb, Speed 366368 Kb/s

Block 16Kb, Speed 360928 Kb/s

Block 32Kb, Speed 130436 Kb/s

Block 64Kb, Speed 113974 Kb/s

Block 128Kb, Speed 112380 Kb/s

Block 256Kb, Speed 112341 Kb/s

Block 512Kb, Speed 112351 Kb/s

Block 1024Kb, Speed 112355 Kb/s

 

Правда это при условии загрузки бинарника во внутреннюю RAM... Из SDRAM не хочет исполняться почему-то. Может конфликт с моим загрузчиком...

 

Ладно, сейчас пробую перейти на Кейловский компилятор, может что-то получится...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Информация для компилятора в файле t1.scf, а способ кеширования для каждого региона в функции AT91F_InitMMU().

Что могу сказать :( пробуйте другой компилятор.

 

Раздобыл RVDS 2.2. Пробую собрать Ваш проект, компиляция проходит успешно, а вот линкер ругается:

 

Error : armlink: L6784: Symbol #65 'bottom_of_stacks' in section #6 'Stacks' from cstartup.o with value 0xfffffef0 has size 0x0 that extends to outside the section.

 

Error : armlink: L6784: Symbol #66 'StackPointer' in section #6 'Stacks' from cstartup.o with value 0xffffff74 has size 0x0 that extends to outside the section.

 

Error : armlink: L6784: Symbol #69 'bottom_of_stacks' in section #0 'Stacks' from retarget.o with value 0xfffffef0 has size 0x0 that extends to outside the section.

 

Error : armlink: L6784: Symbol #70 'StackPointer' in section #0 'Stacks' from retarget.o with value 0xffffff74 has size 0x0 that extends to outside the section.

 

armlink: Finished: 0 information, 0 warning and 4 error messages.

 

Error : link exit status = 2

 

Подскажите, куда надо смотреть и что править, а то я ещё не совсем въехал в структуру проекта. Да и не хочется пока самодеятельность в проект добавлять для чистоты эксперимента. Ваш проект не менял, загрузил как есть...

Изменено пользователем Paramedic

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Раздобыл RVDS 2.2. Пробую собрать Ваш проект, компиляция проходит успешно, а вот линкер ругается:

...

Забыл сказать. Нужно скачать update с сайта.

h__p://www.arm.com/support/downloads/info/15304.html

Замененные файлы нужно заново пропатчить.

Тогда errors станут warnings.

А warnings затем можно отключить: Release Settings -> Linker -> RealView Linker -> Diagnostics, в поле Suppress добавить текст 6784.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...