AVR studio в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение КАШАК »

Как правильно обработать нажатие кнопки? Если кнопка на нулевом или первом выводе порта, все работает:

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

if((PINC & (1 << PC0)) == 1)
if((PINC & (1 << PC1)) == 2)


А если подключены к другим выводам порта, то не работает. Почему для PC0, в условии стоит 1, а для PC1 - 2 ? До этого программировал в CodeVision, сейчас перешел в AvrStudio (точнее его аналог под линуксом - Eclipse) и еще не все понимаю...
Опыт растет прямо пропорционально выведенному из строя оборудованию...
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: AVR studio 4 в вопросах и ответах

Сообщение BerZerK-ku »

Компилятор тут не при чем, в CodeVision этот код работает точно так же как и в AVRStudio.
Вот так код будет понятнее :

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

if((PINC & (1 << PC0)) == (1 << PC0))
if((PINC & (1 << PC1)) == (1 << PC1))

, а можно и вот так:

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

if(PINC & (1 << PC0))
if(PINC & (1 << PC1))
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение КАШАК »

Спасибо :))
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Re: AVR studio 4 в вопросах и ответах

Сообщение Arlleex »

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

#include <avr/io.h>
int main(void)
{
    int a;
    DDRB=(1<<DDB0);
   while(1)
   {
   PORTB=(1<<PB0);
   for(a=0; a<100; ++a);
   for(a=0; a<100; ++a);
   for(a=0; a<100; ++a);
   for(a=0; a<100; ++a);
    PORTB=(0<<PB0);
   for(a=0; a<100; ++a);
   for(a=0; a<100; ++a);
   for(a=0; a<100; ++a);
   for(a=0; a<100; ++a);
   }
    while(1);
}

Собственно, отладчиком в AVRStudio4 посмотрел - задержки в форме конструкций for() не работают. Почему?
Использую AVRStudio4.19 совместно с AVR Toolchain 3.0.0.
Странная вещь... :?
Не умеешь - не берись, но не взявшись не научишься...
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: AVR studio 4 в вопросах и ответах

Сообщение BerZerK-ku »

Вариант 1.
Отключите оптимизацию.
Вариант 2.
Добавьте в цикл пустую команду (nop)
Вариант 3.

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

volatile int a;
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Re: AVR studio 4 в вопросах и ответах

Сообщение Arlleex »

Вариант первый рассмотрю более подробно. Но в AVR Studio оптимизации:
Q0
Q1
Q2
Q3
Qs
А варианта отключения оптимизации нет.
Может где в другом месте она отключается?
Не умеешь - не берись, но не взявшись не научишься...
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Мастер Ломастер »

Arlleex писал(а):Может где в другом месте она отключается?
не Q0, а O0 - это и есть отключенная оптимизация
битва с дураками проиграна, победители торжествуют. слава победителям!
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Мастер Ломастер »

Arlleex писал(а):Собственно, отладчиком в AVRStudio4 посмотрел - задержки в форме конструкций for() не работают. Почему?

BerZerK-ku писал(а):Вариант 1.
Отключите оптимизацию.
и удивитесь размеру получающегося кода - фтопку
BerZerK-ku писал(а):Вариант 2.
Добавьте в цикл пустую команду (nop)
не так-то элементарно ПРАВИЛЬНО вставить в код NOP - да и неразумно это... фтопку, хотя и не в самый жар :)
BerZerK-ku писал(а):Вариант 3.

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

volatile int a;
из данных советов - наиболее правильный с точки зрения подхода, но тоже неразумный. пусть ждет очереди фтопку :)

правильный и самый разумный вариант заключается в подключении модуля <avr/delay.h> и использовании для задержек функций _delay_ms() и _delay_us(). об особенностях использования этих функций ищите на форуме - это важно!
битва с дураками проиграна, победители торжествуют. слава победителям!
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Re: AVR studio 4 в вопросах и ответах

Сообщение Arlleex »

Дело даже не в том, а если придется организовать цикл for() как таковой?
Глянул на размер программы, действительно, многовато выходит. Но и с оптимизатором не самый смак без for() (да я еще не пробовал другие конструкции).
Не умеешь - не берись, но не взявшись не научишься...
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Мастер Ломастер »

проблема не в for, а в том, что у вас есть несоответствие того, что вы ХОТИТЕ с тем, что вы НАПИСАЛИ в программе. дело в том, что язык Си не допускает вольной трактовки ваших мыслей - он ТУПО делает то, что написано. а с этой точки зрения вы написали явную ерунду: 5 циклов, которые НИЧЕГО не делают. с точки зрения компилятора это АБСОЛЮТНО БЕССМЫСЛЕННО - и это он отказывается делать. когда вы научитесь писать ОСМЫСЛЕННЫЕ задачи для компилятора - заработают все циклы и другие конструкции. удачи!
битва с дураками проиграна, победители торжествуют. слава победителям!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: AVR studio 4 в вопросах и ответах

