WinAvr в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
AntonChip
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Сб май 16, 2015 22:42:01
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение AntonChip »

Спасибо господа. Приведение типов использовал в первую очередь, но чтоб так ставить знак "~" не приходилось
Реклама
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: WinAvr в вопросах и ответах

Сообщение Pnjom-Penb »

AntonChip писал(а):Приведение типов использовал в первую очередь, ...
Извините, но Вы, похоже, заблуждаетесь, или хотите ввести в заблуждение окружающих. Если бы Вы использовали "приведение типов в первую очередь", то сравнение сразу заработало бы и этой темы не было бы. Так что, либо Вы использовали не приведение типов, либо его, но только после того, как Вам на это указали.
Реклама
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: WinAvr в вопросах и ответах

Сообщение hybroid »

А объяснить ему доходчиво - язык отсохнет... Попробую я, у меня не отсохнет.
Суть в том, что оператор ~ возвращает результат с типом, используемым по умолчанию. Это int, что и заводит прямо на грабли.
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: WinAvr в вопросах и ответах

Сообщение Pnjom-Penb »

hybroid писал(а):оператор ~ возвращает результат с типом ... прямо на грабли.
Ну вот, теперь он точно не прочтет те разделы, незнание которых rised эти грабли к жизни. (Boooo! :))))
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
AntonChip
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Сб май 16, 2015 22:42:01
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение AntonChip »

До того как написать в этот высокоинтеллектуальный форум делал так, не работает:

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

if(((unsigned char)ir_code[0] == ~(unsigned char)ir_code[1]) && ((unsigned char)ir_code[2] == ~(unsigned char)ir_code[3]))
{
}
Так работает:

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

if(((unsigned char)ir_code[0] == (unsigned char)~ir_code[1]) && ((unsigned char)ir_code[2] == (unsigned char)~ir_code[3]))
{
}
Реклама
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: WinAvr в вопросах и ответах

Сообщение Pnjom-Penb »

AntonChip писал(а):~(unsigned char)ir_code[1] - так, не работает
То есть, преобразовывали unsigned char в unsigned char же?
До сего дня был уверен, что написать такое не под силу никому. "О, сколько нам открытий чудных...".
Все же прочтите хотя бы немного о языке Си, хотя бы те два раздела... :facepalm: Может тогда простейшие истины перестанут казаться колдовством и слово "высокоинтеллектуальный" обретет свое первоначальное содержание...

________________
- А на горизонте виднелся маааленький ...
- Большой!!!
- ... А на горизонте виднелся большой ... маааленький кораблик...

©
Реклама
Аватара пользователя
AntonChip
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Сб май 16, 2015 22:42:01
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение AntonChip »

Pnjom-Penb писал(а):Все же прочтите хотя бы немного о языке Си, хотя бы те два раздела... :facepalm: Может тогда простейшие истины перестанут казаться колдовством и слово "высокоинтеллектуальный" обретет свое первоначальное содержание...
А какое содержание еще может быть у слова "высокоинтеллектуальный"?
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: WinAvr в вопросах и ответах

Сообщение Pnjom-Penb »

AntonChip писал(а):А какое еще содержание может быть у слова "высокоинтеллектуальный"?
См. сами. :)))

Для сравнения:
  • - Да вы напрасно его прелестным ругаете.
© "С.с.", МАБ
Аватара пользователя
AntonChip
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Сб май 16, 2015 22:42:01
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение AntonChip »

Pnjom-Penb, спасибо
TheAbcs
Родился
Сообщения: 11
Зарегистрирован: Ср июл 22, 2009 18:05:46
Откуда: Россия
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение TheAbcs »

Надеюсь, вопрос по makefile будет в тему...
Я очень начинающий WinAvr пользователь, поэтому, вероятно, спрошу глупость.
Объясните (или направьте - где можно почитать, беглый гуглопоиск не помог), что значат строчки в makefile:
OPT_DEFS += -DPS2_USE_USART
и
PS2_USE_USART = yes

И еще одно - я запускаю make из "консоли" (cmd). При работе он выводит ну очень много - полезной, как оказалось,- инфы. Как ее загнать в один файл - а то буфер не бесконечен и начальная часть теряется. В два файла (1>1.txt 2>2.txt) я научился, но ведь наверняка есть способ проще...
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: WinAvr в вопросах и ответах

Сообщение COKPOWEHEU »

Используется ли где-то в коде макрос PS2_USE_USART?
make > file.txt не работает?
TheAbcs
Родился
Сообщения: 11
Зарегистрирован: Ср июл 22, 2009 18:05:46
Откуда: Россия
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение TheAbcs »

