WinAvr в вопросах и ответах
- AntonChip
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Сб май 16, 2015 22:42:01
- Контактная информация:
Re: WinAvr в вопросах и ответах
Спасибо господа. Приведение типов использовал в первую очередь, но чтоб так ставить знак "~" не приходилось
- Реклама
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: WinAvr в вопросах и ответах
Извините, но Вы, похоже, заблуждаетесь, или хотите ввести в заблуждение окружающих. Если бы Вы использовали "приведение типов в первую очередь", то сравнение сразу заработало бы и этой темы не было бы. Так что, либо Вы использовали не приведение типов, либо его, но только после того, как Вам на это указали.AntonChip писал(а):Приведение типов использовал в первую очередь, ...
Re: WinAvr в вопросах и ответах
А объяснить ему доходчиво - язык отсохнет... Попробую я, у меня не отсохнет.
Суть в том, что оператор ~ возвращает результат с типом, используемым по умолчанию. Это int, что и заводит прямо на грабли.
Суть в том, что оператор ~ возвращает результат с типом, используемым по умолчанию. Это int, что и заводит прямо на грабли.
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: WinAvr в вопросах и ответах
Ну вот, теперь он точно не прочтет те разделы, незнание которых rised эти грабли к жизни. (Boooo!hybroid писал(а):оператор ~ возвращает результат с типом ... прямо на грабли.
- AntonChip
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Сб май 16, 2015 22:42:01
- Контактная информация:
Re: WinAvr в вопросах и ответах
До того как написать в этот высокоинтеллектуальный форум делал так, не работает:
Так работает:
Код: Выделить всё
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 в вопросах и ответах
То есть, преобразовывали unsigned char в unsigned char же?AntonChip писал(а):~(unsigned char)ir_code[1] - так, не работает
До сего дня был уверен, что написать такое не под силу никому. "О, сколько нам открытий чудных...".
Все же прочтите хотя бы немного о языке Си, хотя бы те два раздела...
________________
- А на горизонте виднелся маааленький ...
- Большой!!!
- ... А на горизонте виднелся большой ... маааленький кораблик...
©
- AntonChip
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Сб май 16, 2015 22:42:01
- Контактная информация:
Re: WinAvr в вопросах и ответах
А какое содержание еще может быть у слова "высокоинтеллектуальный"?Pnjom-Penb писал(а):Все же прочтите хотя бы немного о языке Си, хотя бы те два раздела...Может тогда простейшие истины перестанут казаться колдовством и слово "высокоинтеллектуальный" обретет свое первоначальное содержание...
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: WinAvr в вопросах и ответах
См. сами.AntonChip писал(а):А какое еще содержание может быть у слова "высокоинтеллектуальный"?
Для сравнения:
© "С.с.", МАБ
- - Да вы напрасно его прелестным ругаете.
- AntonChip
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Сб май 16, 2015 22:42:01
- Контактная информация:
Re: WinAvr в вопросах и ответах
Pnjom-Penb, спасибо
-
TheAbcs
- Родился
- Сообщения: 11
- Зарегистрирован: Ср июл 22, 2009 18:05:46
- Откуда: Россия
- Контактная информация:
Re: WinAvr в вопросах и ответах
Надеюсь, вопрос по makefile будет в тему...
Я очень начинающий WinAvr пользователь, поэтому, вероятно, спрошу глупость.
Объясните (или направьте - где можно почитать, беглый гуглопоиск не помог), что значат строчки в makefile:
OPT_DEFS += -DPS2_USE_USART
и
PS2_USE_USART = yes
И еще одно - я запускаю make из "консоли" (cmd). При работе он выводит ну очень много - полезной, как оказалось,- инфы. Как ее загнать в один файл - а то буфер не бесконечен и начальная часть теряется. В два файла (1>1.txt 2>2.txt) я научился, но ведь наверняка есть способ проще...
Я очень начинающий 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 в вопросах и ответах
Используется ли где-то в коде макрос PS2_USE_USART?
make > file.txt не работает?
make > file.txt не работает?
-
TheAbcs
- Родился
- Сообщения: 11
- Зарегистрирован: Ср июл 22, 2009 18:05:46
- Откуда: Россия
- Контактная информация:
Re: WinAvr в вопросах и ответах
у меня сложилось впечатление, что это не макрос, а флаг...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
но при компиляции вылезла ошибка на первом же файле - "невозможно найти путь" или что-то подобное...
интернет говорит, что у make два потока вывода, то есть указанное мною вышеCOKPOWEHEU писал(а):make > file.txt не работает?
make >1.txt >2.txt
позволяет получить близкое к желаемому, но файла получается два и надо думать, что с чем взаимосвязано (по моменту вывода)
хотя, в общем, все понятно, конечно...
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: WinAvr в вопросах и ответах
Что-то мне подсказывает что OPT_DEFS это список опций компилятора и выражение это добавляет к параметрам с которыми запустится компилятор определение PS2_USE_USART.
а строка "SRC += protocol/ps2_usart.c" добавляет к списку подключаемых исходников указанные файлы.
а строка "SRC += protocol/ps2_usart.c" добавляет к списку подключаемых исходников указанные файлы.
-
Andrey3885
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Сб дек 26, 2015 22:28:05
Re: WinAvr в вопросах и ответах
Уважаемые форумчане, я не так давно перешёл на си. При компиляции столкнулся с таким 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 как минимум один раз будет инициализирована.
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 в вопросах и ответах
благодаря аккуратности форматирования вашего кода невозможно понять, является ли X=5 единственным оператором блока if или нет. однако, при любом раскладе если условие if не будет выполнено, переменная X окажется не инициализированной.Andrey3885 писал(а):if(status&(1<<1)
X=5;
отслеживать содержимое глобальных переменных, и переменных, меняемых в других функциях, компилятор не может, поэтому не понимает, выполнится ли и когда именно ваше условие, потому на всякий случай предупреждает, что переменная может оказаться с непредсказуемым значением.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: WinAvr в вопросах и ответах
Ну и, более того, тут нет закрывающей скобки в условии if.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
я о том и писал:WiseLord писал(а):Ну и, более того, тут нет закрывающей скобки в условии if.
т.к. много кода пропущено, нельзя понять, есть там что-то еще или нет, и было ли оно вообще...ARV писал(а):благодаря аккуратности форматирования вашего кода
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
Andrey3885
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Сб дек 26, 2015 22:28:05
Re: WinAvr в вопросах и ответах
Уважаемый ARV я начинающий, прошу Вас отнестись с пониманием, тепер по сути:
Знакомился с Си по книгам, так вот там по поводу фигурных скобок говорилось, что група оператороров должна быть взята в фигурные скобки, один оператор брать в фигурные скобки не обязательно. У меня в приведённом примере после if(True) выполняется один оператор.ARV писал(а):благодаря аккуратности форматирования вашего кода невозможно понять, является ли X=5 единственным оператором блока if или нет. однако, при любом раскладе если условие if не будет выполнено, переменная X окажется не инициализированной.
У меня в начале функции при объявлении переменной status, выполняется её инициализация начальным значением 0b10000010. В первой интерации в if проверяется установка бита 1 переменной status, который установлен при инициализации, и соответственно в 1 интерации X присваивается 5. В дальнейшем, X=5 может не выполниться, но как минимум один раз этот оператор выполнится, и X до использования будет инициализирован. Я хочу понять почему компилятор этого не видит.ARV писал(а):отслеживать содержимое глобальных переменных, и переменных, меняемых в других функциях, компилятор не может, поэтому не понимает, выполнится ли и когда именно ваше условие, потому на всякий случай предупреждает, что переменная может оказаться с непредсказуемым значением.
-
Andrey3885
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Сб дек 26, 2015 22:28:05
Re: WinAvr в вопросах и ответах
Извеняюсь, ошибся, я писал пример в редакторе ответов форумаWiseLord писал(а):Ну и, более того, тут нет закрывающей скобки в условии if.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: WinAvr в вопросах и ответах
Компилятор не настолько умный чтобы рассматривать все возможные ветви условий, тем более ваша переменная могла быть изменена где-то в коде по пути от инициализации до условия. Да и условие могло быть и посложнее.
Компиляторы такие ситуации не разруливают настолько глубоко, этим занимаются отдельные статические анализаторы кода.
Если хотите чтобы начальное значение Х было равно 5 то так и сделайте. Такая инициализация значением переменной X как у вас сомнительна в плане надёжности, хоть алгоритм и очевиден с первого взгляда. Но не всегда будет так.
Компиляторы такие ситуации не разруливают настолько глубоко, этим занимаются отдельные статические анализаторы кода.
Если хотите чтобы начальное значение Х было равно 5 то так и сделайте. Такая инициализация значением переменной X как у вас сомнительна в плане надёжности, хоть алгоритм и очевиден с первого взгляда. Но не всегда будет так.


