WinAvr в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Akula
Открыл глаза
Сообщения: 48
Зарегистрирован: Ср дек 09, 2009 20:48:46

Re: WinAvr в вопросах и ответах

Сообщение Akula »

Задействую в проекте все три таймера МК. Столкнулся с ситуацией - если два таймера к примеру Timer2 и Timer1 настроены на один коэффициент предделителя, то прерывания для таймеров не выполняются ни в симуляторе ни в "железе". Это нормально?
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

это не нормально. ищите ошибку.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
paskal
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пн сен 05, 2011 10:03:06
Откуда: Тула

Re: WinAvr в вопросах и ответах

Сообщение paskal »

Перевожу свой старый проект с ассемблера на си.
Столкнулся с такой проблемой. В обработчике прерывания меняется некоторый счетчик. В основной программе этот счетчик проверяю. Он не меняется! Но прерывание возникает, счетчик в прерывании меняется - это проверено. Счетчик объявлен как глобальная переменная типа unsigned char. Такое ощущение что в программе и в обработчике это разные переменные.

Вопрос: как же завести переменную чтоб пользоваться ей и в прерывании, и в основной программе?
Если бы на станции "Мир" стояли Винды, она бы еще висела и висела...
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Alexeyslav »

Вроде есть волшебное слово volatile ...
Реклама
Эиком - электронные компоненты и радиодетали
watchmaker
Поставщик валерьянки для Кота
Сообщения: 2182
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Откуда: Харьков
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение watchmaker »

Именно volatile. Кстати, старые версии WinAVR игнорировали это свойство - в версиях за 2006 год его можно было не писать. А вот в версиях 2009 года и позже - обязательно. Сам наткнулся пару лет назад, когда перекомпилировал рабочий проект новым компилятором.
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
Реклама
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

Re: WinAvr в вопросах и ответах

Сообщение TICLIR »

Добрый вечер, проблема в записи прерываний PCINT на ATmega88, делаю запись токого плана
ISR(PCINT3_vect){} WinAVR-20100110 выдаёт предупреждение что написано с орфографической ошибкой
подскажите как правильно сделать запись?
Спасибо, методом втыка сообразил ISR(PCINT0_vect){}, т.е. получаеться делеться по группам
Реклама
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Re: WinAvr в вопросах и ответах

Сообщение pcb »

Решил обновить WinAVR (2010), на тулчаины от Атмел.
Небольшое сравнение произвёл:

4.3.3
AVR Memory Usage
----------------
Device: attiny2313

Program: 1984 bytes (96.9% Full)
(.text + .data + .bootloader)

Data: 78 bytes (60.9% Full)
(.data + .bss + .noinit)

EEPROM: 68 bytes (53.1% Full)
(.eeprom)



4.7.2
AVR Memory Usage
----------------
Device: attiny2313

Program: 2332 bytes (113.9% Full)
(.text + .data + .bootloader)

Data: 94 bytes (73.4% Full)
(.data + .bss + .noinit)

EEPROM: 68 bytes (53.1% Full)
(.eeprom)


4.8.2
AVR Memory Usage
----------------
Device: attiny2313

Program: 2446 bytes (119.4% Full)
(.text + .data + .bootloader)

Data: 94 bytes (73.4% Full)
(.data + .bss + .noinit)

EEPROM: 68 bytes (53.1% Full)
(.eeprom)

Жуть, новые версии раздувают код.

Опции компиляции одинковые, менялась только версия компилятора...
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

интересно. а какие именно опции использовались?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Re: WinAvr в вопросах и ответах

Сообщение pcb »

Вот такие:
Вложения
WinAVR.JPG
(42.75 КБ) 304 скачивания
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

а что в параметрах линкера?
-ffunction-sections без -Wl,-gc-sections бесполезна!

я последний свой проект сделал именно на атмеловском тулчейне (исключительно из-за встроенной поддержки __flash), но размерами не был поражен... хотелось бы разобраться...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Re: WinAvr в вопросах и ответах

Сообщение pcb »

ARV писал(а):а что в параметрах линкера?
-ffunction-sections без -Wl,-gc-sections бесполезна!
4.3.3 (последняя версия винавр) -Вл не знает, отказывается компилировать, остальные игнорирует.

остальные два на размер никак не повлияли на новых тулах.

Код вручную поотимизировал получил:

Код: Выделить всё

AVR Memory Usage
----------------
Device: attiny2313

Program:    1934 bytes (94.4% Full)
(.text + .data + .bootloader)

Data:         78 bytes (60.9% Full)
(.data + .bss + .noinit)

EEPROM:       68 bytes (53.1% Full)
(.eeprom)

новые тулчейны всё равно не вписываются...
Последний раз редактировалось pcb Ср мар 18, 2015 15:23:38, всего редактировалось 1 раз.
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

-Wl,-gc-sections должна стоять в разделе опций линкера - отлично эти опции понимаются компилятором, ибо это GCC-шная опция, общая для всех GCC-компиляторов. кроме того, я лично использую ее, и она воспринимается. только набирать ее надо точно так, как я написал: без пробелов и т.п. самодеятельности!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Re: WinAvr в вопросах и ответах

Сообщение pcb »

Оно там изначально стояло.

Когда указываете опции для всех файлов, компилятор забирает свои, линковщик свои...

на размер оно не влияет, в моём случае, т.к. старый винавр, он их не знает.

