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

 
 
> Перенос проекта с 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
4 страниц V  < 1 2 3 4 >  
Start new topic
Ответов (15 - 29)
xelax
сообщение Jun 26 2009, 07:39
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(sensor_ua @ Jun 26 2009, 11:25) *
Thumb у многих LPC2xxx в разряде неотлечиваемых багов. Хотя мне, например, ещё ни разу не понадобилось ужиматься


Приходилось как-то давно иметь дело с LPC2106 и 2214 (тогда ещё Philips) никаких проблем с thumb ом не обнаружил.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jun 26 2009, 07:43
Сообщение #17


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Математика бывает разной


А я спорю что-ли? Тем более, в качестве фаллоса выступает криптография с открытым ключем smile.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 26 2009, 09:40
Сообщение #18


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(SasaVitebsk @ Jun 25 2009, 20:47) *
Пытался кратко. Если что не понятно или какие вопросы - спрашивайте

Это что, мода такая, сравнивать 8-битный процессор то с 16-битным мсп430, то с 32-битным лпс2106?

Ну наберитесь смелости и сравните лпс с 32-разрядным TMS320F2808. Последний уделает ЛЮБОЙ лпс как бог черепаху. Периферии вагон и на любой вкус. Вот только несколько фактиков из жизни галактики.

1) Умножение 32*32 с получением 64-битного результата - 2МЦ или 20 нс мах. А ДВА умножения 16*16 =32 делается за ОДИН МЦ или 10 нс мах. И вся остальная математика тоже на высоте.

2) Дёрнуть ногу можно за 1 МЦ. То есть и ногодрыганье на высоте.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jun 26 2009, 09:49
Сообщение #19


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Это что, мода такая, сравнивать 8-битный процессор то с 16-битным мсп430, то с 32-битным лпс2106?


Конечно smile.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Zlumd
сообщение Jun 26 2009, 10:15
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 12-04-05
Из: Новосибирск
Пользователь №: 4 057



А какие есть ARMы с аппаратным DES-шифрованием на борту, кроме AT91SAM7XC (они недоставабельны)? А то я последнее время на ХМегу гляжу.

Сообщение отредактировал Zlumd - Jun 26 2009, 10:20
Go to the top of the page
 
+Quote Post
dimka76
сообщение Jun 26 2009, 10:40
Сообщение #21


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(=GM= @ Jun 26 2009, 13:40) *
Ну наберитесь смелости и сравните лпс с 32-разрядным TMS320F2808.


А сколько ваш TMS320F2808 ?

цены ARM7 сравнимы с ценами на восьмибитникакми.

А ваш TMS320F2808 в разы превосходит по цене и арм и авр.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 26 2009, 11:19
Сообщение #22


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Ну, голословно не надо утверждать неочевидное. Для примера, младший член семейства TMS320F28023 стоит $2.85 за 100 штук, 40 мипс, 38/48 ног, рам 20 КБ, флеш 128 КБ, есть 12-битный АЦП на борту и много чего ещё. Поборет любой лпс на любой задаче.

Кстати, их официально называют "цифровые сигнальные контроллеры". Фактически это быстродействующие микроконтроллеры с развитой системой команд и продвинутой периферией. На них и операционку легко можно крутить.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 26 2009, 11:25
Сообщение #23


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(=GM= @ Jun 26 2009, 14:19) *
младший член семейства TMS320F28023 стоит $2.85 за 100 штук, 40 мипс, 38/48 ног, рам 20 КБ, флеш 128 КБ, есть 12-битный АЦП на борту и много чего ещё. Поборет любой лпс на любой задаче.

Боюсь Вы преувеличиваете насчет любого LPC. Есть же и 31xx/32xx серии с 200+ MIPS и FP сопроцессором.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 26 2009, 11:52
Сообщение #24


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(defunct @ Jun 26 2009, 10:25) *
Боюсь Вы преувеличиваете насчет любого LPC. Есть же и 31xx/32xx серии с 200+ MIPS и FP сопроцессором

Сравнивать надо по-честному. Поставьте для 31хх тактовую 40 МГц, и вы увидите, как легко лпс проиграет, вернее сольёт вчистую.

Другая ветвь С2000 семейства имеет 300 МИПС и 150 МФЛОПС и флеши там 512 Кбайт, так что придётся ставить пяток 31хх на подмену.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 26 2009, 13:14
Сообщение #25


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(dimka76 @ Jun 26 2009, 17:40) *
А ваш TMS320F2808 в разы превосходит по цене и арм и авр.

А уж по энергопотреблению...


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
HeOHuKC
сообщение Jun 26 2009, 13:22
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 25-04-09
Из: г. Россошь
Пользователь №: 48 259



