Например TDA7294

Форум РадиоКот • Просмотр темы - WinAvr в вопросах и ответах
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 08:39:35

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 2102 ]     ... , , , 99, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вс дек 25, 2016 17:22:31 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Действительно, заработало.
Какой-то капризный компилятор, cvavr в этом отношении проще.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вс дек 25, 2016 19:18:25 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Dimon456 писал(а):
Какой-то капризный компилятор, cvavr в этом отношении проще
он не капризный, он просто не любит, когда не соблюдают правила языка Си.

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вс дек 25, 2016 20:20:21 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
ARV писал(а):
Dimon456 писал(а):
Какой-то капризный компилятор, cvavr в этом отношении проще
он не капризный, он просто не любит, когда не соблюдают правила языка Си.
И какое же правило языка СИ я нарушил?

Я объявил глобальную переменную
Код:
unsigned int last_millis=0;
куда уж глобальнее?

До winavr я использовал cvavr (возьмите мой код и прогоните через cvavr и он будет работать в таком состоянии в котором есть), с тем проблем не было, не удивительно что с этим вы используете wdt_enable с wdt_reset.

Судя из этой статьи http://chipenable.ru/index.php/item/60 этот компилятор тоит еще те подводные камни.

Странно то что в одном случае
Код:
unsigned int last_millis=0;
работает, в другом нет, надо
Код:
volatile unsigned int last_millis=0;
.
Странный компилятор.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вс дек 25, 2016 20:36:14 
Вымогатель припоя
Аватар пользователя

Карма: -2
Рейтинг сообщений: -32
Зарегистрирован: Вс ноя 01, 2015 13:13:49
Сообщений: 616
Рейтинг сообщения: 0
В данном случае следует считать странным cvavr. Статью до конца дочитайте.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вс дек 25, 2016 21:38:11 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 1
Dimon456:

Вы сами указали в настройках компилятора определённый уровень оптимизации (предположу, -O3). Тем самым дав команду компилятору уменьшать размер кода, потребление RAM и т.д. Так что это ваша задача теперь - объявлять глобальные переменные volatile, если они могут измениться в прерывании, и это всё оговорено в документации.

Ну ОК, не то чтобы указали, а просто либо не знали, либо забыли. Но, по большому счёту, какая разница?

P.S. "На пальцах", как это работает (может, где-то упрощённо, но главное - суть):

Есть глобальная переменная - где-то в RAM. Как работает обычная функция (та же main) - переменная вытаскивается из RAM в какой-то из регистров, и там с нею уже все арифметические операции производятся. По выходу из функции изменённая переменная возвращается в RAM.

Соответственно, если МК уйдёт в прерывание, в котором его обработчик внезапно поменяет в памяти эт у переменную, то функция по возврату к ней управления продолжит работать с тем значением, что сохранено в регистре. И по окончании вернёт в память значение, невзирая на то, что там уже "постарался" обработчик прерывания.

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

Это нормальное поведение при включенной оптимизации для большинства переменных (ведь в прерывании их не так много меняется обычно). Если такое не нужно для конкретной переменной - объявляем её volatile, после чего при любых попытках работать с ней она будет "обновляться" из памяти. На это нужны, соответственно, лишние операции и такты процессора.

То что CVAVR так делает даже не с volatile переменными может говорить лишь о том, что он генерирует не самый оптимальный код. То есть, даже обычные глобальные переменные, которые в прерываниях не участвуют, вероятно, постоянно "синхронизированы" с RAM при работе с ними. А это уже лишнее


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вс дек 25, 2016 22:51:03 
Это не хвост, это антенна
Аватар пользователя

Карма: 8
Рейтинг сообщений: 193
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1441
Рейтинг сообщения: 0
Можно было бы рассказать еще об атомарности и зачем она нужна, но подождем пока человек наступит на очередные грабли и прибежит жаловаться на неправильные компиляторы. Документацию ведь для дураков пишут.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Пн дек 26, 2016 17:07:57 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Интересует такой вопрос.
В своем девайсе я использую BOOTLOADER, размер 2кБайта.
Значит в atmega8 у меня осталось памяти где то 6кБайт.

Как в Makefile ограничить этот размер, что бы не 8кБайт было а, 6кБат?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Пн дек 26, 2016 17:15:15 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5592
Откуда: Minsk
Рейтинг сообщения: 0
Я думаю, просто надо грамотно писать программу, и оно само получится. А если размер скомпилированной проги вылезет за 6кб - чем поможет makefile ? "Утопчет" байты кода или отрежет "ненужные", по его мнению ? Полученный hex всегда можно посмотреть текстовым редактором, и если он вылез за размер, то это видно, и его не надо заливать в МК.

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вт дек 27, 2016 07:37:50 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Jack_A писал(а):
А если размер скомпилированной проги вылезет за 6кб - чем поможет makefile ? "Утопчет" байты кода или отрежет "ненужные", по его мнению ?
Если размер проги вылазит за пределы, компилятор предупреждает об этом.
В данном случае если 8меги не хватит, есть 168 и 328меги.
Просто думал, что makefile есть способ сказать что не 8кБ а 6кБ всего.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Пн янв 16, 2017 18:34:44 
Мучитель микросхем
Аватар пользователя

