- убран баг падения при переполнении массива ввода.
- убран таймаут 100 миллисекунд, делающий работу с терминалом абсолютно дискомфортной.
- убрана горячая клавиша выхода из терминала - не факт, что комбинация Ctrl+C (3) нам не понадобится для отправки в DigiUSB.
- активированы специальные клавиши клавиатуры.
- изменён режим работы терминала с железом DigiUSB:
раньше терминал собирал вводимые с клавиатуры символы в массив и отправлял этот массив в DigiUSB посимвольно при нажатии Enter(вводе символа \n (10)) (предполагается, что в DigiUSB символы будут снова собираться в массив или обрабатываться тем или иным полезным образом программными средствами DigiUSB).
при всей концептуальной правильности этого способа ввода данных, возникает вопрос: зачем мы вообще что-то делаем средствами терминала с предназначающейся для ввода в DigiUSB информацией, если стоит простая задача - отправить символ в DigiUSB?
поэтому:
все вводимые с клавиатуры символы имеют одинаковый приоритет и передаются в DigiUSB безусловно и немедленно.
*кароче, кому сложно развидеть теорию нового режима ввода - считайте, что клавиатура компьютера аппаратно подключена к DigiUSB по интерфейсу USB, вам остаётся обрабатывать нажатое на стороне DigiUSB и средствами DigiUSB.
неявный бонус: новый режим ввода по сути является режимом "game mode" - можно рулить контроллером всеми доступными клавишами клавиатуры.
фичи:
DigiUSB.println("text") печатает в терминал не так, как ожидается - т.е. печатает "text", делает возврат каретки — CR \r, делает перевод строки - LF \n без "text".
пока разбираюсь - или так и должно быть в линуксах, откуда есть пошла библиотека PDCurses, или в настройках PDCurses можно изменить дизайн поведения.
пока я разбираюсь, юзаем корректно работающую замену DigiUSB.println("text") -> DigiUSB.print("text\n"); или DigiUSB.print(a); DigiUSB.print('\n');
внешний вид терминала наследует настройки окна командной строки (CMD) Windows, поэтому настраивается там.
терминал представляет собой окно, где в первой строке снизу отображается код введённого символа, вторая строка снизу является строкой ввода, в третьей строке снизу отображается код принятого из DigiUSB символа, выше находится прокручиваемый экран принятого из DigiUSB.
- теперь можно отправлять строку символов в терминал из консоли CMD Windows в формате
digiusb 1234send_command
или
digiusb "1234 send command"
где "digiusb" - имя файла программы терминала, "1234send_command" - строка, отправляемая терминал.
в контроллер DigiUSB будут отправлены символы 1234send_command + \n (символ перевода строки).
строка отправляется посимвольно, после чего работа программы терминала завершается, запись в текстовые файлы и сообщения об ошибках выполнения не производится - подразумевается, что программно-аппаратная отладка произведена в терминале, запущенным обычным образом и неполадок не предвидится.
и, скетч для просветления - зачем, почему, как... нужное раскомментить.
#include <DigiUSB.h>
void setup() {DigiUSB.begin();}
void loop() {
if (DigiUSB.available()) {
char a = DigiUSB.read();
// static String b = "";
// b = b + a; // добавляем в конец строки принятый символ.
// DigiUSB.write(a);
DigiUSB.print(a); // печатаем в DigiUSB принятый символ - делаем эхо-char.
// что-то делаем при получении символа клавиши z(122).
// if (a == 122) {}
// или
// if (a == 'z') {}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// if (a == '\n') { // что-то делаем со строкой, если принят символ перевода строки(Enter)
// DigiUSB.print(b); // печатаем в DigiUSB собранную строку - делаем эхо-String.
// или что-то делаем и печатаем отчёт о выполненном, если принята строка "L01 on\n".
// if (b == "L01 on\n") {
// здесь что-то делаем.
// DigiUSB.print("ok!: " + b);}
// или выполняем другой код или подпрограмму.
// здесь код.
// b = ""; // в конце очищаем строку.
// }
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
DigiUSB.delay(1);
}
Клапауций 001, что , прямо сам его пофиксил?)) Здорово. Кстати в тему, интересно какие аппаратные ресурсы отъедает этот терминал. Сдаётся мне что таймер1 и прерывание PCINT, интересно бы точно узнать . А таймер1 там очень крутой, хоть и 8-битный, но у него 14-битный прескалер и возможность тактироваться через встроенный PLL синтезатор с тактовой 64MHz.
за USB там libusb отвечает - просто инициализируется железка, никакой логики, оставил как есть.
за ввод и отрисовку экрана PDCurses - настроил.
дальше C++ - читаешь символ из клавы и отправляешь в окно или usb.
исходник здесь валяется, просмотрев его, поймёшь, что писал упоротый LSD, периодически приходящий в сознание чел.
dimax пишет:
Кстати в тему, интересно какие аппаратные ресурсы отъедает этот терминал. Сдаётся мне что таймер1 и прерывание PCINT, интересно бы точно узнать . А таймер1 там очень крутой, хоть и 8-битный, но у него 14-битный прескалер и возможность тактироваться через встроенный PLL синтезатор с тактовой 64MHz.
нуу, я не готов ответить, сколько ресурсов что отъедает - у меня оно крутится в программаторе USBasp на Atmega8 и частоте 12 мегагерц.
у меня оно крутится в программаторе USBasp на Atmega8 и частоте 12 мегагерц.
а для чего он в программаторе? Я думал это исключительно для дижиспарка монитор.
это монитор для дижиспарка, дижиспарк у меня крутится на atmega8 12 мегагерц, которая аппаратно находится в железе программатора USDasp - смысл городить аппаратный интерфейс V-USB, который использует дижиспарк, если готовая железка под руками валяется?
*в чём вообще должна выражаться нехватка ресурсов контроллера?
Я имел ввиду аппаратные ресурсы, что со стороны МК для обслуживания USB ( скорее всего не только для терминалки, а для любой эмуляции) отьедается целиком таймер, прерывание. И об этом нигде не написано, по крайней мере на глаза не попадалось.
Я имел ввиду аппаратные ресурсы, что со стороны МК для обслуживания USB ( скорее всего не только для терминалки, а для любой эмуляции) отьедается целиком таймер, прерывание. И об этом нигде не написано, по крайней мере на глаза не попадалось.
написано. вся информация есть в свободном доступе
со стороны МК работает интерфейс V-USB об этом явно сказано в Readme.txt, который лежит в папке библиотеки DigisparkUSB
This is the Readme file to Objective Development's firmware-only USB driver
for Atmel AVR microcontrollers. For more information please visit
http://www.obdev.at/vusb/
V-USB — название программной библиотеки, позволяющей получить поддержку протокола USB на микроконтроллерах AVR (семейств Classic, Tiny и Mega компании Atmel), которые не имеют аппаратной поддержки USB. V-USB — название программной библиотеки, позволяющей получить поддержку протокола USB на микроконтроллерах AVR (семейств Classic, Tiny и Mega компании Atmel), которые не имеют аппаратной поддержки USB.
*мне не попадалась информация, что V-USB катастрофически занимает ресурсы
**пока, что нашёл в вики - но, это и из схемы подключения понятно
Из аппаратных ресурсов используется только прерывание по изменению сигнала на выводе (обычно INT0, подсоединенный к сигналу D+ шины USB). Таким системным требованиям удовлетворяют большинство микроконтроллеров семейства AVR.
Клапауций 001, это информация общая. У дижиспарка на тини 85 своя специфика, и по ней -ни слова. INT0 там точно свободен,т.к. это нога физически не подключена к USB. И главное про таймер нет ни слова нигде, хотя он явно используется.
ну, как так "общая"? - есть исходники V-USB, есть исходники библиотеки DigisparkUSB, которые снабжены подробнейшими комментариями.
dimax пишет:
У дижиспарка на тини 85 своя специфика, и по ней -ни слова. И главное про таймер нет ни слова нигде, хотя он явно используется.
вся специфика дижиспарка на тини 85 не выходит за рамки спецификации V-USB.
если желается узнать точно, то достаточно сравнить исходники библиотеки DigisparkUSB и V-USB
dimax пишет:
INT0 там точно свободен,т.к. это нога физически не подключена к USB.
ну, да.
/* ----------------------- Дополнительное описание MCU ------------------------ */
/* Следующие конфигурации работают по умолчанию в usbdrv.h. Вам обычно не нужно
устанавливать их. Только если Вам нужно запустить драйвер на устройстве,
которое пока не обрабатывается компилятором, который не полностью поддерживается
(как, например, IAR C) или если используете прерывание, отличное от INT0,
Вы можете задать кое-что из этого.
*/
для ATtiny85 в файле usbconfig.h указаны следующие настройки - посмотри, где там таймер - я плаваю в этом.
*а, откуда, вообще, информация о таймере, о котором нигде не сказано, но всем известно?
Я изучал этот таймер, всё было хорошо пока не попытался выводить иформацию через терминал. Стоит поменять настройки таймера при работе терминала -либо всё сразу отваливается от usb, либо скорость вывода меняется. либо просто терминал отваливается, но таймер продолжает работать. Причём любые операции не связанные с таймером проходили без глюков, осюда сделал вывод, что таймер1 занят. Возможно таймер0 свободен, до него руки не дошли.
Кстати ещё любопытно, если ресет запрограммировать как обычный порт. Можно ли будет так-же через бутлоадер заливать прошивки? :) Жирно больно из 6 портов один отдавать под ненужную функцию..
Кстати ещё любопытно, если ресет запрограммировать как обычный порт. Можно ли будет так-же через бутлоадер заливать прошивки? :) Жирно больно из 6 портов один отдавать под ненужную функцию..
в оригинальном дижиспарке так и сделано - всё льётся посредством их самописного лоадера и их софтового программатора micronucleus
Я изучал этот таймер, всё было хорошо пока не попытался выводить иформацию через терминал. Стоит поменять настройки таймера при работе терминала -либо всё сразу отваливается от usb, либо скорость вывода меняется. либо просто терминал отваливается, но таймер продолжает работать.
Наверное потому, что протокол USB довольно требователен к частоте при передаче данных, любое отклонение от допустимых по стандарту значений вызывает в драйверах аварийную ошибку и отключение устройства.
Клапауций 001, спасибо, терминал - это хорошо, а то приходилось извращаться методом вывода в блокнот через DigiKeyboard.println() :)
Живём!
Правда непонятно, чья жизнь им гарантирована.
Да и не расстрелян не значит не повешен
Эхх, как говорил один мой коллега, если что то не получается, ляг поспи и все пройдет
Честное слово, не могу придумать, зачем мне это сейчас нужно. Хотя может когда и пригодится, тогда и вспользуюсь.
хм. приходит чел в тему, задаёт вопросы, получает ответы, затем заявляет, что не понимает, что он здесь делает и зачем это всё ему нужно именно сейчас.
*kisoft, ты заблудился? - никто тебя не принуждает всё бросать и заниматься дижиспарком. если шо, то выход здесь Форум.
Я предпочитаю в HEX "0x%02X", ещё можно в десятичном и в скобках HEX.
Специальных канонов нет, зависит от типа информации.
Только в HEX удобно тем, что числа в колонках одно под другим.
Вообще вопрос философский, как аффтор посчитает понятным и удобным, так и хорошо
Я предпочитаю в HEX "0x%02X", ещё можно в десятичном и в скобках HEX. Специальных канонов нет, зависит от типа информации. Только в HEX удобно тем, что числа в колонках одно под другим. Вообще вопрос философский, как аффтор посчитает понятным и удобным, так и хорошо
ну, в монитор печатается и пересылается в USB переменная char - пытался выводить её в виде %x, но как-то оно криво отрицательные значения выводятся. остановился на %d - легко читаемое и интуитивно понятное десятичное число.
Явно перед выводом char конвертируется, потому это и происходит (более точно щас не смогу объяснить, сам не очень помню, не охота по асму лазить). Потому перед выводом char надо конвертировать, например, в unsigned char. Для примера в третьем варианте привел к unsigned int. Да, всё это на винде компилировалось и выполнялось.
фиг его знает, да и не при чём тут асм - фсё происходит на винде в MinGW C++
а, почему у тебя строка символов %s, а не символ %c ?
у меня так получается - результатом
// *где send_usb - скан-код клавы компа.
printf("%d\n", send_usb);
printf("%x\n", send_usb);
является к примеру:
8
8
-8
fffffff8
15
f
-15
fffffff1
городить костыли форматирования этого в нечто единообразное как-то не желается да и читается оно хреново - привык уже что числа от -128 до 127 у меня летают.
Asm только чтобы посмотреть приведение типов.
Насчёт %s не понял. %s - вывод строки, что у меня и есть, а %c - вывод char. Впрочем это и так понятно. Значит я вопрос не понял.
Кстати %x так и написано, что это беззнаковое целое, значит 100% происходит преобразование из char в unsigned int или типа того.
В общем можно с этим завязывать, тема HEX раскрыта :) Может кому будет полезно почитать.
Кстати %x так и написано, что это беззнаковое целое, значит 100% происходит преобразование из char в unsigned int или типа того.
Судя по примерам, происходит преобразование в long int (процессор 32-разрядный). Но конверсия (unsigned char) уменьшает число до одного байта и помогает уменьшить количество F в старших разрядах числа.
Кстати %x так и написано, что это беззнаковое целое, значит 100% происходит преобразование из char в unsigned int или типа того. В общем можно с этим завязывать, тема HEX раскрыта
для меня не раскрыта - как напечатать в HEX отрицательный char.
Клапауций 001, да я и не особо понял в чём собссно проблема. Отрицательные в хексе -да, непривычно выглядят, с ходу даже не поймёшь ,большое это число или маленькое:) Можно даже загадки новичкам загадывать, что больше, (int) 0xFFF1 или (int)0x7FFF ? )))
HEX изначально беззнаковый формат, потому отрицательный HEX - нонсенс
Как это беззнаковый, куда-ж знак растворяется что ли? :))
int val = 0xFFF1;
void setup() {
Serial.begin (9600);
Serial.print(val);
}
void loop() {
}
Вот код для примера , выдаст в сериал -15.
-15 это DEC, а не HEX.
В общем как хотите, но ужеибез меня. В гугле поискать c++ printf и в нём формат %x, там написано явно, что это беззнаковый формат. Point.
kisoft, я иногда торможу, и чего-то не понимаю, просьба разъяснить :) В данном случае не понимаю причём тут HEX, DEC и их знаковость? Где тут взаимосвязь? Есть знак, или нету знака задаётся в типе данных int16_t или uint16_t, другими словами в int старший бит несёт не числовую, а знаковую информацию. Но как это связано с хексом или dec, вот что я не пойму..
да, нет уж - снова пришёл, нагородил чепухи и свалил...
рассказывай, нафига ты мне предложил выводить char в формате HEX?
А вернуться и прочитать моё сообщение слабо? Я написал "я предпочитаю", и меня совершенно не интересует, что, при этом, предпочитают другие. И объяснений я уже тонну выкатил, да никто не хочет прочитать внимательно.
Теперь по поводу HEX, DEC. Я слегка удивлён, что вы тут все дружно начали тупить и смешивать понятия хранения и отображения. HEX, DEC это всего лишь формат для отображения информации в удобном для человека виде. Попгуглите "C++ printf" и почитайте там про %x.
Мля, всё это есть в инете, объяснять рутину нет никакого желания. Считайте как хотите. Я больше на эту тему не отвечаю, гуглите.
и, скетч для просветления - зачем, почему, как... нужное раскомментить.
Клапауций 001, что , прямо сам его пофиксил?)) Здорово. Кстати в тему, интересно какие аппаратные ресурсы отъедает этот терминал. Сдаётся мне что таймер1 и прерывание PCINT, интересно бы точно узнать . А таймер1 там очень крутой, хоть и 8-битный, но у него 14-битный прескалер и возможность тактироваться через встроенный PLL синтезатор с тактовой 64MHz.
Клапауций 001, что , прямо сам его пофиксил?))
скорее не пофиксил, а переписал логику работы.
за USB там libusb отвечает - просто инициализируется железка, никакой логики, оставил как есть.
за ввод и отрисовку экрана PDCurses - настроил.
дальше C++ - читаешь символ из клавы и отправляешь в окно или usb.
исходник здесь валяется, просмотрев его, поймёшь, что писал упоротый LSD, периодически приходящий в сознание чел.
Кстати в тему, интересно какие аппаратные ресурсы отъедает этот терминал. Сдаётся мне что таймер1 и прерывание PCINT, интересно бы точно узнать . А таймер1 там очень крутой, хоть и 8-битный, но у него 14-битный прескалер и возможность тактироваться через встроенный PLL синтезатор с тактовой 64MHz.
нуу, я не готов ответить, сколько ресурсов что отъедает - у меня оно крутится в программаторе USBasp на Atmega8 и частоте 12 мегагерц.
у меня оно крутится в программаторе USBasp на Atmega8 и частоте 12 мегагерц.
а для чего он в программаторе? Я думал это исключительно для дижиспарка монитор.
у меня оно крутится в программаторе USBasp на Atmega8 и частоте 12 мегагерц.
а для чего он в программаторе? Я думал это исключительно для дижиспарка монитор.
это монитор для дижиспарка, дижиспарк у меня крутится на atmega8 12 мегагерц, которая аппаратно находится в железе программатора USDasp - смысл городить аппаратный интерфейс V-USB, который использует дижиспарк, если готовая железка под руками валяется?
Кстати в тему, интересно какие аппаратные ресурсы отъедает этот терминал.
Я имел ввиду аппаратные ресурсы, что со стороны МК для обслуживания USB ( скорее всего не только для терминалки, а для любой эмуляции) отьедается целиком таймер, прерывание. И об этом нигде не написано, по крайней мере на глаза не попадалось.
написано. вся информация есть в свободном доступе
со стороны МК работает интерфейс V-USB об этом явно сказано в Readme.txt, который лежит в папке библиотеки DigisparkUSB
обобщённая информация в википедии
https://ru.wikipedia.org/wiki/V-USB
V-USB — название программной библиотеки, позволяющей получить поддержку протокола USB на микроконтроллерах AVR (семейств Classic, Tiny и Mega компании Atmel), которые не имеют аппаратной поддержки USB. V-USB — название программной библиотеки, позволяющей получить поддержку протокола USB на микроконтроллерах AVR (семейств Classic, Tiny и Mega компании Atmel), которые не имеют аппаратной поддержки USB.
*мне не попадалась информация, что V-USB катастрофически занимает ресурсы
**пока, что нашёл в вики - но, это и из схемы подключения понятно
Из аппаратных ресурсов используется только прерывание по изменению сигнала на выводе (обычно INT0, подсоединенный к сигналу D+ шины USB). Таким системным требованиям удовлетворяют большинство микроконтроллеров семейства AVR.
Клапауций 001, это информация общая. У дижиспарка на тини 85 своя специфика, и по ней -ни слова. INT0 там точно свободен,т.к. это нога физически не подключена к USB. И главное про таймер нет ни слова нигде, хотя он явно используется.
Клапауций 001, это информация общая.
ну, как так "общая"? - есть исходники V-USB, есть исходники библиотеки DigisparkUSB, которые снабжены подробнейшими комментариями.
У дижиспарка на тини 85 своя специфика, и по ней -ни слова. И главное про таймер нет ни слова нигде, хотя он явно используется.
вся специфика дижиспарка на тини 85 не выходит за рамки спецификации V-USB.
если желается узнать точно, то достаточно сравнить исходники библиотеки DigisparkUSB и V-USB
INT0 там точно свободен,т.к. это нога физически не подключена к USB.
ну, да.
для ATtiny85 в файле usbconfig.h указаны следующие настройки - посмотри, где там таймер - я плаваю в этом.
Я изучал этот таймер, всё было хорошо пока не попытался выводить иформацию через терминал. Стоит поменять настройки таймера при работе терминала -либо всё сразу отваливается от usb, либо скорость вывода меняется. либо просто терминал отваливается, но таймер продолжает работать. Причём любые операции не связанные с таймером проходили без глюков, осюда сделал вывод, что таймер1 занят. Возможно таймер0 свободен, до него руки не дошли.
Кстати ещё любопытно, если ресет запрограммировать как обычный порт. Можно ли будет так-же через бутлоадер заливать прошивки? :) Жирно больно из 6 портов один отдавать под ненужную функцию..
Кстати ещё любопытно, если ресет запрограммировать как обычный порт. Можно ли будет так-же через бутлоадер заливать прошивки? :) Жирно больно из 6 портов один отдавать под ненужную функцию..
в оригинальном дижиспарке так и сделано - всё льётся посредством их самописного лоадера и их софтового программатора micronucleus
Наверное потому, что протокол USB довольно требователен к частоте при передаче данных, любое отклонение от допустимых по стандарту значений вызывает в драйверах аварийную ошибку и отключение устройства.
Клапауций 001, спасибо, терминал - это хорошо, а то приходилось извращаться методом вывода в блокнот через DigiKeyboard.println() :)
все юзающие, зачисляются в роту тестеров и обязуются докладывать о неполадках и прочих неудобствах.
А какое жалование у тестеров?
они не будут расстреляны за невыполнение приказа.
т.е. им будет пожаловано самое ценное в этом мире - жизнь.
*невидимые руны лицензионного соглашения читать нужно, что бы вопросов не возникало.
Живём!
Правда непонятно, чья жизнь им гарантирована.
Да и не расстрелян не значит не повешен
Эхх, как говорил один мой коллега, если что то не получается, ляг поспи и все пройдет
не гарантирована, а пожалована - я не страховая компания, а простой командир роты тестеров.
вероятность путаницы не исключаю - заменю из обменного фонда.
*шо там у тебя не получается?
В тестеры выйти не получается, прощай жизнь. Нету у меня Digisparkа
ну, да - а, кто подключал фейс V-USB и загрузчик USBaspLoader пилил?
Ах жеж, точно. Не вникнул значит в тему, видел знакомые слова, но не осознал, только щас дошло :) Хотя Дигиспарк я всё таки погуглил W
Ах жеж, точно. Не вникнул значит в тему, видел знакомые слова, но не осознал, только щас дошло :) Хотя Дигиспарк я всё таки погуглил W
Честное слово, не могу придумать, зачем мне это сейчас нужно. Хотя может когда и пригодится, тогда и вспользуюсь.
хм. приходит чел в тему, задаёт вопросы, получает ответы, затем заявляет, что не понимает, что он здесь делает и зачем это всё ему нужно именно сейчас.
*kisoft, ты заблудился? - никто тебя не принуждает всё бросать и заниматься дижиспарком. если шо, то выход здесь Форум.
Мне этот терминал щас не нужен, вот я о чем, а не про что то еще. Ок, я закончил, хотел разговор поддержать, да не получилось :)
Мне этот терминал щас не нужен, вот я о чем, а не про что то еще.
ок - на планете Земля существует несколько миллиардов человек, кому не нужен терминал, ты один из них.
нет необходимости всем, кому не нужен терминал об этом отписываться - форум разорвёт вклочья.
На то он и форум, каждый пишет что хочет
вопрос программистам:
в каком виде выводить в терминал непечатные символы канонически правильно в виде %d(целое десятичное со знаком)?
*запилил запись ввода-вывода в текстовый файл - потестирую и опубликую позже.
Я предпочитаю в HEX "0x%02X", ещё можно в десятичном и в скобках HEX.
Специальных канонов нет, зависит от типа информации.
Только в HEX удобно тем, что числа в колонках одно под другим.
Вообще вопрос философский, как аффтор посчитает понятным и удобным, так и хорошо
ну, в монитор печатается и пересылается в USB переменная char - пытался выводить её в виде %x, но как-то оно криво отрицательные значения выводятся. остановился на %d - легко читаемое и интуитивно понятное десятичное число.
думаю так
Если нужны числа со знаком, то HEX неудобен, это да. Хотя привести char к беззнаковому типу - не вопрос
не в знаке дело, а в том, что отрицательные числа если делать %x выводятся с fffff перед значением HEX - не знаю почему.
Явно перед выводом char конвертируется, потому это и происходит (более точно щас не смогу объяснить, сам не очень помню, не охота по асму лазить). Потому перед выводом char надо конвертировать, например, в unsigned char. Для примера в третьем варианте привел к unsigned int. Да, всё это на винде компилировалось и выполнялось.
Пример (Visual Studio 2013):
городить костыли форматирования этого в нечто единообразное как-то не желается да и читается оно хреново - привык уже что числа от -128 до 127 у меня летают.
Asm только чтобы посмотреть приведение типов.
Насчёт %s не понял. %s - вывод строки, что у меня и есть, а %c - вывод char. Впрочем это и так понятно. Значит я вопрос не понял.
Кстати %x так и написано, что это беззнаковое целое, значит 100% происходит преобразование из char в unsigned int или типа того.
В общем можно с этим завязывать, тема HEX раскрыта :) Может кому будет полезно почитать.
Про дополнительный код для отрицательных чисел:
http://microkontroller.ru/programmirovanie-mikrokontrollerov-avr/pryamoy...
Судя по примерам, происходит преобразование в long int (процессор 32-разрядный). Но конверсия (unsigned char) уменьшает число до одного байта и помогает уменьшить количество F в старших разрядах числа.
для меня не раскрыта - как напечатать в HEX отрицательный char.
в byte перевести и затем?..
HEX изначально беззнаковый формат, потому отрицательный HEX - нонсенс
HEX изначально беззнаковый формат, потому отрицательный HEX - нонсенс
т.е. вывод char в формате HEX практически невозможен и не имеет смысла.
ок.
Я всё объяснил в сообщении #32 повторять нет смысла.
ничего ты не объяснил - ты сказал, что для лично тебя это не проблема.
для меня это проблема - вернуть отрицательное число из HEX
HEX изначально беззнаковый формат, потому отрицательный HEX - нонсенс
Как это беззнаковый, куда-ж знак растворяется что ли? :))
Вот код для примера , выдаст в сериал -15.
dimax, получается, что всё правильно тут #35
17
-15
18
fffffff1
*кароче, шото у меня подозрение, что оптимальным способом будет конвертация числа в восьмибитный код, а затем - представлять его, как желается.
Клапауций 001, да я и не особо понял в чём собссно проблема. Отрицательные в хексе -да, непривычно выглядят, с ходу даже не поймёшь ,большое это число или маленькое:) Можно даже загадки новичкам загадывать, что больше, (int) 0xFFF1 или (int)0x7FFF ? )))
Клапауций 001, да я и не особо понял в чём собссно проблема.
вкратце: думаю, как выводить на экран непечатные сканкоды клавиатуры - потому как printf("%c", ch) печатает бред.
HEX изначально беззнаковый формат, потому отрицательный HEX - нонсенс
Как это беззнаковый, куда-ж знак растворяется что ли? :))
Вот код для примера , выдаст в сериал -15.
-15 это DEC, а не HEX.
В общем как хотите, но ужеибез меня. В гугле поискать c++ printf и в нём формат %x, там написано явно, что это беззнаковый формат. Point.
да, нет уж - снова пришёл, нагородил чепухи и свалил...
рассказывай, нафига ты мне предложил выводить char в формате HEX?
kisoft, я иногда торможу, и чего-то не понимаю, просьба разъяснить :) В данном случае не понимаю причём тут HEX, DEC и их знаковость? Где тут взаимосвязь? Есть знак, или нету знака задаётся в типе данных int16_t или uint16_t, другими словами в int старший бит несёт не числовую, а знаковую информацию. Но как это связано с хексом или dec, вот что я не пойму..
да, нет уж - снова пришёл, нагородил чепухи и свалил...
рассказывай, нафига ты мне предложил выводить char в формате HEX?
А вернуться и прочитать моё сообщение слабо? Я написал "я предпочитаю", и меня совершенно не интересует, что, при этом, предпочитают другие. И объяснений я уже тонну выкатил, да никто не хочет прочитать внимательно.
Теперь по поводу HEX, DEC. Я слегка удивлён, что вы тут все дружно начали тупить и смешивать понятия хранения и отображения. HEX, DEC это всего лишь формат для отображения информации в удобном для человека виде. Попгуглите "C++ printf" и почитайте там про %x.
Мля, всё это есть в инете, объяснять рутину нет никакого желания. Считайте как хотите. Я больше на эту тему не отвечаю, гуглите.