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

 
 
6 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Порты AVR и компиляция
defunct
сообщение Sep 27 2007, 13:10
Сообщение #16


кекс
******

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



Цитата(Qwertty @ Sep 27 2007, 15:58) *
Ну да - __flash, __eeprom на порядок превосходят EEMEM, PROGMEM smile.gif

Вы хотите сказать, что в WinAvr уже можно EEMEM или PROGMEM переменную просто взять и присвоить обычной переменной без использования read_eeprom_byte и прочих вспомогательных функций?

В IAR можно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 27 2007, 14:23
Сообщение #17


Гуру
******

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



Цитата(Qwertty @ Sep 27 2007, 15:58) *
Ну да - __flash, __eeprom на порядок превосходят EEMEM, PROGMEM smile.gif
На два. defunct объяснил почему.
Цитата(Qwertty @ Sep 27 2007, 15:58) *
С ИАР-ом же придется в большинстве случаев решать все проблемы самому - типа файловых систем и т.п. Ну или адаптировать код от Winavr smile.gif
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)
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 27 2007, 14:48
Сообщение #18


дятел
*****

Группа: Свой
Сообщений: 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,
но никто не соглашается sad.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 27 2007, 15:14
Сообщение #19


кекс
******

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



Цитата(singlskv @ Sep 27 2007, 17:48) *
А как дела обстоят в IAR c обратной операцией, те присвоением переменной __flash или
__eeprom значения обычной переменной ?


Код
__flash char flChar;
__eeprom char eeChar;
char Ch;