Карма: 8
Рейтинг сообщений: 28
Зарегистрирован: Вс авг 10, 2008 19:35:49
Сообщений: 411
Откуда: Евпатория
Рейтинг сообщения: 0
Может уже было - искать по ветке долго...
Установил на новый ноутбук (Win7) WinAVR20100110. При открытии нотепейджем исходника русские комментарии читаются как крякозяблики. На старом ноутбуке (WinXP) всё было нормально. Подскажите путь решения проблемы. Спасибо!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Пн янв 16, 2017 20:41:55 
Мудрый кот

Карма: 34
Рейтинг сообщений: 288
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 1815
Откуда: Харьков
Рейтинг сообщения: 0
Перекодировать все файлы любой доступной программой в win-1251 (или даже в utf-8) и попробовать снова.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вт янв 17, 2017 23:48:20 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
WiseLord писал(а):
Dimon456:
P.S. "На пальцах", как это работает (может, где-то упрощённо, но главное - суть):

Есть глобальная переменная - где-то в RAM. Как работает обычная функция (та же main) - переменная вытаскивается из RAM в какой-то из регистров, и там с нею уже все арифметические операции производятся. По выходу из функции изменённая переменная возвращается в RAM.

Соответственно, если МК уйдёт в прерывание, в котором его обработчик внезапно поменяет в памяти эт у переменную, то функция по возврату к ней управления продолжит работать с тем значением, что сохранено в регистре. И по окончании вернёт в память значение, невзирая на то, что там уже "постарался" обработчик прерывания.

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

Это нормальное поведение при включенной оптимизации для большинства переменных (ведь в прерывании их не так много меняется обычно). Если такое не нужно для конкретной переменной - объявляем её volatile, после чего при любых попытках работать с ней она будет "обновляться" из памяти. На это нужны, соответственно, лишние операции и такты процессора.

То что CVAVR так делает даже не с volatile переменными может говорить лишь о том, что он генерирует не самый оптимальный код. То есть, даже обычные глобальные переменные, которые в прерываниях не участвуют, вероятно, постоянно "синхронизированы" с RAM при работе с ними. А это уже лишнее


и где только ты все это вычитал ? :)

_________________
Tell Me The Truth


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вс фев 12, 2017 03:06:36 
Мудрый кот

Карма: 34
Рейтинг сообщений: 288
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 1815
Откуда: Харьков
Рейтинг сообщения: 0
Цитата:
То что CVAVR так делает даже не с volatile переменными может говорить лишь о том, что он генерирует не самый оптимальный код.

Так одно время делал и WinAVR, в последних сборках перестал.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вс фев 12, 2017 05:33:32 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
watchmaker писал(а):
Так одно время делал и WinAVR, в последних сборках перестал.
если последними считать все, начиная с 2010 года, то да.

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вс фев 12, 2017 05:59:32 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
WiseLord писал(а):
Есть глобальная переменная - где-то в RAM. Как работает обычная функция (та же main) - переменная вытаскивается из RAM в какой-то из регистров, и там с нею уже все арифметические операции производятся. По выходу из функции изменённая переменная возвращается в RAM.

Соответственно, если МК уйдёт в прерывание, в котором его обработчик внезапно поменяет в памяти эт у переменную, то функция по возврату к ней управления продолжит работать с тем значением, что сохранено в регистре. И по окончании вернёт в память значение, невзирая на то, что там уже "постарался" обработчик прерывания.

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

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вт фев 21, 2017 01:19:26 
Мудрый кот

Карма: 34
Рейтинг сообщений: 288
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 1815
Откуда: Харьков
Рейтинг сообщения: 0
Цитата:
Следует добавить, что volatile не дает атомарности и при работе с многобайтными переменными

Интересно. В Яве кстати аналогично.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Пт июн 09, 2017 23:52:51 
Встал на лапы

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Пн окт 03, 2011 19:59:52
Сообщений: 104
Рейтинг сообщения: 0
Привет, в winAWR как можно изменить тип контроллера? Исходник под 164 ую атмегу, мне нужно откомпелировать его под 16 ую.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Сб июн 10, 2017 19:16:16 
Мудрый кот

Карма: 34
Рейтинг сообщений: 288
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 1815
Откуда: Харьков
Рейтинг сообщения: 1
Скорее всего придётся редактировать сами исходники - у "старых" атмег (8, 16, 32) регистры расположены не так, как у более новых. А если всё совпадает - искать в Makefile параметр target и подставлять туда идентификатор контроллера.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Сб июн 10, 2017 20:35:44 
Встал на лапы

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Пн окт 03, 2011 19:59:52
Сообщений: 104
Рейтинг сообщения: 0
правил. Вроде запустилось железо. Но на всякий случай хочу уточнить. В исходниках где ни будь прописано какие фьюзы нужно выставить?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WinAvr в вопросах и ответах
СообщениеДобавлено: Вс июн 11, 2017 19:12:09 
Мудрый кот

Карма: 34
Рейтинг сообщений: 288
Зарегистрирован: Вс ноя 15, 2009 23:13:59
Сообщений: 1815
Откуда: Харьков
Рейтинг сообщения: 0
Нет, это выставляется отдельно при прошивке, например в ponyprog или в avrdude-gui.

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


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 2102 ]     ... , , , 99, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: akl и гости: 20


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y