Сообщение BerZerK-ku »

Мастер Ломастер писал(а):и удивитесь размеру получающегося кода - фтопку

Не в курсе чем вы пользуетесь. В IAR при нормально написанной программе оптимизация дает выигрыш процентов 20 по размеру, по скорости не проверял.
Мастер Ломастер писал(а):не так-то элементарно ПРАВИЛЬНО вставить в код NOP - да и неразумно это... фтопку, хотя и не в самый жар
В данном случае был конкретный вопрос и на него конкретный ответ. Надо быть великим мастером, чтобы внести подобное изменение?

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

for(a = 0; a< 100; ++a) _NOP();

Мастер Ломастер писал(а):правильный и самый разумный вариант заключается в подключении модуля <avr/delay.h> и использовании для задержек функций _delay_ms() и _delay_us(). об особенностях использования этих функций ищите на форуме - это важно!
При малых величинах задержки for мало отличается от _delay_us. А большие лучше/правильнее делать на таймере.
Мастер Ломастер писал(а):он ТУПО делает то, что написано. а с этой точки зрения
Мастер Ломастер писал(а):с точки зрения компилятора это АБСОЛЮТНО БЕССМЫСЛЕННО
Вы сами себе противоречите. Опять же приведу в пример IAR: он спокойно обработает вышеприведенный пример.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение Мастер Ломастер »

если вам хочется - можем поспорить :)
1. автор юзает WinAVR, и рассказы про IAR в данном контексте не очень уместны.
2. опять-таки, в WinAVR правильная вставка NOP-а заключается в достаточно неочевидном для новичка asm volatile ("nop"); - согласны, что это на самом деле не так-то просто (в смысле, непонятно, почему именно так)?
3. что касается сравнения for с функциями задержки, то они неуместны в принципе, т.к. грамотно написанная "вручную" задержка вообще не будет отличаться от "библиотечной", но начинающему это не под силу - и ни к чему совершенно. кстати, я не начинающий, но никогда до самописных for-задержек не опускался.
4. я себе не противоречу. просто вдумайтесь в СМЫСЛ написанного: for(a=0; a<10; a++) _ NOP; - что это означает С ТОЧКИ ЗРЕНИЯ ЯЗЫКА СИ? означает буквально следующее: перебрать переменную от 0 до 9. а зачем? куда это значение девается? да никуда. это алгоритмически бессмысленная конструкция, ибо Си не содержит в себе никаких упоминаний о времени исполнения кода и т.п. вещах. если IAR на самом деле отрабатывает абсолютно бесполезный цикл - это скорее минус его оптимизатору, чем плюс. а WinAVR все глупости выкидывает безжалостно и беспощадно.
битва с дураками проиграна, победители торжествуют. слава победителям!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: AVR studio 4 в вопросах и ответах

Сообщение BerZerK-ku »

Мастер Ломастер писал(а):1. автор юзает WinAVR, и рассказы про IAR в данном контексте не очень уместны.
Авось одумается и пересядет на качественный продукт ))
Мастер Ломастер писал(а):2. опять-таки, в WinAVR правильная вставка NOP-а заключается в достаточно неочевидном для новичка asm volatile ("nop"); - согласны, что это на самом деле не так-то просто (в смысле, непонятно, почему именно так)?
Непонятно, объясните почему? У меня при максимальной оптимизации и так работает:

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

for(a=0; a<100; ++a)
    asm ("nop"::);

Мастер Ломастер писал(а):3. что касается сравнения for с функциями задержки, то они неуместны в принципе, т.к. грамотно написанная "вручную" задержка вообще не будет отличаться от "библиотечной", но начинающему это не под силу - и ни к чему совершенно. кстати, я не начинающий, но никогда до самописных for-задержек не опускался.
Как это сделать, не используя asm вставки? И что плохого в такой задержке? Это очередной миф, подобный не использованию оператора goto?
Мастер Ломастер писал(а):4. я себе не противоречу. просто вдумайтесь в СМЫСЛ написанного: for(a=0; a<10; a++) _ NOP;
Если я что-то пишу, значит хочу чтобы это было. Компилятор с отключенной оптимизацией ничего не должен убирать по своему хотению. При включении оптимизации, программист уже должен задумываться над тем что пишет.
А включать оптимизацию при освоении МК не стоит, т.к. получаешь кучу проблем.
a.garkin
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вт сен 29, 2009 09:28:51
Откуда: Ульяновск
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение a.garkin »

Помогите понять в чем проблема.
Суть такова есть СТК 500 оригинальный. Есть плата изготовленная на производстве. Длина дорог от выводовконтроллера до isp разъема пару см максимум. шлейф родной. суть проблемы в том в этой плате в режиме внутреннегго программирования ни мега8535 ни мега 32 не програмируется при частоте больше 5 Кгерц. выпаиваю контроллер, сую в другую плату изготовленную дома прекрасно шьется при частоте 57 кгерц. вопрос в чем дело пайка отличная? под лупой разглядывал. плату промывал, ацетоном+сжатым воздухом продул. оба контроллера так себя ведут именно в этой плате. в другой они же нормально шьются.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение vitalik_1984 »

