Вопросы по С/С++ (СИ)
- Сообщения: 25
- Зарегистрирован: Вт окт 09, 2012 14:09:39
- Реклама
Вам уже все сказали и показали
если в команде один символ, то контроль такой же как и символ, если несколько смотрите мой прошлый пост.
И не нужно путать пакет с сообщением.Сообщение это та полезная информация, что передается, остальное это служебные дополнения.
Сообщением в вашем случае является код команды длина его равна одному байту значит кс такая как и сообщение, если не один, то формула вам известна( смотрим предыдущий мой пост)
если в команде один символ, то контроль такой же как и символ, если несколько смотрите мой прошлый пост.
И не нужно путать пакет с сообщением.Сообщение это та полезная информация, что передается, остальное это служебные дополнения.
Сообщением в вашем случае является код команды длина его равна одному байту значит кс такая как и сообщение, если не один, то формула вам известна( смотрим предыдущий мой пост)
Тупой вопрос. А как в С пишутся бинарные константы? 0xEE - шестнадцатеричные, 077 - восьмеричные... А для бинарных?
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Не все компиляторы поддерживают бинарные константы, но те, что понимают, ожидают такое на входе: 0b11001010
Никак.uldemir писал(а):Тупой вопрос. А как в С пишутся бинарные константы? 0xEE - шестнадцатеричные, 077 - восьмеричные... А для бинарных?
- Реклама
Для уважаемого DrGandalf: http://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html
Фи, это не ANSI Cjuzik писал(а):Для уважаемого DrGandalf: http://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html
для уважаемого juzik: в GCC как и в CVAVR нестандартный Си. Вопрос был именно про Си, а не про GCC.
Ставим плюсы: )
Находясь в форуме про программирование под МК логично было бы предположить именно эти версии компиляторов. Если бы мы были в форуме "стандарты ANSI C" тогда я бы с вами полностью согласился.
И прежде, чем критиковать обратите внимание на
И прежде, чем критиковать обратите внимание на
juzik писал(а):Не все компиляторы поддерживают бинарные константы
Пока я ковыряюсь в IAR. Там фокус с 0b0001, к сожалению, не проходит.
Собственно мне нужно для этого:
Собственно мне нужно для этого:
Код: Выделить всё
switch (enc_state) {
// Шаг вперед 1110 -> 1000 -> 0001 -> 0111
// Шаг назад 1101 -> 0100 -> 0010 -> 1011
// запрещенные комбинации 0011, 1100, 0110, 1001
case 0x03: ;
case 0x06: ;
case 0x09: ;
case 0x0C: ;
// нет движения 1111, 1010, 0101, 0000
case 0x00: ;
case 0x05: ;
case 0x0A: ;
case 0x0F: ;
default: ;
}А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Бинарные константы это расширение языка Си.
Добавьте gcc ключики -Wall -pedantic -pedantic-errors -std=iso9899:1999 и увидите "error: binary constants are a GCC extension".
На тему ANSI C, "Фи" и "не спортивно" - Как программировали Curiocity. Кто не знает, Curiocity ([къюриосити], "любопытство", "любознательность") это марсоход.
(Кто понимает английский - видео смотреть обязательно!
).
Добавьте gcc ключики -Wall -pedantic -pedantic-errors -std=iso9899:1999 и увидите "error: binary constants are a GCC extension".
На тему ANSI C, "Фи" и "не спортивно" - Как программировали Curiocity. Кто не знает, Curiocity ([къюриосити], "любопытство", "любознательность") это марсоход.
(Кто понимает английский - видео смотреть обязательно!
Последний раз редактировалось Kavka Вт дек 11, 2012 07:34:07, всего редактировалось 1 раз.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Я не писал под IAR, но может ему надо сказать как-то использовать имеено C99? Тогда по идее и бинарные константы должны появиться.
- Сообщения: 581
- Зарегистрирован: Ср янв 05, 2011 10:03:18
Ну не все ведь под Гнутым Си живут. Анси Си не знает такого формата. Посмотрите в сторону спецификатора формата в printf. Уж он бы поддержал, если бы был такой стандарт.juzik писал(а):Для уважаемого DrGandalf: http://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html
С уважением,
Виктор.
Виктор.
Имеется десятичное число, например 45. Как его перевести в 16-тиричное 0x45? Просто дописать впереди "0х" текстом не помогает 
Калькулятор Билла хорошо это делает. Набираем число и жмём "hex".
16-тиричное 0x45 это на самом деле десятичное 69masmax писал(а):Как его перевести в 16-тиричное 0x45?
+1 к виндовскому калькулятору. Хоть какой-то прок от него.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Число, оно всегда число, независимо от системы исчисления.
И 45(10) тождественно равно числу 0x2D(16) или 00101101(2)
Никуда его переводить не надо. А вот символьное представление числа может быть разным.
И 45(10) тождественно равно числу 0x2D(16) или 00101101(2)
Никуда его переводить не надо. А вот символьное представление числа может быть разным.
In theory, theory and practice are the same. In practice, they're not.
Калькулятора билла нет в AtMega128 
Пишу прошивку для микроконотроллера. Команды к нему могут прийти двумя путями: нажатием кнопок (на выходе получаем код кнопки 45) или через RS-232 с внешнего устройства (генерирует код 0x45). События вызываются одни и теже поэтому для упрощения их обработки я хочу просто привести числа к одному виду и обрабатывать вместе события.
Протокол стандартный и зашит во многие устройства, поэтому изменять команду 0x45 на команду 0x69 очень геморно. Коды кнопок тоже не переделать уже, это в плате завязано. А плата массовая.
Пишу прошивку для микроконотроллера. Команды к нему могут прийти двумя путями: нажатием кнопок (на выходе получаем код кнопки 45) или через RS-232 с внешнего устройства (генерирует код 0x45). События вызываются одни и теже поэтому для упрощения их обработки я хочу просто привести числа к одному виду и обрабатывать вместе события.
Протокол стандартный и зашит во многие устройства, поэтому изменять команду 0x45 на команду 0x69 очень геморно. Коды кнопок тоже не переделать уже, это в плате завязано. А плата массовая.
прибавляйте к коду нажимаемой кнопки число 24 и будет вам счастье)
4510 + 2410 = 6910
6910 = 4516 = 0x45

4510 + 2410 = 6910
6910 = 4516 = 0x45
Ставим плюсы: )
Ну 45 я привел для примера. Есть и другие коды клавиш 
Ладно видимо это задача не имеет простого решения. Тогда проще вешать гирлянды из условий, как сейчас и сделано. Всё работает, только код не очень красивый.
Ладно видимо это задача не имеет простого решения. Тогда проще вешать гирлянды из условий, как сейчас и сделано. Всё работает, только код не очень красивый.


