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

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

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

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

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

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

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

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

Начало тут https://kazus.ru/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.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
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.RU
 
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
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.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
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.RU
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,981
Сказал спасибо: 0
Сказали Спасибо 4,939 раз(а) в 2,369 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: Подниму тему WinAVR vs IAR

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

Закладки
Опции темы

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

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

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


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot