|
|
  |
Порты AVR и компиляция |
|
|
|
Sep 27 2007, 14:23
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Qwertty @ Sep 27 2007, 15:58)  Ну да - __flash, __eeprom на порядок превосходят EEMEM, PROGMEM  На два. defunct объяснил почему. Цитата(Qwertty @ Sep 27 2007, 15:58)  С ИАР-ом же придется в большинстве случаев решать все проблемы самому - типа файловых систем и т.п. Ну или адаптировать код от Winavr  1) При наличии опыта адаптация происходит быстро. 2) Все равно придется что-то править, а в процессе адаптации глубже вникаешь в чужие исходники. 3) По закону подлости нужный код будет под какой-нибудь третий компилятор и вообще не под AVR. 4) По размеру кода ИАР сильно обгоняет WinAVR (по личному опыту, последний эксперимент - AES loader AVR231 буквально вчера. У ИАРа остается свободное место в 2К области, у WinAVRа код вылазит почти на 1К). Цитата(Qwertty @ Sep 27 2007, 15:58)  У ИАРа одно преимущество - ассемблер встраивать легче. С точностью до наоборот. Вот уж что-что, а инлайн асм у WinAVR шикарный, а у IAR вообще никакой и они сами его не рекомендуют. А в обработке отдельного асм-исходника возможности у них практически одинаковые.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 27 2007, 14:48
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(defunct @ Sep 27 2007, 17:10)  Вы хотите сказать, что в WinAvr уже можно EEMEM или PROGMEM переменную просто взять и присвоить обычной переменной без использования read_eeprom_byte и прочих вспомогательных функций? В IAR можно. Цитата На два. defunct объяснил почему. А как дела обстоят в IAR c обратной операцией, те присвоением переменной __flash или __eeprom значения обычной переменной ? Цитата 4) По размеру кода ИАР сильно обгоняет WinAVR (по личному опыту, последний эксперимент - AES loader AVR231 буквально вчера. У ИАРа остается свободное место в 2К области, у WinAVRа код вылазит почти на 1К). Задачи таки разные бывают, я уже предлагал вариант задачки для сравнения IAR и WinAVR, но никто не соглашается
|
|
|
|
|
Sep 27 2007, 15:27
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(defunct @ Sep 27 2007, 19:14)  Отлично, Код __flash char flChar; __eeprom char eeChar; char Ch;
int main( void ) { eeChar = Ch; // <--- OK <--- сколько времени выполняется эта операция ??? flChar = Ch; // <-- Error [Ta015] Cannot write to flash memory <--- запись не из бутлодера ??? eeChar = Ch , Вам не кажется что такая запись просто вводит в заблуждение программера ? т.е. он то думает что присвоил значение и побежал дальше, а в реальности мы там ждем как минимум 3,5мс. Привыкнув к такой простоте, программер не будет такое присваивание употреблять например в прерываниях ? ИТД...
|
|
|
|
|
Sep 27 2007, 15:33
|

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

|
Цитата(singlskv @ Sep 27 2007, 18:27)  eeChar = Ch , Вам не кажется что такая запись просто вводит в заблуждение программера ? Это был просто ответ на ваш вопрос. А так мне кажется, что одиночному "чару" вне функции вообще нечего делать. Сколько-нибудь уважающий себя "программер" волен объявить структуру с подобающим именем, которое будет кричать о том, что поля располагаются в eeprom. Цитата Привыкнув к такой простоте, программер не будет такое присваивание употреблять например в прерываниях ? Это из оперы - программисты не ищут простых путей? Или как понимать? Давайте также покритикуем возможность винды выделять гигабайтные массивы, ведь программист выделивший такой массив может думать, что весь массив лежит в ОП. PS: к сожалению мне редко приходится наслаждаться возможностями IAR'а, потому что конечный продукт у меня собирается в WinAvr. При портировании с IAR'а на WinAvr частенько приходится поматериться  в местах работы со строками во флеш и данными в eeprom.
|
|
|
|
|
Sep 27 2007, 16:23
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(defunct @ Sep 27 2007, 17:10)  Вы хотите сказать, что в WinAvr уже можно EEMEM или PROGMEM переменную просто взять и присвоить обычной переменной без использования read_eeprom_byte и прочих вспомогательных функций?
В IAR можно. Согласен, можно. И в CV можно. А еще в CV можно сделать так - PORTB.1=1. Следуя Вашей логике- "CV на порядок превосходит IAR". Меня лично не напрягают eeprom_read_byte(), зато помогают больше работать с указателями, что в итоге дает более быстрый и компактный код. При портировании проектов с IAR результирующий размер практически одинаков, но как-то было преимущество WinAvr процентов на 10. И главное - мне не надо искать кряки, пилюли, пургены успокаивать совесть типа - ничего, у них и так денег много... Чистая совесть это тоже немало.
|
|
|
|
|
Sep 27 2007, 16:32
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(defunct @ Sep 27 2007, 19:33)  Это был просто ответ на ваш вопрос. А так мне кажется, что одиночному "чару" вне функции вообще нечего делать. Сколько-нибудь уважающий себя "программер" волен объявить структуру с подобающим именем, которое будет кричать о том, что поля располагаются в eeprom. Вопрос все-таки был не о именовании структуры с кричащим именем EEPROM_xxx, а о том что присвоение переменной хранящейся в EEROM занимает кучу времени. Цитата Это из оперы - программисты не ищут простых путей? Или как понимать? Давайте также покритикуем возможность винды выделять гигабайтные массивы, ведь программист выделивший такой массив может думать, что весь массив лежит в ОП. Нет, это из оперы что программисты должны понимать чем это грозит. Цитата PS: к сожалению мне редко приходится наслаждаться возможностями IAR'а, потому что конечный продукт у меня собирается в WinAvr. При портировании с IAR'а на WinAvr частенько приходится поматериться  в местах работы со строками во флеш и данными в eeprom. Дык переходите на Gcc, и будет Вам счастье  Не, я почти серьезно.
|
|
|
|
|
Sep 27 2007, 16:36
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(Сергей Борщ @ Sep 27 2007, 18:23)  На два. defunct объяснил почему. Ну-ну... Про преимущества CV- выше  Цитата(Сергей Борщ @ Sep 27 2007, 18:23)  1) При наличии опыта адаптация происходит быстро. 2) Все равно придется что-то править, а в процессе адаптации глубже вникаешь в чужие исходники. Значит если я хочу ездить на машине, мне нужно ее купить, разобрать,собрать, ведь я так глубже вникну в ее устройство. Мне нужно например подключить харддрайв, считать один файл,и может больше никогда в жизни мне это не понадобиться. Зачем мне вникать во внутреннее устройсто FAT32? А если и понадобиться, лет через 5-10, то все равно придется вникать заново. Цитата(Сергей Борщ @ Sep 27 2007, 18:23)  3) По закону подлости нужный код будет под какой-нибудь третий компилятор и вообще не под AVR. 4) По размеру кода ИАР сильно обгоняет WinAVR (по личному опыту, последний эксперимент - AES loader AVR231 буквально вчера. У ИАРа остается свободное место в 2К области, у WinAVRа код вылазит почти на 1К). Мое имхо - загрузчик должен вполне помещаться в бутовую область любых контроллеров мега. И если у ИАР загрузчик помещается в эти жалких 2 килобайта и еще 2 килобайта свободно, то мне кажется тут что-то не то  Цитата(Сергей Борщ @ Sep 27 2007, 18:23)  С точностью до наоборот. Вот уж что-что, а инлайн асм у WinAVR шикарный, а у IAR вообще никакой и они сами его не рекомендуют. А в обработке отдельного асм-исходника возможности у них практически одинаковые. Возможно, что с ассемблером в ИАР тоже не все хорошо, я сам вставок в нем не делал, только видел чужие. Они не показались мне уж такими страшными. А вот WinAvr-овские вещь тяжелая, я предпочитаю ими не пользоваться. Все выношу в S файл.
|
|
|
|
|
Sep 27 2007, 17:49
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Qwertty @ Sep 27 2007, 20:36)  Значит если я хочу ездить на машине, мне нужно ее купить, разобрать,собрать, ведь я так глубже вникну в ее устройство. Мне нужно например подключить харддрайв, считать один файл,и может больше никогда в жизни мне это не понадобиться. Ездить тоже можно по разному, можно просто купить и ездить не о чем не задумываясь, чисто для своего удовольствия, а можно и разобрать/собрать, понять как оно работает, ну и дальше выбрать для себя, или ездить для удовольствия, или гонятся професионально...
|
|
|
|
|
Sep 27 2007, 20:15
|

