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

 
 
> Перенос проекта с AVR на ARM7. Информация к размышлению., Результаты тестов для интересующихся.
SasaVitebsk
сообщение Jun 25 2009, 21:47
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



*** Побудительные мотивы написания.
Часто возникает вопрос выбора камня. Мы видим кучу таких постов. Некоторых это раздражает. Но на самом деле, для меня, причины этого очевидны. Давайте порассуждаем. Провести сравнительные исследования пары камней для текущего проекта - невозможно. Во-первых потому, что для этого надо сделать этот проект на двух платформах полностью, а потом провести исследования. Это, как мы понимаем увеличит затраты времени и денег почти в 2 раза. Кто на это пойдёт? Ориентироваться на сторонние оценки (статьи) - тоже сложно. Поскольку исследования стоят дорого, то бесплатно их никто не делает. Соответственно они проплачены. Как правило одним из производителей. Соответственно они достаточно тенденциозны. То есть, как правило,
идёт выпячивание достоинств и замалчивание недостатков у "нужных" камней, ну а у конкурентов - наоборот. Поэтому живое общение с кучей мнений, намного интересней. Особенно если приведены сравнительные данные.
Мне как раз пришлось переносить один проект с ATMega640 на LPC2106. Плюс особенность проекта такова, что есть возможность дать чёткую оценку производительности на данном проекте. С точки зрения аппаратной части - это почти сопоставимые проекты. То есть платка контроллера на 640 работает в том же железе что и 2106 и, при тестировании выполняют ту же задачу. Есть некоторое различие в выводе. Так, на 640 я использую 2 аппаратных канала SPI, а на 2106 один формирую програмно. На 640 я использую 8 ног камня напрямую, а в 2106 ч/з сдвиговый регистр и тоже программно. С одной стороны это несколько ухудшает точность сравнения, а с другой стороны более полно отражает свойства камня. Нет второго SPI - всё равно придётся пользовать
совтовый, не хватает мощности на выходе - приходится применять аппаратные средства с соответствующей программной обработкой. smile.gif Короче точное сопоставление, но для этого проекта.
Я буду описывать два этапа. На первом этапе я перенёс проект "как есть". При том, что он был "вылизан" под 8-ми битовую архитектуру, обработка, во многих местах выполнялась таблично, для ускорения. Много работы с указателями, оптимизированной под 8-ми битную архитектуру. Некоторые важные части "оптимизированы" под AVR. В тоже время всё было написано на IAR C. На втором этапе, я переоптимизирую на работу с 32-ух битной архитектурой.


*** Производительность. Тестовое сравнение.
1-ый этап. Сопоставление по объёму флэш памяти. Некоторые примечания. От проекта требуется только производительность. Соответственно выбиралась настройка максимальной оптимизации по скорости. Проект и там и там влазит с запасом. Необходимо учесть, что порядка 1.5к на ARM "потерялось" в таблицах при выравнивании (это учтено в данных ч/з "/"). Надо понимать, что если бы ставилась задача оптимизации по размеру, то эту потерю я мог бы легко устранить. Но, поскольку,флэши у меня вагон, то я просто не буду этого делать. Соответственно, сравнение по флэши - чисто оценочное, для реального проекта, для любознательных. Кроме того, проект я пишу в режиме ARM, по вышеперечисленным причинам. В таблице приведены результаты компиляции
проекта так же в режиме THUMB, но это чисто для информации. Полного тестирования проекта в этом режиме не осуществлялось. Ну и кроме того, надо учесть, что в данном проекте около половины занимают таблицы.
smile.gif
Код
-----------------------------------------------------------------
Камень                  ! Mega640 ! LPC2106 THUMB ! LPC2106 ARM !
-----------------------------------------------------------------
CODE  memory (в байтах) !   52428 !   64728/62944 ! 69899/68115 !
-----------------------------------------------------------------
CODE  memory (в %)      !     100 !       123/120 !     133/130 !
-----------------------------------------------------------------

Загрузка до оптимизации
Код
-------------------------------------------------
Камень                  ! Mega640 ! LPC2106 ARM !
-------------------------------------------------
Средняя (мкс)           !   4809  !      721    !
-------------------------------------------------
Средняя (%)                !   28,9  !      4,3    !
-------------------------------------------------
Максимальная (мкс)      !   8008  !     1142    !
-------------------------------------------------
Максимальная (%)        !   48,0  !      6,9    !
-------------------------------------------------
Таким образом рост производительности при переходе на ARM на данной задаче составил от 6.7 до 7 раз. Только за счёт увеличения тактовой и архитектуры процессора. Без оптимизации вычислений под 32 среду.