COKPOWEHEU писал(а):Используется ли где-то в коде макрос PS2_USE_USART?
у меня сложилось впечатление, что это не макрос, а флаг...
он используется в конструкции
ifdef PS2_USE_USART
SRC += protocol/ps2_usart.c
SRC += protocol/ps2_io_avr.c
OPT_DEFS += -DPS2_USE_USART
endif
но в первом случае файлы не компилируются, в во втором - компилируются
собственно, интересно, что делает "OPT_DEFS += -D"
я ради интереса (в процессе изысканий) попробовал написать
OPT_DEFS += -DPS2_USE_USART = yes
но при компиляции вылезла ошибка на первом же файле - "невозможно найти путь" или что-то подобное...
COKPOWEHEU писал(а):make > file.txt не работает?
интернет говорит, что у make два потока вывода, то есть указанное мною выше
make >1.txt >2.txt
позволяет получить близкое к желаемому, но файла получается два и надо думать, что с чем взаимосвязано (по моменту вывода)
хотя, в общем, все понятно, конечно...
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Alexeyslav »

Что-то мне подсказывает что OPT_DEFS это список опций компилятора и выражение это добавляет к параметрам с которыми запустится компилятор определение PS2_USE_USART.

а строка "SRC += protocol/ps2_usart.c" добавляет к списку подключаемых исходников указанные файлы.
Andrey3885
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб дек 26, 2015 22:28:05

Re: WinAvr в вопросах и ответах

Сообщение Andrey3885 »

Уважаемые форумчане, я не так давно перешёл на си. При компиляции столкнулся с таким warning-ом (' ... ' may be used uninitialized in this function), при чём в разных проэктах. Привожу пример, где получаю такое придупреждение (это только пример, реальные функции сложнее):

void func()
{
unsigned char status=0b10000010;
unsigned char X, Y;

do{

if(status&(1<<1)
X=5;

...


Y=X+3;

...

PORTB=Y;


status=Console();

...

} while(status&(1<<7));

}

В Протеусе всё работает, но я хочу понять, чем вызвано это предупреждение и что с ним делать? Веть по логике алгоритма X как минимум один раз будет инициализирована.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

Andrey3885 писал(а):if(status&(1<<1)
X=5;
благодаря аккуратности форматирования вашего кода невозможно понять, является ли X=5 единственным оператором блока if или нет. однако, при любом раскладе если условие if не будет выполнено, переменная X окажется не инициализированной.

отслеживать содержимое глобальных переменных, и переменных, меняемых в других функциях, компилятор не может, поэтому не понимает, выполнится ли и когда именно ваше условие, потому на всякий случай предупреждает, что переменная может оказаться с непредсказуемым значением.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение WiseLord »

Ну и, более того, тут нет закрывающей скобки в условии if.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

WiseLord писал(а):Ну и, более того, тут нет закрывающей скобки в условии if.
я о том и писал:
ARV писал(а):благодаря аккуратности форматирования вашего кода
т.к. много кода пропущено, нельзя понять, есть там что-то еще или нет, и было ли оно вообще...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Andrey3885
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб дек 26, 2015 22:28:05

Re: WinAvr в вопросах и ответах

Сообщение Andrey3885 »

Уважаемый ARV я начинающий, прошу Вас отнестись с пониманием, тепер по сути:
ARV писал(а):благодаря аккуратности форматирования вашего кода невозможно понять, является ли X=5 единственным оператором блока if или нет. однако, при любом раскладе если условие if не будет выполнено, переменная X окажется не инициализированной.
Знакомился с Си по книгам, так вот там по поводу фигурных скобок говорилось, что група оператороров должна быть взята в фигурные скобки, один оператор брать в фигурные скобки не обязательно. У меня в приведённом примере после if(True) выполняется один оператор.
ARV писал(а):отслеживать содержимое глобальных переменных, и переменных, меняемых в других функциях, компилятор не может, поэтому не понимает, выполнится ли и когда именно ваше условие, потому на всякий случай предупреждает, что переменная может оказаться с непредсказуемым значением.
У меня в начале функции при объявлении переменной status, выполняется её инициализация начальным значением 0b10000010. В первой интерации в if проверяется установка бита 1 переменной status, который установлен при инициализации, и соответственно в 1 интерации X присваивается 5. В дальнейшем, X=5 может не выполниться, но как минимум один раз этот оператор выполнится, и X до использования будет инициализирован. Я хочу понять почему компилятор этого не видит.
Andrey3885
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Сб дек 26, 2015 22:28:05

Re: WinAvr в вопросах и ответах

Сообщение Andrey3885 »

WiseLord писал(а):Ну и, более того, тут нет закрывающей скобки в условии if.
Извеняюсь, ошибся, я писал пример в редакторе ответов форума
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Alexeyslav »

Компилятор не настолько умный чтобы рассматривать все возможные ветви условий, тем более ваша переменная могла быть изменена где-то в коде по пути от инициализации до условия. Да и условие могло быть и посложнее.
Компиляторы такие ситуации не разруливают настолько глубоко, этим занимаются отдельные статические анализаторы кода.
Если хотите чтобы начальное значение Х было равно 5 то так и сделайте. Такая инициализация значением переменной X как у вас сомнительна в плане надёжности, хоть алгоритм и очевиден с первого взгляда. Но не всегда будет так.
Ответить

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