Скоро аврки, сравнивать с блекфинами начнут, мол глядите какой прирост производительности. У всего есть свой круг задач, или вы предлагаете использовать вместо 8ми ногой тиньки , арм с 48ю ногами ? Большие АВР и многоногие имеет смысл менять на АРМ. Но и сравнивать их явно нестоит.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 26 2009, 13:23
Сообщение #27


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(=GM= @ Jun 26 2009, 14:52) *
Сравнивать надо по-честному. Поставьте для 31хх тактовую 40 МГц, и вы увидите, как легко лпс проиграет, вернее сольёт вчистую.

По-честному - это на штатных максимальных частотах. Ведь по какой-то причине приведенный Вами TMS нельзя запустить на 200Mhz.

Цитата
Другая ветвь С2000 семейства имеет 300 МИПС и 150 МФЛОПС и флеши там 512 Кбайт, так что придётся ставить пяток 31хх на подмену.

31xx на 270Mhz - 300+ MIPS и думаю примерно столько же MFLOPS. Так что и одного хватит.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 26 2009, 14:05
Сообщение #28


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(dxp @ Jun 26 2009, 16:14) *
А уж по энергопотреблению...

А уж по среде разработки... и инструментам отладки...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 26 2009, 15:57
Сообщение #29


Гуру
******

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



Цитата(777777 @ Jun 26 2009, 10:31) *
А какие частоты у процев?

Для AVR 14745600, для ARM то же умноженное на 4. То есть 58982400.


Цитата(=GM= @ Jun 26 2009, 12:40) *
Это что, мода такая, сравнивать 8-битный процессор то ....


Я в преамбуле чётко описал зачем это сделал. Иногда требуется что-то помощнее AVR, а вы не знаете что ожидать от камня. К Вам это не относится. У Вас большой опыт работы с разными камнями и Вы способны "прикинуть" и сделать верный выбор. Для тех кто работал только с восьмибитниками, это сделать сложнее. Например для меня данные результаты очень неожиданы. Рост за счёт 32-ух битности после оптимизации был ожидаем, а вот рост за счёт архитектуры и частоты - несколько удивил. Я не ожидал получить более 2-ух раз.

Я не ставлю перед собой задачу сподвигнуть кого-то на переход с камня на камень. И сам буду работать с обоими семействами. Я ставил перед собой задачу дать разработчикам, которые уже решили перейти некоторые оценочные цифры. То есть чистую информацию, для тех, кому это интересно.

За информацию о TI большое спасибо. Тоже инфа, и возможно кому-нибудь пригодится. Хотелось бы увидеть ещё цифири у тех, кто переносил проект с камня на камень.

Цитата(Rst7 @ Jun 26 2009, 06:49) *
У меня немого другие данные на кодере JPEG (считайте, чистая математика, никакой периферии). Грубо говоря, ARM быстрее AVR в 2 раза, не более. С оптимизацией там все в порядке в обеих инкарнациях.


У меня в проекте немного математики и она несложная. Камень выбирал исходя из объёма памяти. Мне её нужно много. В тоже время не хотелось ставить внешнюю.
В проекте много работы с памятью и сложными структурами в памяти. По сути свой менеджер работы с кучей, только специализированный. Большой объём адресной математики.
Go to the top of the page
 
+Quote Post
proba
сообщение Jun 27 2009, 12:58
Сообщение #30


Местный
***

Группа: Участник
Сообщений: 358
Регистрация: 29-05-05
Пользователь №: 5 526



начал перевод проекта с авр на тмс320ф23027, резон в специфике периферии тмс-а а именно ацп 12бит 4,6 Mспс и хи-резо шим с разрешением 150 пс - периферия которого в арм не наити. я не вижу что арм и тмс конкуренты, спицифика слишком разное и техас сумел это отлично слить в периферию.

у ренесас очень многие мк имеют одинакую цоколевку 100 или 144 пин, от M16/30 > M16/62 > M32 > R32 > RX600; от 16мгц 16 битного до 100мгц 32b флоат ядра. но не поиму что помешало атмелу выпускать совместимыи ряд мк авр/арм/авр32 .

и последнее, перевод должен быть обоснован, это не только что арм на 1$ дешвле авр а надо видеть и др. расходы а их много и софт может не самыи дорогои среди их быть : новые пп, стенсилы, профили смд машин, се сертификат ( итд) и скоро поимете что экономии ? будет...

Сообщение отредактировал proba - Jun 27 2009, 13:52
Go to the top of the page
 
+Quote Post

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

 


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


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