Проверил оптимизационные способности компилятора IAR. smile.gif
Загрузка при уровне оптимизации "NONE" компилятора IAR.
Код
----------------------------------------------------
Камень                  ! макс. опт. !    "NONE"   !
----------------------------------------------------
Средняя (мкс)           !    721     !     1591    !
----------------------------------------------------
Средняя (%)                !    4,3     !      9,5    !
----------------------------------------------------
Максимальная (мкс)      !    1142    !     2631    !
----------------------------------------------------
Максимальная (%)        !     6,9    !     15,8    !
----------------------------------------------------
Рост производительности программы при полной оптимизации составляет около 2 раз. То есть даже неоптимизированная компилятором и человеком прога на ARM уделает AVR приблизительно в 3 раза (на моей задаче).

Далее начал оптимизацию проги под 32 бита. Оптимизации подверглось 1 прерывание (FIQ) + 6 подпрограмм. Остальное косметически. В целом это составляет приблизительно 10% от объёма проекта. Корректировать остальное нецелесообразно, да и не хочется, для совместного сопровождения задач. Даю таблицу результирующих измерений.

Загрузка после перевода на 32 бита (ряд групповых вычислений)
Код
-------------------------------------------------
Камень                  ! Mega640 ! LPC2106 ARM !
-------------------------------------------------
Средняя (мкс)           !   4809  !      515    !
-------------------------------------------------
Средняя (%)                !   28,9  !      3,1    !
-------------------------------------------------
Максимальная (мкс)      !   8008  !      857    !
-------------------------------------------------
Максимальная (%)        !   48,0  !      5,1    !
-------------------------------------------------
Как видим коэффициент 9.3. Думаю результат в комментариях не нуждается.
Для объективности отмечу, что проект ещё подразбух. Конечный объём стал 70051 байт.

*** IAR, портирование, ошибки.
Компилятор IAR я выбирал по основному критерию - возможность портирования проекта на другие камни. Надо сказать - я очень доволен результатом. Фактически претензий к компилятору нет ни одной. Я при создании проекта сразу выбираю максимальную оптимизацию по нужному мне ресурсу и больше к этому не возвращаюсь.

При переносе этого проекта было несколько хомутов в кусочках, связанных с работой оборудования. Пару изменений связанные с выравниванием я сделал без ошибок. И были ошибки в кусочке, связанном с коррекцией проекта, в связи с отсутствием внутренней EEPROM памяти у LPC.

Некоторые выводы и рекомендации.
1) Что было правильно сделано и ускорило перенос.
Библиотеки были написаны в 2 уровнях. Ну например - I2C. Одна библиотека формирует start/stop/wb/rb. Написаны варианты для совтовой реализации и для аппаратной (TWI). А "над ней" библиотеки работы с 24c и т.п. Библиотеки нижнего уровня написаны таким образом, что взаимо заменяемы. Таким образом библиотеки верхнего уровня получились аппаратно-независимы и их менять не пришлось. Пришлось просто переписать библиотеки нижнего уровня под LPC.
2) Что было неверно сделано. Работа с внутренним EEPROM под AVR.
Как бы я всё равно остаюсь сторонником реализации IARом __eeprom, но надо было также разделить уровни работы. Точнее для AVR необходимо было ввести уровень работы с конфигурацией. В таком случае, для LPC, мне только бы пришлось написать нижний уровень, который "встроен" в компилятор AVR. На самом деле я и так не работаю с EEPROM. У меня есть "дубль" в ОЗУ и я только присваивание делаю. То есть с этой точки зрения всё Ok, но работа раскинута по всему проекту, нет защиты и т.д.
Выводы я сделал для себя, и не буду рекомендовать их для посторонних разработчиков. Но а для себя, звучит так: в связи с увеличением разнообразия камней, ростом их производительности, увеличением скорости разработки - использовать более системный подход к написанию ПО. То есть переносить опыт написания ПО для больших систем, на embedded платформы. Это ведёт к потере производительности, но увеличивает надёжность функционирования, упрощает перенос, ускоряет разработку.

