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

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

Сообщение Akula »

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

Сообщение ARV »

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

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

Сообщение paskal »

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

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

Сообщение Alexeyslav »

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

Сообщение watchmaker »

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

Сообщение TICLIR »

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

Сообщение 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
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

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

Сообщение pcb »

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

Сообщение ARV »

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

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

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

Сообщение 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
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

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

Сообщение 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
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

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

Сообщение pcb »

Не суть.

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

Сообщение pcb »

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

А получаем:

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

Сообщение ARV »

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

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

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

Сообщение 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
Откуда: Млечный путь/Земля/РФ/Екатеринбург

Сообщение 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
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение 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»