Сейчас 4.9 качну.

Качнул:
avr-gcc-4.9.2: error: unrecognized command line option '-Wl' :idea:
2548 байт ))
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

Либо вы ошибаетесь, считая, что студия (вы же скриншот студийных настроек компиляции привели) распределяет опции автоматом, либо ошибаетесь при вводе опции. НЕ МОЖЕТ ЭТА ОПЦИЯ НЕ ПОДДЕРЖИВАТЬСЯ!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Re: WinAvr в вопросах и ответах

Сообщение pcb »

Не суть.

Тут, с размерами прошивок что то делать нужно.
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Re: WinAvr в вопросах и ответах

Сообщение pcb »

Настройки в приложении

А получаем:

avr-gcc: error: unrecognized command line option '-Wl'
make: *** [ашду.elf] Îøèáêà 1
Build failed with 1 errors and 4 warnings...
Вложения
wl.JPG
(38.64 КБ) 339 скачиваний
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

я же вам писал, что нужно опцию 1 в 1 вписывать, без пробелов и т.п., а вы вообще одну на две разбили, и хотите, чтобы оно работало!

да, и еще: если 5-10% прироста быстродействия не являются для вас критически важным, используйте оптимизацию -Os и вот тогда сравниваейте РАЗМЕР КОДА. а с опцией -O2 нужно сравнивать соотношение размер/быстродействие, а для быстродействия применять -O3 и тогда сравнивать только по быстродействию :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Re: WinAvr в вопросах и ответах

Сообщение pcb »

Ещё подчистил алгоритмы, получил:
Новые тулчейны всё равно не укладываются...

Код: Выделить всё


AVR Memory Usage
----------------
Device: attiny2313

Program:    1740 bytes (85.0% Full)
(.text + .data + .bootloader)

Data:         78 bytes (60.9% Full)
(.data + .bss + .noinit)

EEPROM:       68 bytes (53.1% Full)
(.eeprom)
Вроде даже работает
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
pcb
Опытный кот
Сообщения: 833
Зарегистрирован: Пт авг 12, 2011 09:14:27
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Re: WinAvr в вопросах и ответах

Сообщение pcb »

ARV писал(а):я же вам писал, что нужно опцию 1 в 1 вписывать, без пробелов и т.п., а вы вообще одну на две разбили, и хотите, чтобы оно работало!
Ох жешь... :idea:

Это 4.7.2

Код: Выделить всё

AVR Memory Usage
----------------
Device: attiny2313

Program:    1942 bytes (94.8% Full)
(.text + .data + .bootloader)

Data:         92 bytes (71.9% Full)
(.data + .bss + .noinit)

EEPROM:       68 bytes (53.1% Full)
(.eeprom)
Никакого уменьшения кода.
ARV писал(а):если 5-10% прироста быстродействия не являются для вас критически важным
У меня один только кусок критичный, в нужное время укладывается, а нужный функционал - нет :tea:
Потому выкраиваю байты.
Листинг, конечно же, я смотрю, чего нагццил компилятор, потому уже из 1970 (винавр) до 1740 оптимизировал,
с новыми не получается.
ARV писал(а):да, и еще: если 5-10% прироста быстродействия не являются для вас критически важным, используйте оптимизацию -Os
Флаг -0s:

Код: Выделить всё

AVR Memory Usage
----------------
Device: attiny2313

Program:    1772 bytes (86.5% Full)
(.text + .data + .bootloader)

Data:         78 bytes (60.9% Full)
(.data + .bss + .noinit)

EEPROM:       68 bytes (53.1% Full)
(.eeprom)
Ага, уменьшился ))))))) аж на +30 байт )))
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

ну, про рекомендованные мной опции - это вполне вероятно, что они не помогли, т.к. они убирают лишние секции кода и данных, которые вы создаете при помощи опций -ffunction-sections и -fdata-sections. естественно, если лишних секций у вас нет - не будет и уменьшения кода. я рекомендовал опцию использовать обязательно, т.к. две предыдущие без нее просто бессмысленные.

что касается вашей задачи, то я бы рекомендовал включить -Os и не выключать ее никогда, а критичные к скорости участки оптимизировать либо алгоритмически, либо при помощи ассемблерных вставок или ассемблерных модулей.

для WinAVR (не Toolchain) могу рекомендовать еще следующие варианты тюнинга (правда, я никогда не пытался ими пользоваться без -Os):
1. -mcall-prologues во многих случаях дает выигрыш в размере кода за счет небольшого (2-4 такта) проигрыша в быстродейсвтии
2. -fno-split-wide-types лично мне помогало во всех проектах, где используется активная математика с числами типа int и более
3. --param inline-call-cost=n игры со значением n в этом параметре в пределах от 0 до 6 (можно и больше, но мне никогда не помогало) иной раз дает до 20% выигрыша в размере кода! как сказывается на скорости - не знаю
4. -fno-unroll-loops вы, по-моему, и так используете...
попробуйте перечисленные выше варианты в разных комбинациях - часто бывает, что опции, которые дают наилучший эффект поотдельности, совместно приводят к совсем иному эффекту... бывает и наоборот :)))

это я рекомендую чисто компиляторскими методами оптимизировать, алгоритмически - думаю, вы и сами умеете...

P.S. кстати, у вас много модулей в программе или один? если один - все ли функции у вас объявлены static?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

Вернуться в «AVR»