как как? двойной клик на ошибке и телепортация курсора к месту ошибки обеспечена, судя по всему кто то забыл нажать шифт при наборе текста и поэтому такая фень вышла. Обратите внимание на то, что я написал переменную именно так, как у вас в ошибке, а вы написали так, как у вас в функции применяется. Язык Си чувствителен к регистру символов.
Именно RDat у меня и применяется сейчас, но ошибка не пропала. А маленькими было написано только для проверки, может я в чём-то ошибся. То что ошибся - факт, но не в регистре ошибка.
Блин ошибка только в одном месте, не важно в каком регистре запись, главное, чтобы она по всему тексту соответствовала формату 1 объявление (int RDat;) 2 назначение (RDat=122;) 3 использование.(lcd_print(RDat);)
Если второй можно опустить совмещая со первым (int RDat=122;), то первый пропускать никак нельзя. Когда встречается переменная в другом регистре в любом символе(rdat,Rdat,rDAT,rDat), то она считается новой и ей нужен отдельный первый пункт.
infinity19891 писал(а):
То что ошибся - факт, но не в регистре ошибка.
Ну нам видно только те ошибки, которые вы сами нам показали, если вы их специально делаете, как мы ТУТ вам ТАМ поможем?
vitalik_1984 писал(а):
двойной клик на ошибке и телепортация курсора к месту ошибки обеспечена,
Делайте двойной клик и думайте сами что в коде не так - мы его не видим.
Цитата:
А маленькими было написано только для проверки,
Где было написано? В функции или в объявлении? Или в той строке где ошибка?
Так, покопался по коду программы, и не нашел объявления RDat. Эту часть программы выкусил из другого исходника, но и в том исходнике не нашёл объявления. Мне не первый раз попадаются исходники, с подобными ошибками. Как например были ошибки при компиляции исходника, из-за отсутствия void. Т.е. должно было быть так:
Код:
void main(void) { //текст программы }
А было:
Код:
void main() { //текст программы }
Повторюсь, это не первый раз уже так. Так вот изначальный вопрос заключается в том, как правильно объявить RDat?
Все привет! Написал я тут простенькую программу для лабораторного блока питания на ATmega8. Вольтметр+Амперметр, семи сегментная индикация на сдвиговых регистрах, контроль за перегревам на DS18B20. Писал на CVAVR, в общем-то всё работает, только с датчик маленькие проблемы, но вопрос не в этом. Понадобилось мне перевести в AVR Studio, вот тут и началось. Переправил обработчики прерываний, обращения к регистрам порта, код скомпилировался, без ошибок и варненгов, но конечно же не заработал Я решил его прописывать постепенно, написал в хлам простую программу, которая через регистр HC164 должна зажигать все сегменты, она то же не заработала, раньше в студии кроме мигания диодом нечего не писал, не понимаю в чём дело. Подскажите где что не так, в моём демо проекте. Заранее спасибо.
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. Ай-яй-яй! Матчасть учить надо!
Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
Добавлено: Пт янв 25, 2013 12:47:15
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19767 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
При том, что на АСМе можно дёргать отдельными ногами командами sbi и cbi. Почему компилятор не применяет их?
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
Добавлено: Пт янв 25, 2013 13:30:09
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19767 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
А если 2 бита, он сразу перейдёт на LDI-OUT?
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
Добавлено: Пт янв 25, 2013 14:04:16
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19767 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
В общем, логично.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: AVR studio 4 в вопросах и ответах
Добавлено: Пн янв 28, 2013 13:49:39
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19767 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Можно ли в Студии на АСМе использовать что-то вроде макроса для работы с портами? Мне надо ноги переключать в "1" и "0", хочу как-то так: сbi LED1 или LED1=0 вместо cbi PORTX, N.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 74
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения