WinAvr в вопросах и ответах
Re: WinAvr в вопросах и ответах
Задействую в проекте все три таймера МК. Столкнулся с ситуацией - если два таймера к примеру Timer2 и Timer1 настроены на один коэффициент предделителя, то прерывания для таймеров не выполняются ни в симуляторе ни в "железе". Это нормально?
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
это не нормально. ищите ошибку.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- paskal
- Нашел транзистор. Понюхал.
- Сообщения: 160
- Зарегистрирован: Пн сен 05, 2011 10:03:06
- Откуда: Тула
Re: WinAvr в вопросах и ответах
Перевожу свой старый проект с ассемблера на си.
Столкнулся с такой проблемой. В обработчике прерывания меняется некоторый счетчик. В основной программе этот счетчик проверяю. Он не меняется! Но прерывание возникает, счетчик в прерывании меняется - это проверено. Счетчик объявлен как глобальная переменная типа unsigned char. Такое ощущение что в программе и в обработчике это разные переменные.
Вопрос: как же завести переменную чтоб пользоваться ей и в прерывании, и в основной программе?
Столкнулся с такой проблемой. В обработчике прерывания меняется некоторый счетчик. В основной программе этот счетчик проверяю. Он не меняется! Но прерывание возникает, счетчик в прерывании меняется - это проверено. Счетчик объявлен как глобальная переменная типа unsigned char. Такое ощущение что в программе и в обработчике это разные переменные.
Вопрос: как же завести переменную чтоб пользоваться ей и в прерывании, и в основной программе?
Если бы на станции "Мир" стояли Винды, она бы еще висела и висела...
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: WinAvr в вопросах и ответах
Вроде есть волшебное слово volatile ...
-
watchmaker
- Поставщик валерьянки для Кота
- Сообщения: 2182
- Зарегистрирован: Вс ноя 15, 2009 23:13:59
- Откуда: Харьков
- Контактная информация:
Re: WinAvr в вопросах и ответах
Именно volatile. Кстати, старые версии WinAVR игнорировали это свойство - в версиях за 2006 год его можно было не писать. А вот в версиях 2009 года и позже - обязательно. Сам наткнулся пару лет назад, когда перекомпилировал рабочий проект новым компилятором.
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
- Реклама
Re: WinAvr в вопросах и ответах
Добрый вечер, проблема в записи прерываний PCINT на ATmega88, делаю запись токого плана
ISR(PCINT3_vect){} WinAVR-20100110 выдаёт предупреждение что написано с орфографической ошибкой
подскажите как правильно сделать запись?
Спасибо, методом втыка сообразил ISR(PCINT0_vect){}, т.е. получаеться делеться по группам
ISR(PCINT3_vect){} WinAVR-20100110 выдаёт предупреждение что написано с орфографической ошибкой
подскажите как правильно сделать запись?
Спасибо, методом втыка сообразил ISR(PCINT0_vect){}, т.е. получаеться делеться по группам
-
pcb
- Опытный кот
- Сообщения: 833
- Зарегистрирован: Пт авг 12, 2011 09:14:27
- Откуда: Млечный путь/Земля/РФ/Екатеринбург
Re: WinAvr в вопросах и ответах
Решил обновить 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)
Жуть, новые версии раздувают код.
Опции компиляции одинковые, менялась только версия компилятора...
Небольшое сравнение произвёл:
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 ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
интересно. а какие именно опции использовались?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
pcb
- Опытный кот
- Сообщения: 833
- Зарегистрирован: Пт авг 12, 2011 09:14:27
- Откуда: Млечный путь/Земля/РФ/Екатеринбург
Re: WinAvr в вопросах и ответах
Вот такие:
- Вложения
-
- WinAVR.JPG
- (42.75 КБ) 304 скачивания
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
а что в параметрах линкера?
-ffunction-sections без -Wl,-gc-sections бесполезна!
я последний свой проект сделал именно на атмеловском тулчейне (исключительно из-за встроенной поддержки __flash), но размерами не был поражен... хотелось бы разобраться...
-ffunction-sections без -Wl,-gc-sections бесполезна!
я последний свой проект сделал именно на атмеловском тулчейне (исключительно из-за встроенной поддержки __flash), но размерами не был поражен... хотелось бы разобраться...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
pcb
- Опытный кот
- Сообщения: 833
- Зарегистрирован: Пт авг 12, 2011 09:14:27
- Откуда: Млечный путь/Земля/РФ/Екатеринбург
Re: WinAvr в вопросах и ответах
4.3.3 (последняя версия винавр) -Вл не знает, отказывается компилировать, остальные игнорирует.ARV писал(а):а что в параметрах линкера?
-ffunction-sections без -Wl,-gc-sections бесполезна!
остальные два на размер никак не повлияли на новых тулах.
Код вручную поотимизировал получил:
Код: Выделить всё
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 ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
-Wl,-gc-sections должна стоять в разделе опций линкера - отлично эти опции понимаются компилятором, ибо это GCC-шная опция, общая для всех GCC-компиляторов. кроме того, я лично использую ее, и она воспринимается. только набирать ее надо точно так, как я написал: без пробелов и т.п. самодеятельности!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
pcb
- Опытный кот
- Сообщения: 833
- Зарегистрирован: Пт авг 12, 2011 09:14:27
- Откуда: Млечный путь/Земля/РФ/Екатеринбург
Re: WinAvr в вопросах и ответах
Оно там изначально стояло.
Когда указываете опции для всех файлов, компилятор забирает свои, линковщик свои...
на размер оно не влияет, в моём случае, т.к. старый винавр, он их не знает.
Сейчас 4.9 качну.
Качнул:
avr-gcc-4.9.2: error: unrecognized command line option '-Wl'
2548 байт ))
Когда указываете опции для всех файлов, компилятор забирает свои, линковщик свои...
на размер оно не влияет, в моём случае, т.к. старый винавр, он их не знает.
Сейчас 4.9 качну.
Качнул:
avr-gcc-4.9.2: error: unrecognized command line option '-Wl'
2548 байт ))
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
Либо вы ошибаетесь, считая, что студия (вы же скриншот студийных настроек компиляции привели) распределяет опции автоматом, либо ошибаетесь при вводе опции. НЕ МОЖЕТ ЭТА ОПЦИЯ НЕ ПОДДЕРЖИВАТЬСЯ!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
pcb
- Опытный кот
- Сообщения: 833
- Зарегистрирован: Пт авг 12, 2011 09:14:27
- Откуда: Млечный путь/Земля/РФ/Екатеринбург
Re: WinAvr в вопросах и ответах
Не суть.
Тут, с размерами прошивок что то делать нужно.
Тут, с размерами прошивок что то делать нужно.
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-
pcb
- Опытный кот
- Сообщения: 833
- Зарегистрирован: Пт авг 12, 2011 09:14:27
- Откуда: Млечный путь/Земля/РФ/Екатеринбург
Re: WinAvr в вопросах и ответах
Настройки в приложении
А получаем:
avr-gcc: error: unrecognized command line option '-Wl'
make: *** [ашду.elf] Îøèáêà 1
Build failed with 1 errors and 4 warnings...
А получаем:
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 ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
я же вам писал, что нужно опцию 1 в 1 вписывать, без пробелов и т.п., а вы вообще одну на две разбили, и хотите, чтобы оно работало!
да, и еще: если 5-10% прироста быстродействия не являются для вас критически важным, используйте оптимизацию -Os и вот тогда сравниваейте РАЗМЕР КОДА. а с опцией -O2 нужно сравнивать соотношение размер/быстродействие, а для быстродействия применять -O3 и тогда сравнивать только по быстродействию
да, и еще: если 5-10% прироста быстродействия не являются для вас критически важным, используйте оптимизацию -Os и вот тогда сравниваейте РАЗМЕР КОДА. а с опцией -O2 нужно сравнивать соотношение размер/быстродействие, а для быстродействия применять -O3 и тогда сравнивать только по быстродействию
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
pcb
- Опытный кот
- Сообщения: 833
- Зарегистрирован: Пт авг 12, 2011 09:14:27
- Откуда: Млечный путь/Земля/РФ/Екатеринбург
Re: WinAvr в вопросах и ответах
Ещё подчистил алгоритмы, получил:
Новые тулчейны всё равно не укладываются...
Вроде даже работает
Новые тулчейны всё равно не укладываются...
Код: Выделить всё
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 ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-
pcb
- Опытный кот
- Сообщения: 833
- Зарегистрирован: Пт авг 12, 2011 09:14:27
- Откуда: Млечный путь/Земля/РФ/Екатеринбург
Re: WinAvr в вопросах и ответах
Ох жешь...ARV писал(а):я же вам писал, что нужно опцию 1 в 1 вписывать, без пробелов и т.п., а вы вообще одну на две разбили, и хотите, чтобы оно работало!
Это 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% прироста быстродействия не являются для вас критически важным
Потому выкраиваю байты.
Листинг, конечно же, я смотрю, чего нагццил компилятор, потому уже из 1970 (винавр) до 1740 оптимизировал,
с новыми не получается.
Флаг -0s:ARV писал(а):да, и еще: если 5-10% прироста быстродействия не являются для вас критически важным, используйте оптимизацию -Os
Код: Выделить всё
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)
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
ну, про рекомендованные мной опции - это вполне вероятно, что они не помогли, т.к. они убирают лишние секции кода и данных, которые вы создаете при помощи опций -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?
что касается вашей задачи, то я бы рекомендовал включить -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?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


