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

 
 
> Перенос проекта с 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
 
Start new topic
Ответов
ArtemKAD
сообщение Jun 29 2009, 00:47
Сообщение #2


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

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата
Именно это я и подчёркиваю.
Для проекта объём которого Вы видете, полный перенос занял менее 2-ух месяцев.
Это при том:
a) что я был не знаком с новым камнем
б) что я не делал перенос ранее
в) что пришлось выполнить полное тестирование (достаточно большой объём)

Думаю, что добавление 20-30% кода под ту же платформу добавило бы значительно больше проблем.

Больше 2-х месяцев?!
Кроме того, не стоит забывать, что "менее 2-ух месяцев" это только перенос. А 20-40% кода все равно придется писать. И через 2 месяца вы все еще в начале пути.
Кроме того, нужна новая плата (новая схема, новые комплектующие, новая разводка). И кто это все делает?
Цитата
Приходилось с радостью портировать даже с 8bit ASM на АРМ 'С' за считаные дни

Что-то меня терзают смутные сомнения в практической реализации подобного, если длина кода "не 40 байт", "считанные дни" не измеряются неделями или результат "авось будет работать". Разве-что речь о простых или типовых проектах...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 29 2009, 14:35
Сообщение #3


Гуру
******

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



Цитата(ArtemKAD @ Jun 29 2009, 03:47) *
Больше 2-х месяцев?!


1) Как известно сроки определяются поставленной задачей. smile.gif Параллельно выполнялось куча другой работы по сопровождению других проектов.
2) 2 месяца, это не много для нас. С другой стороны это время, потраченное, в основном, на изучение переферии. Если бы я работал с этим камнем, то это время было бы значительно короче. Сколько - не знаю. Не хочу гадать. Я привёл реальные данные.

Цитата(ArtemKAD @ Jun 29 2009, 03:47) *
Кроме того, не стоит забывать, что "менее 2-ух месяцев" это только перенос. А 20-40% кода все равно придется писать. И через 2 месяца вы все еще в начале пути.
Кроме того, нужна новая плата (новая схема, новые комплектующие, новая разводка). И кто это все делает?

Несколько не понимаю о чём вы?
Это вынужденная мера. Не потому, что я решил просто от нечего делать поменять рабочий камень. Я вынужден был перейти на новый камень, в связи с тем, что старый не справлялся с некоторыми задачами. Причина - недостаток свободной памяти. Чистый остаток 5800. После перехода, я оценив производительность решил расширить возможности новой платформы. При совместимости снизу вверх. Новая платформа будет обладать рядом функций недоступных в старой.
Так причём здесь на каком отрезке пути я нахожусь??? Я Вам так скажу, - я всегда нахожусь в сааамом начале пути. Всегда! Всегда хочется сделать лучше чем было раньше. А у Вас не так?



Цитата(GetSmart @ Jun 29 2009, 08:00) *
За помощь в моей работе хотелось бы поблагодарить ... того, того, и того-то smile.gif

biggrin.gif
За помощь в работе хотелось бы поблагодарить в первую очередь Vesago. biggrin.gif
Я его задолбал вопросами по телефону и нету. Надо признаться он стойко всё выдержал.

Ну и всех тех, кто отвечал на мои вопросы прямо и косвенно. smile.gif Короче весь форум.
Ваши разъяснения на мои вопросы я аккуратненько скопировал в файлик и сохранил. Хотя в данном проекте не воспользовался. Я всё сделал FIQ/IRQ. Вложенность не понадобилась. Ваша помощь по устранению хомутов в IRQ тоже была очень важна.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jun 30 2009, 01:21
Сообщение #4


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(SasaVitebsk @ Jun 29 2009, 18:35) *
Я всё сделал FIQ/IRQ. Вложенность не понадобилась.

Интересно, а обработчики в итоге были реализованны в стартапе
или просто воспользовались возможностями VIC ?
Просто интересно как у Вас реализованы обработчики IRQ/FIQ при
полной ненужности обработчиков вложенных прерываний.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 30 2009, 05:14
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Jun 30 2009, 04:21) *
Интересно, а обработчики в итоге были реализованны в стартапе
или просто воспользовались возможностями VIC ?

Странный вопрос. Сводится к тому, было прерывание IRQ единстаенным или нет, и испльзовался-ли jump на обработчик FIQ или этот обработчик сразу с 1E адреса и писался. Это имеет какое-то принципиальное значение?
Цитата
Просто интересно как у Вас реализованы обработчики IRQ/FIQ при
полной ненужности обработчиков вложенных прерываний.

Лично у меня, "как обычно", при этой самой ненужности. Применяемый многими по принципу "а чего тут думать, трясти надо" bigloop рвущийся многочисленными прерываниями хорош для ограниченного числа решений. Как только научился продумывать подход к системе, так сразу вложенные и перестали быть нужными, причем у меня это не во времена ARM сие случилось, а во времена 186/386, которые аппаратрых ограничений на вложенность не имели - вкладывайся пока стек не кончится. Только нужно это в редчайших случаях. На ARM платформе эти и так редчайшие случаи покрывает еще на 90% наличие FIQ. В сухом остатке остается вообще стремящаяся к нулю необходимость.


--------------------
Feci, quod potui, faciant meliora potentes
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
|- - blackfin   Цитата(zltigo @ Jun 29 2009, 01:43) Прихо...   Jun 29 2009, 03:02
|- - zltigo   Цитата(ArtemKAD @ Jun 29 2009, 03:47) Что...   Jun 29 2009, 05:19
|- - 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
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 00:03
Рейтинг@Mail.ru


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