AVR studio в вопросах и ответах
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: AVR studio 4 в вопросах и ответах
как как? двойной клик на ошибке и телепортация курсора к месту ошибки обеспечена, судя по всему кто то забыл нажать шифт при наборе текста и поэтому такая фень вышла.
Обратите внимание на то, что я написал переменную именно так, как у вас в ошибке, а вы написали так, как у вас в функции применяется.
Язык Си чувствителен к регистру символов.
Обратите внимание на то, что я написал переменную именно так, как у вас в ошибке, а вы написали так, как у вас в функции применяется.
Язык Си чувствителен к регистру символов.
- Реклама
-
infinity19891
- Встал на лапы
- Сообщения: 141
- Зарегистрирован: Вс дек 18, 2011 10:26:43
- Откуда: Пинск
Re: AVR studio 4 в вопросах и ответах
Именно RDat у меня и применяется сейчас, но ошибка не пропала. А маленькими было написано только для проверки, может я в чём-то ошибся. То что ошибся - факт, но не в регистре ошибка.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: AVR studio 4 в вопросах и ответах
Блин ошибка только в одном месте, не важно в каком регистре запись, главное, чтобы она по всему тексту соответствовала формату
1 объявление (int RDat;)
2 назначение (RDat=122;)
3 использование.(lcd_print(RDat);)
Если второй можно опустить совмещая со первым (int RDat=122;), то первый пропускать никак нельзя.
Когда встречается переменная в другом регистре в любом символе(rdat,Rdat,rDAT,rDat), то она считается новой и ей нужен отдельный первый пункт.
Ну нам видно только те ошибки, которые вы сами нам показали, если вы их специально делаете, как мы ТУТ вам ТАМ поможем?
Делайте двойной клик и думайте сами что в коде не так - мы его не видим.
1 объявление (int RDat;)
2 назначение (RDat=122;)
3 использование.(lcd_print(RDat);)
Если второй можно опустить совмещая со первым (int RDat=122;), то первый пропускать никак нельзя.
Когда встречается переменная в другом регистре в любом символе(rdat,Rdat,rDAT,rDat), то она считается новой и ей нужен отдельный первый пункт.
infinity19891 писал(а):То что ошибся - факт, но не в регистре ошибка.
Ну нам видно только те ошибки, которые вы сами нам показали, если вы их специально делаете, как мы ТУТ вам ТАМ поможем?
vitalik_1984 писал(а):двойной клик на ошибке и телепортация курсора к месту ошибки обеспечена,
Делайте двойной клик и думайте сами что в коде не так - мы его не видим.
Где было написано? В функции или в объявлении? Или в той строке где ошибка?А маленькими было написано только для проверки,
-
infinity19891
- Встал на лапы
- Сообщения: 141
- Зарегистрирован: Вс дек 18, 2011 10:26:43
- Откуда: Пинск
Re: AVR studio 4 в вопросах и ответах
Так, покопался по коду программы, и не нашел объявления RDat. Эту часть программы выкусил из другого исходника, но и в том исходнике не нашёл объявления. Мне не первый раз попадаются исходники, с подобными ошибками. Как например были ошибки при компиляции исходника, из-за отсутствия void. Т.е. должно было быть так:
А было:
Повторюсь, это не первый раз уже так. Так вот изначальный вопрос заключается в том, как правильно объявить RDat?
Код: Выделить всё
void main(void)
{
//текст программы
}
А было:
Код: Выделить всё
void main()
{
//текст программы
}
Повторюсь, это не первый раз уже так. Так вот изначальный вопрос заключается в том, как правильно объявить RDat?
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: AVR studio 4 в вопросах и ответах
Э, батенька, вам похоже совсем вдругую тему нужно.
Есть прекрасная книга от создателей си
Керниган и Ричи
Между прочим я уже приводил пример как нужно правильно делать
То что в скобках можно пропустить.
Про типы данных как раз в книге можно почитать.
Есть прекрасная книга от создателей си
Керниган и Ричи
Между прочим я уже приводил пример как нужно правильно делать
Во многих Работающих примерах тоже можно посмотреть.vitalik_1984 писал(а):int RDat=122;
Код: Выделить всё
тип_переменной имя_переменной =[ начальное_значение];То что в скобках можно пропустить.
Про типы данных как раз в книге можно почитать.
- Реклама
-
infinity19891
- Встал на лапы
- Сообщения: 141
- Зарегистрирован: Вс дек 18, 2011 10:26:43
- Откуда: Пинск
Re: AVR studio 4 в вопросах и ответах
Спасибо, всё получилось!
Re: AVR studio 4 в вопросах и ответах
Все привет! Написал я тут простенькую программу для лабораторного блока питания на ATmega8. Вольтметр+Амперметр, семи сегментная индикация на сдвиговых регистрах, контроль за перегревам на DS18B20. Писал на CVAVR, в общем-то всё работает, только с датчик маленькие проблемы, но вопрос не в этом.
Понадобилось мне перевести в AVR Studio, вот тут и началось. Переправил обработчики прерываний, обращения к регистрам порта, код скомпилировался, без ошибок и варненгов, но конечно же не заработал
Я решил его прописывать постепенно, написал в хлам простую программу, которая через регистр HC164 должна зажигать все сегменты, она то же не заработала, раньше в студии кроме мигания диодом нечего не писал, не понимаю в чём дело. Подскажите где что не так, в моём демо проекте. Заранее спасибо.
Понадобилось мне перевести в AVR Studio, вот тут и началось. Переправил обработчики прерываний, обращения к регистрам порта, код скомпилировался, без ошибок и варненгов, но конечно же не заработал
Я решил его прописывать постепенно, написал в хлам простую программу, которая через регистр HC164 должна зажигать все сегменты, она то же не заработала, раньше в студии кроме мигания диодом нечего не писал, не понимаю в чём дело. Подскажите где что не так, в моём демо проекте. Заранее спасибо.
- Вложения
-
- Foto.JPG
- (150.82 КБ) 477 скачиваний
-
- AVR Studio+Proteus.rar
- (55.68 КБ) 163 скачивания
- U235
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Вт фев 21, 2012 20:42:26
- Откуда: Санкт-Петербург, Россия, Земля
Re: AVR studio 4 в вопросах и ответах
В функции demo получается, что все разряды порта D сбрасываются.
Так наверно немного лучше будет
Код: Выделить всё
PORTD = 0<<PD3; // Ставим в 0
PORTD = 1<<PD3; // Ставим в 1
Так наверно немного лучше будет
Код: Выделить всё
PORTD &= ~(1<<PD3); // Ставим в 0
PORTD |= 1<<PD3; // Ставим в 1
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...
Re: AVR studio 4 в вопросах и ответах
И в прямь заработало, вот блин
Спасибо!
Только не понятно я же конкретно побитово обращаюсь к 3 выводу?
Только не понятно я же конкретно побитово обращаюсь к 3 выводу?
Код: Выделить всё
PORTD = 0<<PD3; // Ставим в 0
PORTD = 1<<PD3; // Ставим в 1- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: AVR studio 4 в вопросах и ответах
Ой ли? Смотрите откомпилированное:
Код: Выделить всё
; 0000 0039 PORTD = 0<<PD3;
0000a6 e0e0 LDI R30,LOW(0)
0000a7 bbe2 OUT 0x12,R30
; 0000 003A PORTD = 1<<PD3;
0000a8 e0e8 LDI R30,LOW(8)
0000a9 bbe2 OUT 0x12,R30Docendo discimus
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: AVR studio 4 в вопросах и ответах
За базар ответишь!ARV.net писал(а):я же конкретно побитово обращаюсь к 3 выводу?Код: Выделить всё
PORTD = 0<<PD3; // Ставим в 0
PORTD = 1<<PD3; // Ставим в 1
В Вашем выражении Вы присваиваете значение порту, а не работаете с битами.
Выражение "0<<PD3" определяет константу, которая вычисляется по формуле "сдвинуть значение "ноль"(0) влево(<<) PD3 раз." Именно так. PD3 - это число! оно равно 3(трем). получается "сдвинуть значение "ноль" влево 3 раза". Получается константа = 00000000 = 0x00
Аналогично 1<<PD3 = "сдвинуть единицу влево 3 раза" = 00001000 = 0x08
Следовательно PORTD = 0<<PD3 соответствует выражению PORTD = 0x00;
Аналогично PORTD = 1<<PD3 соответствует выражению PORTD = 0x08;
Чтобы работать с битами нужно накладывать маску на текущее состояние порта.
Популярнее: Считываете значение порта, сбрасываете/устанавливаете нужные биты, записываете обратно в порт.
Все это можно записать в одну строчку :
1) PORTD = PORTD | (1<<PD3) - Установка бита PD3
2) PORTD = PORTD & ~(1<<PD3) - Сброс бита PD3
Если Вы заметили, оба эти выражения используют исходное состояние порта, для записи в него же, после некоторых изменений значения. Язык Си в таких случаях имеет сокращение, позволяющее опустить повторное упоминание переменной в выражении справа путем переноса производимой операции влево за знак равенства.
Тогда
PORTD = PORTD | (1<<PD3) соответствует выражению PORTD |= (1<<PD3)
PORTD = PORTD & ~(1<<PD3) соответствует выражению PORTD &= ~(1<<PD3)
Вообще говоря это азы Си и никоим образом не относится к AVRStudio 4. Ай-яй-яй! Матчасть учить надо!
Ставим плюсы: )
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: AVR studio 4 в вопросах и ответах
При том, что на АСМе можно дёргать отдельными ногами командами sbi и cbi. Почему компилятор не применяет их?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: AVR studio 4 в вопросах и ответах
применяет еще как:
Код: Выделить всё
while(1)
{
PORTB |= 4;
PORTB &= ~4;
}
Код: Выделить всё
while(1)
{
PORTB |= 4;
26: c2 9a sbi 0x18, 2 ; 24
PORTB &= ~4;
28: c2 98 cbi 0x18, 2 ; 24
2a: fd cf rjmp .-6 ; 0x26 <main+0x4>
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: AVR studio 4 в вопросах и ответах
А если 2 бита, он сразу перейдёт на LDI-OUT? 
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: AVR studio 4 в вопросах и ответах
если должны появиться одновременно:если по очереди, то:
Код: Выделить всё
PORTB |= 6;
26: 88 b3 in r24, 0x18 ; 24
28: 86 60 ori r24, 0x06 ; 6
2a: 88 bb out 0x18, r24 ; 24
PORTB &= ~6;
2c: 88 b3 in r24, 0x18 ; 24
2e: 89 7f andi r24, 0xF9 ; 249
30: 88 bb out 0x18, r24 ; 24Код: Выделить всё
PORTB |= 4;
26: c2 9a sbi 0x18, 2 ; 24
PORTB |= 2;
28: c1 9a sbi 0x18, 1 ; 24
PORTB &= ~4;
2a: c2 98 cbi 0x18, 2 ; 24
PORTB &= ~2;
2c: c1 98 cbi 0x18, 1 ; 24- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: AVR studio 4 в вопросах и ответах
В общем, логично.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: AVR studio 4 в вопросах и ответах
Ну теперь почти всё ясно,
Я в CVAVR использовал такую функцию последовательный вывод на индикацию
догнать не могу как перевести в AVR studio строчку
Я в CVAVR использовал такую функцию последовательный вывод на индикацию
Код: Выделить всё
void amper_print(unsigned int data)
{
unsigned char i;
unsigned int digit;
if (rank_counter == 0){ //Если разряд 1
digit = buf[data] | (1<<0); //ставим после него точку
}
else{
digit = buf[data]; //Берём число из массива
}
for( i=0; i<8; i++){ //и последовательно выводим
PORTD.2 = digit & 1<<i;
PORTD = (0<<3); //Выстовлям такт в лог.0
PORTD = (1<<3); //затем в 1
}
} догнать не могу как перевести в AVR studio строчку
Код: Выделить всё
PORTD.2 = digit & 1<<i; - ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: AVR studio 4 в вопросах и ответах
if (digit & (1<<i))
PORTD |= (1<<PD2);
else
PORTD &=~(1<<PD2);
PORTD |= (1<<PD2);
else
PORTD &=~(1<<PD2);
Ставим плюсы: )
Re: AVR studio 4 в вопросах и ответах
Блин в CVAVR мне больше нравиться обращение к портам. Спасибо всем за консультацию.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: AVR studio 4 в вопросах и ответах
Можно ли в Студии на АСМе использовать что-то вроде макроса для работы с портами?
Мне надо ноги переключать в "1" и "0", хочу как-то так: сbi LED1 или LED1=0 вместо cbi PORTX, N.
Мне надо ноги переключать в "1" и "0", хочу как-то так: сbi LED1 или LED1=0 вместо cbi PORTX, N.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]