Местный
  
Группа: Свой
Сообщений: 208
Регистрация: 6-07-04
Из: Полтава
Пользователь №: 279

|
Цитата(Marian @ Sep 26 2007, 19:38)  CVAVR дает побитовый доступ к портам (правда в некоторых процах не ко всем)
PORTB.0 = 1; DDRB.3 = 0; Эквивалент в EWAVR: PORTB_Bit1 = 1; DDRB_Bit3 = 0;
|
|
|
|
|
Sep 28 2007, 08:27
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Qwertty @ Sep 27 2007, 19:36)  Ну-ну... Про преимущества CV- выше  1)Хорошо, но не совсем: не для всех потров такая конструкция работает, поэтому я не могу сделать, скажем, #define LED PORTA.1 а потом безболезненно изменить на #define LED PORTE.7, в то время как конструкция PORT |= (1 << BIT); с макросами поверх нее не страдает подобным недостаком. 2)Собственно на этом преимущества CV заканчиваются и его нельзя рассматривать как серьезный инструмент из-за отсутствия раздельной компиляции и всеми вытекающими несоответствиями стандарту. Вопрос обсуждался, я излагал подробные аргументы. Если интересно, поищите по ключевому слову CV и моему имени. Цитата(Qwertty @ Sep 27 2007, 19:36)  Значит если я хочу ездить на машине, мне нужно ее купить, разобрать,собрать, ведь я так глубже вникну в ее устройство. Если мы говорим о любительстве - не за чем Но не уверен, что у любителя все пойдет сразу и без доработок напильником. Если о профессиональной работе - не помешает. Цитата(Qwertty @ Sep 27 2007, 19:36)  Мое имхо - загрузчик должен вполне помещаться в бутовую область любых контроллеров мега. И если у ИАР загрузчик помещается в эти жалких 2 килобайта и еще 2 килобайта свободно, то мне кажется тут что-то не то  Вы меня не поняли. ИАР выдал код размером ~1800 байт, WinAVR - около 2700. Цитата(Qwertty @ Sep 27 2007, 19:36)  Возможно, что с ассемблером в ИАР тоже не все хорошо, я сам вставок в нем не делал, только видел чужие. Они не показались мне уж такими страшными. Естественно. Чем примитивнее инструмент, тем меньше вы им можете сделать. Вот цитата из мануала: Цитата Inline assembler is therefore often best avoided. If there is no suitable intrinsic function available, we recommend the use of modules written in assembler language instead of inline assembler, because the function call to an assembler routine normally causes less performance reduction. Цитата(Qwertty @ Sep 27 2007, 19:36)  А вот WinAvr-овские вещь тяжелая, я предпочитаю ими не пользоваться. Все выношу в S файл. Если вы не умеете пользоваться инструментом потому, что он слишком сложный - это не значит, что инструмент плохой. На уровне ИАРовского инлайн-асма вы в винавре напишете ровно столько же и практически так же.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 28 2007, 15:16
|

Частый гость
 
Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618

|
Цитата(Сергей Борщ @ Sep 28 2007, 11:27)  1)Хорошо, но не совсем: не для всех потров такая конструкция работает, поэтому я не могу сделать, скажем, #define LED PORTA.1 а потом безболезненно изменить на #define LED PORTE.7, в то время как конструкция PORT |= (1 << BIT); с макросами поверх нее не страдает подобным недостаком. Я не рекламирую CVAVR, но работать можно и на нем. Я и писал Цитата CVAVR дает побитовый доступ к портам (правда в некоторых процах не ко всем) но заменить например в Atmege16 : #define LED PORTA.1 на #define LED PORTD.3 несоставит труда.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|