*** Общие впечатления от камня LPC2106 и архитектуры ARM.
Я бы не назвал камень "чем то уникальным". Камень как камень, переферия как переферия. Где-то понравились особенности, где-то огорчили. Так, к примеру, наличие буфера фифо в USART, для моего проекта позволяет использовать любую скорость соединения. На AVR я могу получить максимальную скорость 57600. Зато переключение RS485 интерфейса получается просто "раком". Как они недодумали такую вещь - ума не приложу. Очень порадовал контроллер прерываний. Наличие FIQ прерывания, для меня, просто находка. Совершенно убила необходимость использования ноги SS в SPI при работе мастером. Просто потерянная нога. Ну и так далее. С одной стороны в каждом переферийном блоке были какие-то костыли. С каждым я бился, матерился и топал ногами. С другой стороны, всё это делается один раз, запоминается и далее идёт по накатанной.
Отладка проекта, в целом, оставила скорее положительные эмоции. Под MT-Link всё работало вполне устойчиво. Заливка производилась даже быстрее чем в AVR, что ускоряет процесс. Правда чуть медленнее компиляция производится и при включенной оптимизации много кода выпадает, но мне это ни грамма не мешало. Короче, с учётом того, что переферии у меня не много было задействовано, то переход потребовал не много времени. В целом я остался очень доволен. Есть ещё нюансы, например придётся написать новый бутлоадер, увязать всё, умощнить проект, распределить память и так далее, но всё это рабочие моменты. В целом я готовился к худшему. Отдельное спасибо разработчикам компилятора IAR. )))