int main( void )
{
  eeChar = Ch;  // <--- OK
  flChar = Ch;  // <-- Error [Ta015] Cannot write to flash memory
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 27 2007, 15:27
Сообщение #20


дятел
*****

Группа: Свой
Сообщений: 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мс.
Привыкнув к такой простоте, программер не будет такое присваивание
употреблять например в прерываниях ?
ИТД...
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 27 2007, 15:33
Сообщение #21


кекс
******

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



Цитата(singlskv @ Sep 27 2007, 18:27) *
eeChar = Ch , Вам не кажется что такая запись просто вводит в заблуждение программера ?

Это был просто ответ на ваш вопрос. А так мне кажется, что одиночному "чару" вне функции вообще нечего делать. Сколько-нибудь уважающий себя "программер" волен объявить структуру с подобающим именем, которое будет кричать о том, что поля располагаются в eeprom.

Цитата
Привыкнув к такой простоте, программер не будет такое присваивание употреблять например в прерываниях ?

Это из оперы - программисты не ищут простых путей? Или как понимать?
Давайте также покритикуем возможность винды выделять гигабайтные массивы, ведь программист выделивший такой массив может думать, что весь массив лежит в ОП.

PS: к сожалению мне редко приходится наслаждаться возможностями IAR'а, потому что конечный продукт у меня собирается в WinAvr. При портировании с IAR'а на WinAvr частенько приходится поматериться sad.gif в местах работы со строками во флеш и данными в eeprom.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Sep 27 2007, 16:23
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 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". smile.gif
Меня лично не напрягают eeprom_read_byte(), зато помогают больше работать с указателями, что в итоге дает более быстрый и компактный код. При портировании проектов с IAR результирующий размер практически одинаков, но как-то было преимущество WinAvr процентов на 10.
И главное - мне не надо искать кряки, пилюли, пургены успокаивать совесть типа - ничего, у них и так денег много... Чистая совесть это тоже немало.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 27 2007, 16:32
Сообщение #23


дятел
*****

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



Цитата(defunct @ Sep 27 2007, 19:33) *
Это был просто ответ на ваш вопрос. А так мне кажется, что одиночному "чару" вне функции вообще нечего делать. Сколько-нибудь уважающий себя "программер" волен объявить структуру с подобающим именем, которое будет кричать о том, что поля располагаются в eeprom.
Вопрос все-таки был не о именовании структуры с кричащим именем
EEPROM_xxx, а о том что присвоение переменной хранящейся в EEROM занимает кучу времени.
Цитата
Это из оперы - программисты не ищут простых путей? Или как понимать?
Давайте также покритикуем возможность винды выделять гигабайтные массивы, ведь программист выделивший такой массив может думать, что весь массив лежит в ОП.
Нет, это из оперы что программисты должны понимать чем это грозит.
Цитата
PS: к сожалению мне редко приходится наслаждаться возможностями IAR'а, потому что конечный продукт у меня собирается в WinAvr. При портировании с IAR'а на WinAvr частенько приходится поматериться sad.gif в местах работы со строками во флеш и данными в eeprom.
Дык переходите на Gcc, и будет Вам счастье smile.gif
Не, я почти серьезно.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Sep 27 2007, 16:36
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(Сергей Борщ @ Sep 27 2007, 18:23) *
На два. defunct объяснил почему.

Ну-ну... Про преимущества CV- выше smile.gif
Цитата(Сергей Борщ @ 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 килобайта свободно, то мне кажется тут что-то не то smile.gif
Цитата(Сергей Борщ @ Sep 27 2007, 18:23) *
С точностью до наоборот. Вот уж что-что, а инлайн асм у WinAVR шикарный, а у IAR вообще никакой и они сами его не рекомендуют. А в обработке отдельного асм-исходника возможности у них практически одинаковые.

Возможно, что с ассемблером в ИАР тоже не все хорошо, я сам вставок в нем не делал, только видел чужие. Они не показались мне уж такими страшными. А вот WinAvr-овские вещь тяжелая, я предпочитаю ими не пользоваться. Все выношу в S файл.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 27 2007, 17:49
Сообщение #25


дятел
*****

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



Цитата(Qwertty @ Sep 27 2007, 20:36) *
Значит если я хочу ездить на машине, мне нужно ее купить, разобрать,собрать, ведь я так глубже вникну в ее устройство. Мне нужно например подключить харддрайв, считать один файл,и может больше никогда в жизни мне это не понадобиться.
Ездить тоже можно по
разному, можно просто купить и ездить не о чем не задумываясь, чисто для своего удовольствия,
а можно и разобрать/собрать, понять как оно работает, ну и дальше выбрать
для себя, или ездить для удовольствия, или гонятся професионально...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Sep 27 2007, 20:02
Сообщение #26


Гуру
******

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



Есть ещё один момент для WinAvr. Только за последних пару лет его пересобирали раз десять. Регулярно что-то меняли в том числе координальное. Так что насчёт совместимости и большого количества проектов это не вся правда. Править придётся. То там то тут выскакивают сообщения - пересобрал - неработает. Работать с ним отнюдь не легче чем с IARом. Хотя и IAR к числу лёгких в освоении пакетов не относится. Документация разбросана по всему интернету. Никакой упорядоченности. Что-то надо - полез искать. Чаще всего если и найдёшь, то в каком нибудь FAQе.

Короче очень геморойная вещь. Ясно что если освоил, то тогда нормально.

Выпад по поводу данных в EEPROM и FLASH - явно бредовый. Удобная вещь - она всегда удобная.

Зачем мне для обращения к Flash переменной обращаться ч/з подпрограмму? А если у меня в одной формуле/операторе используются переменные Flash и RAM? Например знакогенератор в видеоозу вывожу. IAR отличный код генерит и прекрасно оптимизирует такие места. А чтобы по ошибке не использовать переменные EEPROM, выход простой. defunct его фактически указал. Обзавите переменную eeMyInt. И всё для вас будет ясно.

Это просто яркий пример как можно всё с ног на голову поставить.
Go to the top of the page
 
+Quote Post
kv_addr
сообщение Sep 27 2007, 20:15
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 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;
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 27 2007, 20:51
Сообщение #28


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Увы! Началась религиозная война!
По поводу автоматической генерации кода: пришлось использовать CodeWarrior для MC56F8346. Есть для него ProcessorExpert. Если скорость не важна, а важно быстро что-то сделать, то работает хорошо. Если аппаратные ресурсы заняты сильно, то не работала программа: из-за накладных расходов автоматической кодогенерации. В CV такая же ситуация или нет? Если большие накладные расходы, то есть ли смысл в больших проектах использовать?


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 28 2007, 08:27
Сообщение #29


Гуру
******

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



Цитата(Qwertty @ Sep 27 2007, 19:36) *
Ну-ну... Про преимущества CV- выше smile.gif
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 килобайта свободно, то мне кажется тут что-то не то smile.gif
Вы меня не поняли. ИАР выдал код размером ~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)
Go to the top of the page
 
+Quote Post
Marian
сообщение Sep 28 2007, 15:16
Сообщение #30


Частый гость
**

Группа: Участник
Сообщений: 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
несоставит труда.
Go to the top of the page
 
+Quote Post

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

 


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


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