Re: Вопросы по С/С++ (СИ)
Добавлено: Чт июл 16, 2015 20:31:33
Сработало! Вот же костыли-то из-за малого объема ОЗУ. Сколько не писал под АВР, как правило, оперативка всегда в дефиците была по сравнению с флешем.
Да нет, с char как раз проблем нет. Можно привести любой указатель к типу char* и работать с ним побайтово. А вот наоборот неверно, но это нигде и не используется, разе только в malloc. В старом стандарте он возвращал как раз char*, который мы приводили к нужному типу. Вот только malloc гарантирует, что возвращенный указатель будет правильно выровнен, поэтому мы и можем смело его приводить к, например, int*.ks0 писал(а): Прикольно, представил себе почти все функции обработки строк char* оказываются undefined behavior!
Если компилятор живёт на платформе с претензиями по выравниванию - то это забота его и его стандартных библиотек чтобы обойти все эти милые особенности как можно более прозрачно для пользователя. И подавляющее большинство последних, вряд-ли задумаются об оптимизации доступа пока конкретные грабли не оходят звонко их незамутнённые лбы. Просто из ваших реплик легко складывается впечатление, что есть ограничения по явному приведению указателей на разные типы. Хотя вряд-ли это так и тип указателя это всего-лишь подсказка компилятору - чтобы знал на сколько двигать при инкременте.menzoda писал(а):Можно привести любой указатель к типу char* и работать с ним побайтово. А вот наоборот неверно, но это нигде и не используется, разе только в malloc.
Код: Выделить всё
devs = hid_enumerate(0x0, 0x0);
cur_dev = devs;
while (cur_dev) {
printf("Device Found\n type: %04hx %04hx\n path: %s\n serial_number: %ls", cur_dev->vendor_id, cur_dev->product_id, cur_dev->path, cur_dev->serial_number);
printf("\n");
printf(" Manufacturer: %ls\n", cur_dev->manufacturer_string);
printf(" Product: %ls\n", cur_dev->product_string);
printf(" Release: %hx\n", cur_dev->release_number);
printf(" Interface: %d\n", cur_dev->interface_number);
printf("\n");
cur_dev = cur_dev->next;
}
hid_free_enumeration(devs);Код: Выделить всё
handle = hid_open(0x1241, 0x1203, NULL);
if (!handle) {
printf("unable to open device\n");
return 1;
}В настройках отладки в Debug Target нужно указывать экзешник а не длл-ку.kalobyte писал(а):когда я пробую запустить отладку, то вылазит сообщение, что не может запустить приложение hidapi.dll
Собрать либку статически а не пару import.lib + dll - ну это при наличии исходного текста, конечно.kalobyte писал(а):а как сделать так, чтобы один раз собрал hidapi.lib и ее прилинковывать? чтобы длл не таскалась
Если в проекте либки есть конфигурация для статического билда - дальнейшие действия очевидны. Если нету - в настройках проекта меняем Configuration Type с Dynamic Library на Static Library и пробуем собрать. Если повезёт - соберётся, иначе - обогатите свой кладезь знаний, пополните словарь матерных неологизмов и заработаете массу новых навыков в процессе рукопашного исправления ошибок.kalobyte писал(а):а как это сделать? я давно компилил статически, но уже не помню и студия была 2003 что ли
размер видать не совпадает на другой платформе - типичненько для подобной ситуации. Но как показывают мои личные экзерцисы в процессе строгания вот этой штуки http://sourceforge.net/p/ats909hoggy/at ... ggyStudio/ прямой доступ к hid.dll работает вне зависимости от разрядности приложения и системы. Оба билда, как х86 так и х64 пашут с одним и тем-же устройством на Win 7 x64 идентично успешно. Так что проблема не в разрядности.kalobyte писал(а):я пробовал создать профиль х64, но там вылазит ошибка конвертации size_t, а я понятия не имею, что это такое
а ты можеш в курсе - через этоту обертку будет доступ к клавиатуре? а то пишут, что типа к мышам и клавиатуре доступа нет, как бы системный драйвер не дает и там есть функция detach driverSiarzhuk писал(а):hid.dll работает вне зависимости от разрядности приложения и системы.
Достоверной информацией по этому случаю не обладаю. С другой стороны - доступ через hid.dll не требует администраторских прав для доступа - так что почему-бы и не присунуть устройству контрольный пакет со стороны? Нужно экспериментировать.kalobyte писал(а):через этоту обертку будет доступ к клавиатуре? а то пишут, что типа к мышам и клавиатуре доступа нет, как бы системный драйвер не дает
Какого плана устройство? По мне так постоянно жить в ожидании подлянок со стороны системы или не дышать, боясь сделать подлянку системе - куда напряжённее чем потратиться на сборку платки с МК. Я для вышеупомянутого адаптера взял за пятнашку готовый модуль на PIC18F14K50 Devantech USB-GPIO12 для самодельщиков. Мне от него только IIC и нужен был. Платка идёт уже с бутлоадером - т.е. даже программатор не нужен.kalobyte писал(а):вот я и думают, а не страдаю ли я херней? может клавиатура и правда не дается
я просто хотел взять готовый девайс простой и расковырять
дело в том, что я решил расковырять протокол усбSiarzhuk писал(а):Какого плана устройство?
как раз в платках вопрос и не стоит, платка естьSiarzhuk писал(а): Я для вышеупомянутого адаптера взял за пятнашку готовый модуль на PIC18F14K50 Devantech USB-GPIO12 для самодельщиков.
Я, когда писал дрова для одной альтернативной недо-OS-ки, сначала топал к линуксоидам - смотрел не расковыряли-ли уже они это железо. По результатам поисков либо забивал на задачу, либо тырил у них идейки и воспроизводил уже под лицензией MIT.kalobyte писал(а):нет инфы по хакингу неизвестных устройств или известных
это да, спек вообще гавно полноеSiarzhuk писал(а):бо официальная дока написана как будто специально для многовложенного рекурсивного чтения
как раз таки стандартный хид+аудиоSiarzhuk писал(а):Или там таки полный и беспросветный vendor-specific?
дело не в системе, а в самом усб и его непонятностиSiarzhuk писал(а):Так что за винду ничего отсоветовать не смогу.
Ендпойнт - это, в моём понимании, буфер в устройстве, каждый имеющий свой адрес, размер. Пишем туда, читаем оттуда.kalobyte писал(а):я читал усб в скорлупе в переводе и в оригинале
мало чего понял
в голове никаких образов нет насчет этих конечных точек, каких-то там адресов
Да, если только стандартные интерфейсы - то скорее всего эвристика и не потребуется - только и глядеть, что сниффер там нахватал да по спеке сверяться на тему "что бы это значило."kalobyte писал(а): как раз таки стандартный хид+аудио
из спеки я узнал, что есть даже класс хид усб телефоны и скорей всего там это реализовано
в крайнем случае можно поставить старый скайп и поснифить
ну вот так я тоже понималSiarzhuk писал(а):Ендпойнт - это, в моём понимании, буфер в устройстве, каждый имеющий свой адрес, размер. Пишем туда, читаем оттуда.
И в чем проблема?-Valerius- писал(а):Добрый день, ваяю часы на AVR и к155ид1,
Код: Выделить всё
if(data & 0b0001) PORTB |= 0b00100000;
else PORTB &= ~0b00100000;
if(data & 0b0110) PORTС |= 0b00011000;
else PORTС &= ~0b00011000;
if(data & 0b1000) PORTС |= 0b00000100;
else PORTС &= ~0b00000100;
...