a.garkin писал(а):Помогите понять в чем проблема.
Суть такова есть СТК 500 оригинальный. Есть плата изготовленная на производстве. Длина дорог от выводовконтроллера до isp разъема пару см максимум. шлейф родной. суть проблемы в том в этой плате в режиме внутреннегго программирования ни мега8535 ни мега 32 не програмируется при частоте больше 5 Кгерц. выпаиваю контроллер, сую в другую плату изготовленную дома прекрасно шьется при частоте 57 кгерц. вопрос в чем дело пайка отличная? под лупой разглядывал. плату промывал, ацетоном+сжатым воздухом продул. оба контроллера так себя ведут именно в этой плате. в другой они же нормально шьются.

А кварц на плате стк какой?
Просто частота программирования зависит напрямую от такта камня.частота исп вроде 1/4от такта максимум.Можно на маленькой скорости менять фьюзы на 8Мгц и заливать на более высокой скорости.
В поисках истины человек развивается.
a.garkin
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вт сен 29, 2009 09:28:51
Откуда: Ульяновск
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение a.garkin »

vitalik_1984 писал(а):
a.garkin писал(а):Помогите понять в чем проблема.
Суть такова есть СТК 500 оригинальный. Есть плата изготовленная на производстве. Длина дорог от выводовконтроллера до isp разъема пару см максимум. шлейф родной. суть проблемы в том в этой плате в режиме внутреннегго программирования ни мега8535 ни мега 32 не програмируется при частоте больше 5 Кгерц. выпаиваю контроллер, сую в другую плату изготовленную дома прекрасно шьется при частоте 57 кгерц. вопрос в чем дело пайка отличная? под лупой разглядывал. плату промывал, ацетоном+сжатым воздухом продул. оба контроллера так себя ведут именно в этой плате. в другой они же нормально шьются.

А кварц на плате стк какой?
Просто частота программирования зависит напрямую от такта камня.частота исп вроде 1/4от такта максимум.Можно на маленькой скорости менять фьюзы на 8Мгц и заливать на более высокой скорости.

А какая разница тут какой стоит кварц? если я ставлю режим работы от внутреннего картинка не меняется... Кварц на 16 Мгц. Просто мне сама ситуация не понятна. Не может ли так влиять то что у контроллера используются все ноги? Прошивка заливается на низкой скорости, но о боже как долго когда 85% памяти юзается. Прошивка работает вроде как надо. в чем прикол все таки?
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: AVR studio 4 в вопросах и ответах

Сообщение BerZerK-ku »

При прошивке МК находится в состоянии сброса и становится не важно сколько и какие ноги задействованы в программе.
Скорости прошивки удручают. Как было написано выше, прошивать МК можно на частоте в 4-6 раз меньше тактовой (у меня обычно стоит 1 МГц).
Каким ПО и программатором пользуетесь?
a.garkin
Нашел транзистор. Понюхал.
Сообщения: 175
Зарегистрирован: Вт сен 29, 2009 09:28:51
Откуда: Ульяновск
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение a.garkin »

BerZerK-ku писал(а):При прошивке МК находится в состоянии сброса и становится не важно сколько и какие ноги задействованы в программе.
Скорости прошивки удручают. Как было написано выше, прошивать МК можно на частоте в 4-6 раз меньше тактовой (у меня обычно стоит 1 МГц).
Каким ПО и программатором пользуетесь?

avr studio, codevision как и писал выше на 2 СООБЩЕНИЯ оригинальный СТК500 (прошивка последняя) и только в этой плате в других работает норма.
ВитГо
Вымогатель припоя
Сообщения: 680
Зарегистрирован: Ср фев 24, 2010 19:16:07

Re: AVR studio 4 в вопросах и ответах

Сообщение ВитГо »

а AVR Studio отслеживает наложение кода ?

например если в одном файле стоит .org 0x100 и длинна кода например 1 кб
и есть другой файл с .org 0x50 и длинной кода в 256 байт
при компиляции будет наложение так как фактически по одним и тем же адресам нужно будет разместить разные куски кода

студия выдает какой нить варнинг или ошибку при этом ?

p.s. как то все руки не доходят самому проверить, может быть ктото сталкивался...
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: AVR studio 4 в вопросах и ответах

Сообщение vitalik_1984 »

ВитГо писал(а):а AVR Studio отслеживает наложение кода ?

например если в одном файле стоит .org 0x100 и длинна кода например 1 кб
и есть другой файл с .org 0x50 и длинной кода в 256 байт
при компиляции будет наложение так как фактически по одним и тем же адресам нужно будет разместить разные куски кода

студия выдает какой нить варнинг или ошибку при этом ?

p.s. как то все руки не доходят самому проверить, может быть ктото сталкивался...

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

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