Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Подниму тему WinAVR vs IAR

Непрочитано 24.09.2009, 18:07  
oleg110592
Гражданин KAZUS.RUN
 
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
oleg110592 на пути к лучшему
По умолчанию Подниму тему WinAVR vs IAR

Начало тут https://kazus.run/forums/showthread.php?t=13936.
Есть сейчас у меня задача простенького терморегулятора на MEGA48 + DS18b20.
Решил параллельно пробовать на WinAVR и на IAR.
Первое что бросилось в глаза - WinAVR 2006 дает немного меньшего размера код чем WinAVR 2009. Решенно - делаю на WinAVR 2006 (все сделано по умолчанию в AVR Studio) и IAR AVR 5.20.
Исходники стараюсь делать максимально одинаковыми.
Под DS18b20 использовал код автора, которого не знаю (спасибо ему за это).
Написал пока только получение данных с 18b20 и вывод температуры на 3-х разрядный семисегментный индикатор.
Итоги компиляции:
WinAVR:
AVR Memory Usage
Device: atmega48
Program: 790 bytes (19.3% Full)
(.text + .data + .bootloader)
Data: 3 bytes (0.6% Full)
(.data + .bss + .noinit)
Build succeeded with 0 Warnings...
----------------------------------------------------
IAR:
IAR Universal Linker V4.61L/W32
Copyright (C) 1987-2009 IAR Systems AB.
748 bytes of CODE memory (+ 18 range fill )
67 bytes of DATA memory (+ 23 absolute )
Errors: none
Warnings: none
-----------------------------------------------------
IAR выиграл 42 байта
и самое интересное - прошивка IAR работает - т.е. показывает температуру в комнате,
прошивка WinAVR не работает - показывает на индикаторе 255.
Спецы по WinAVR помогите - оба проекта вложил.
Вложения:
Тип файла: zip Proects.zip (79.5 Кб, 225 просмотров)
Реклама:
oleg110592 вне форума  
Сказали "Спасибо" oleg110592
AndryG (17.12.2009)
Непрочитано 24.09.2009, 19:54  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Подниму тему WinAVR vs IAR(+)

Одинаково писать не получится. Вы зачем то под переменные регистры выделяете, не почитав хелп. Регистровыми переменными в ГЦЦ вообще не рекомендуется пользоваться, а регистрами выше R7 особенно - они используются компилятором.
Так что то, что не работает неудивительно. Я еще детально не разбирался, уж больно стиль написания тяжелый. Кстати и результат будет в любом случае отвратительный - подмаргивающий индикатор даже при неизменной температуре и прочие радости.
А свежие сборки WinAvr дают все же более компактный код, просто там много расширений. Типа __attribute__ ((OS_main)) - сразу около 20 байт сокращает. В одной единственной функции. SIGNAL - давно устарел, нужен ISR. Где Вы такой лохматый компилятор выкопали?

Последний раз редактировалось kison; 24.09.2009 в 20:00.
kison вне форума  
Непрочитано 24.09.2009, 21:56  
oleg110592
Гражданин KAZUS.RUN
 
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
oleg110592 на пути к лучшему
По умолчанию Re: Подниму тему WinAVR vs IAR(+)

Попробовал WinAVR 2007:
Program: 714 bytes (17.4% Full)
но не работает.
Заменил регистровые переменные обычными + volatile
код:
Program: 834 bytes (20.4% Full)
РАБОТАЕТ.

2 kison - спасибо буду разбираться дальше. Индикатор не моргает

__attribute__ ((OS_main)) поставил перед main() - правильно? Где читать про расширения? В avr-libc-user-manual сходу не нашел.
С __attribute__ ((OS_main)):
Program: 832 bytes (20.3% Full)
РАБОТАЕТ.
oleg110592 вне форума  
Непрочитано 24.09.2009, 22:53  
kison
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.12.2004
Сообщений: 3,168
Сказал спасибо: 11
Сказали Спасибо 691 раз(а) в 503 сообщении(ях)
kison на пути к лучшему
По умолчанию Re: Подниму тему WinAVR vs IAR

Сообщение от oleg110592 Посмотреть сообщение
аменил регистровые переменные обычными + volatile
Volatile нужен только для Flags. Для остальных нет ожидания изменения переменной.
Ну и раз мы решили воспользоваться ГЦЦ, который куда бережнее обходится с ОЗУ, то можно в съэкономленное озу поместить знакогенератор Которому все равно в хидере не место - хидер априори может быть подключен к нескольким с файлам. И в каждом нужно отдельный знакогенератор делать? В хидере не должно быть ни создания переменных, ни кода функций за исключением инлайновых. Образец такой функции есть в delay.h.
В общем у меня получилось 762 байта кода и 22 байта ОЗУ. Я практически ничего не правил.
А мигать оно еще будет - когда появится асинхронный процесс типа связи по RS232 или т.п. При сбросе OneWire - 480мкс пауза может из за прерываний немного изменить свое значение В большую сторону ес-но. Если же на это время запрещать прерывания - мигаем индикатором.

Последний раз редактировалось kison; 24.09.2009 в 22:57.
kison вне форума  
Сказали "Спасибо" kison
oleg110592 (25.09.2009)
Непрочитано 24.10.2015, 12:48  
Willmro
Заблокирован
 
Регистрация: 20.10.2015
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Willmro на пути к лучшему
По умолчанию Re: Подниму тему WinAVR vs IAR

регистрами выше R7 особенно - они используются компилятором.
ดูผลบอลสด
Willmro вне форума  
Непрочитано 24.10.2015, 14:06  
jump
Почётный гражданин KAZUS.RUN
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,011
Сказал спасибо: 0
Сказали Спасибо 4,955 раз(а) в 2,379 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: Подниму тему WinAVR vs IAR

Willmro,
чё сказать хотел, некрофил?
jump вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 18:40.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.