Пытался кратко. Если что не понятно или какие вопросы - спрашивайте.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SasaVitebsk   Перенос проекта с AVR на ARM7. Информация к размышлению.   Jun 25 2009, 21:47
- - viael   А че LPC2106, давно в моде LPC23/24xx?   Jun 25 2009, 22:48
|- - bodja74   Цитата(viael @ Jun 26 2009, 02:48) А че L...   Jun 25 2009, 23:14
- - _Pasha   Цитата(SasaVitebsk @ Jun 26 2009, 00:47) ...   Jun 26 2009, 01:24
- - zltigo   Цитата(SasaVitebsk @ Jun 26 2009, 00:47) ...   Jun 26 2009, 03:38
- - Rst7   У меня немого другие данные на кодере JPEG (считай...   Jun 26 2009, 03:49
|- - zltigo   Цитата(Rst7 @ Jun 26 2009, 06:49) ARM быс...   Jun 26 2009, 04:07
||- - xelax   Странно, во всех проектах которые приходилось запу...   Jun 26 2009, 06:19
||- - zltigo   Цитата(xelax @ Jun 26 2009, 09:19) Проект...   Jun 26 2009, 06:24
||- - xelax   Цитата(zltigo @ Jun 26 2009, 10:24) Тольк...   Jun 26 2009, 06:40
|- - VslavX   Цитата(Rst7 @ Jun 26 2009, 06:49) У меня ...   Jun 26 2009, 07:37
- - Rst7   ЦитатаЧто очень странно - при примерно, в четверо ...   Jun 26 2009, 05:37
- - sensor_ua   ЦитатаИспользую thumb Thumb у многих LPC2xxx в раз...   Jun 26 2009, 07:25
|- - zltigo   Цитата(sensor_ua @ Jun 26 2009, 10:25) Th...   Jun 26 2009, 07:27
|- - xelax   Цитата(sensor_ua @ Jun 26 2009, 11:25) Th...   Jun 26 2009, 07:39
- - 777777   Цитата(SasaVitebsk @ Jun 26 2009, 01:47) ...   Jun 26 2009, 07:31
|- - SasaVitebsk   Цитата(777777 @ Jun 26 2009, 10:31) А как...   Jun 26 2009, 15:57
- - Rst7   ЦитатаМатематика бывает разной А я спорю что-ли? ...   Jun 26 2009, 07:43
- - =GM=   Цитата(SasaVitebsk @ Jun 25 2009, 20:47) ...   Jun 26 2009, 09:40
|- - dimka76   Цитата(=GM= @ Jun 26 2009, 13:40) Ну набе...   Jun 26 2009, 10:40
|- - =GM=   Ну, голословно не надо утверждать неочевидное. Для...   Jun 26 2009, 11:19
||- - defunct   Цитата(=GM= @ Jun 26 2009, 14:19) младший...   Jun 26 2009, 11:25
||- - =GM=   Цитата(defunct @ Jun 26 2009, 10:25) Боюс...   Jun 26 2009, 11:52
||- - defunct   Цитата(=GM= @ Jun 26 2009, 14:52) Сравнив...   Jun 26 2009, 13:23
|- - dxp   Цитата(dimka76 @ Jun 26 2009, 17:40) А ва...   Jun 26 2009, 13:14
|- - IgorKossak   Цитата(dxp @ Jun 26 2009, 16:14) А уж по ...   Jun 26 2009, 14:05
- - Rst7   ЦитатаЭто что, мода такая, сравнивать 8-битный про...   Jun 26 2009, 09:49
- - Zlumd   А какие есть ARMы с аппаратным DES-шифрованием на ...   Jun 26 2009, 10:15
- - HeOHuKC   Скоро аврки, сравнивать с блекфинами начнут, мол г...   Jun 26 2009, 13:22
- - proba   начал перевод проекта с авр на тмс320ф23027, резон...   Jun 27 2009, 12:58
|- - Hmm   Цитата(proba @ Jun 27 2009, 15:58) начал ...   Jun 27 2009, 18:03
|- - proba   Цитата(Hmm @ Jun 27 2009, 21:03) Только д...   Jun 27 2009, 19:51
- - ArtemKAD   Цитатано не поиму что помешало атмелу выпускать со...   Jun 27 2009, 19:38
|- - aaarrr   Цитата(ArtemKAD @ Jun 27 2009, 23:38) их ...   Jun 27 2009, 19:50
- - Dx!   Цитата(ArtemKAD @ Jun 27 2009, 23:38) ЗЫЫ...   Jun 27 2009, 19:53
- - ArtemKAD   ЦитатаОйойой - а не слабо продемонстрировать такое...   Jun 28 2009, 06:24
|- - zltigo   Цитата(ArtemKAD @ Jun 28 2009, 09:24) за ...   Jun 28 2009, 06:47
- - ArtemKAD   Цитатаи гипотетических "граблях". Грабли...   Jun 28 2009, 13:18
|- - aaarrr   Цитата(ArtemKAD @ Jun 28 2009, 17:18) В т...   Jun 28 2009, 14:50
|- - zltigo   Цитата(ArtemKAD @ Jun 28 2009, 16:18) Гра...   Jun 28 2009, 15:26
- - ArtemKAD   Не понял , может я не так объяснил. Если существу...   Jun 28 2009, 21:30
|- - zltigo   Цитата(ArtemKAD @ Jun 29 2009, 00:30) Или...   Jun 28 2009, 21:43
- - SasaVitebsk   Совсем рядом находится пост "AVR --> ARM...   Jun 28 2009, 22:10
- - bodja74   ЦитатаКроме того, можно поделится общими ощущениям...   Jun 28 2009, 23:21
- - ArtemKAD   ЦитатаИменно это я и подчёркиваю. Для проекта объё...   Jun 29 2009, 00:47
|- - blackfin   Цитата(zltigo @ Jun 29 2009, 01:43) Прихо...   Jun 29 2009, 03:02
|- - zltigo   Цитата(ArtemKAD @ Jun 29 2009, 03:47) Что...   Jun 29 2009, 05:19
|- - SasaVitebsk   Цитата(ArtemKAD @ Jun 29 2009, 03:47) Бол...   Jun 29 2009, 14:35
|- - singlskv   Цитата(SasaVitebsk @ Jun 29 2009, 18:35) ...   Jun 30 2009, 01:21
|- - zltigo   Цитата(singlskv @ Jun 30 2009, 04:21) Инт...   Jun 30 2009, 05:14
|- - Dog Pawlowa   Цитата(zltigo @ Jun 30 2009, 08:14) Как т...   Jun 30 2009, 07:28
||- - SergeiCh   Цитата(Dog Pawlowa @ Jun 30 2009, 14:28) ...   Jun 30 2009, 13:43
||- - zltigo   Цитата(SergeiCh @ Jun 30 2009, 16:43) Вид...   Jun 30 2009, 20:35
|- - singlskv   Цитата(zltigo @ Jun 30 2009, 09:14) Как т...   Jun 30 2009, 19:15
- - SergeiCh   Цитата(SasaVitebsk @ Jun 26 2009, 04:47) ...   Jun 29 2009, 10:06
- - Сибирь   Цитата(SasaVitebsk @ Jun 26 2009, 00:47) ...   Jun 30 2009, 07:56
- - SasaVitebsk   Цитата(Сибирь @ Jun 30 2009, 10:56) во ск...   Jun 30 2009, 20:21


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

 


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


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