Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
ks0
Прорезались зубы
Сообщения: 232
Зарегистрирован: Чт фев 28, 2013 14:16:10

Re: Вопросы по С/С++ (СИ)

Сообщение ks0 »

Сработало! Вот же костыли-то из-за малого объема ОЗУ. Сколько не писал под АВР, как правило, оперативка всегда в дефиците была по сравнению с флешем.
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Re: Вопросы по С/С++ (СИ)

Сообщение menzoda »

ks0 писал(а):Прикольно, представил себе почти все функции обработки строк char* оказываются undefined behavior!

Да нет, с char как раз проблем нет. Можно привести любой указатель к типу char* и работать с ним побайтово. А вот наоборот неверно, но это нигде и не используется, разе только в malloc. В старом стандарте он возвращал как раз char*, который мы приводили к нужному типу. Вот только malloc гарантирует, что возвращенный указатель будет правильно выровнен, поэтому мы и можем смело его приводить к, например, int*.
Аватара пользователя
Siarzhuk
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Re: Вопросы по С/С++ (СИ)

Сообщение Siarzhuk »

menzoda писал(а):Можно привести любой указатель к типу char* и работать с ним побайтово. А вот наоборот неверно, но это нигде и не используется, разе только в malloc.

Если компилятор живёт на платформе с претензиями по выравниванию - то это забота его и его стандартных библиотек чтобы обойти все эти милые особенности как можно более прозрачно для пользователя. И подавляющее большинство последних, вряд-ли задумаются об оптимизации доступа пока конкретные грабли не оходят звонко их незамутнённые лбы. Просто из ваших реплик легко складывается впечатление, что есть ограничения по явному приведению указателей на разные типы. Хотя вряд-ли это так и тип указателя это всего-лишь подсказка компилятору - чтобы знал на сколько двигать при инкременте. ;-) Физически - ведь это просто число в памяти.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Re: Вопросы по С/С++ (СИ)

Сообщение menzoda »

Стандарт C99.

6.3.2.3 Pointers
...
7. A pointer to an object or incomplete type may be converted to a pointer to a different
object or incomplete type. If the resulting pointer is not correctly aligned(57) for the
pointed-to type, the behavior is undefined.

(57) In general, the concept ‘‘correctly aligned’’ is transitive: ifapointer to type A is correctly aligned for a
pointer to type B, which in turn is correctly aligned for a pointer to type C, then a pointer to type A is
correctly aligned for a pointer to type C.

...


Так что это только в мечтах все радужно, и компилятор все сам делает.
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Вопросы по С/С++ (СИ)

Сообщение kalobyte »

вопрос про компиляцию hidapi.lib
типа есть студия 2013, там готовый проект тестовый hidtest
https://github.com/downloads/signal11/h ... -0.7.0.zip

гимор вот какой
уменя виндовс 8.1 х64
я компилю конфиг вин32 дебаг и релиз
все проходит, софт запускается и выполняется функция

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

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;
   }

и ничего не выходит
клавиатура рабочая, ее снифер видит и печатает она

вопросов 2
проект был заточен под старую студию и вылазят предупреждения какие-то после конвертации
>hidtest.obj : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/SAFESEH' specification

когда я пробую запустить отладку, то вылазит сообщение, что не может запустить приложение hidapi.dll
я решил проверить, может быть ехе не видит длл
переименовал длл и попробовал запустить просто приложение в консоли, но собранное с отладкой - сразу ошибка, что длл не найдена

а как сделать так, чтобы один раз собрал hidapi.lib и ее прилинковывать? чтобы длл не таскалась
я ее в проект добавил в корень, запертил собирать длл в опциях линкера, но все равно что-то тупит

там есть в папке тестгуй ехе, который собран вообще статично с графической библиотекой fox toolkit
и видать хидапи тоже туда вкомпилена
а как это сделать? я давно компилил статически, но уже не помню и студия была 2003 что ли

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

вот уже где-то 12 часов ковыряюсь, хочу управлять светодиодами на клавиатуре для начала
тематические ответы только в форуме, в приват не пишите
Аватара пользователя
Siarzhuk
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Re: Вопросы по С/С++ (СИ)

Сообщение Siarzhuk »

kalobyte писал(а):когда я пробую запустить отладку, то вылазит сообщение, что не может запустить приложение hidapi.dll

В настройках отладки в Debug Target нужно указывать экзешник а не длл-ку.

kalobyte писал(а):а как сделать так, чтобы один раз собрал hidapi.lib и ее прилинковывать? чтобы длл не таскалась

Собрать либку статически а не пару import.lib + dll - ну это при наличии исходного текста, конечно.

kalobyte писал(а):а как это сделать? я давно компилил статически, но уже не помню и студия была 2003 что ли

Если в проекте либки есть конфигурация для статического билда - дальнейшие действия очевидны. Если нету - в настройках проекта меняем Configuration Type с Dynamic Library на Static Library и пробуем собрать. Если повезёт - соберётся, иначе - обогатите свой кладезь знаний, пополните словарь матерных неологизмов и заработаете массу новых навыков в процессе рукопашного исправления ошибок.

kalobyte писал(а):я пробовал создать профиль х64, но там вылазит ошибка конвертации size_t, а я понятия не имею, что это такое

размер видать не совпадает на другой платформе - типичненько для подобной ситуации. Но как показывают мои личные экзерцисы в процессе строгания вот этой штуки http://sourceforge.net/p/ats909hoggy/at ... ggyStudio/ прямой доступ к hid.dll работает вне зависимости от разрядности приложения и системы. Оба билда, как х86 так и х64 пашут с одним и тем-же устройством на Win 7 x64 идентично успешно. Так что проблема не в разрядности.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Вопросы по С/С++ (СИ)

Сообщение kalobyte »

Siarzhuk писал(а):hid.dll работает вне зависимости от разрядности приложения и системы.

а ты можеш в курсе - через этоту обертку будет доступ к клавиатуре? а то пишут, что типа к мышам и клавиатуре доступа нет, как бы системный драйвер не дает и там есть функция detach driver
но это про линупс пишут
что-то я вызывал эту функцию, так ничего и не происходит
если я ничего не путаю, то при сборке под виндовс - там препроцессор не вставляет код в тело функции, просто ставит return 1

я еще пробовал с libusb0 + обертка на питоне
там есть фильтр, где выбираеш нужное устройство и происходит какая-то магния
клавиатура работает как обычно, но как я понял дается неэксклюзивный доступ и из других прог
но после отправки control report светодиод гаснет как и должен, но вот клавиатура больше не отвечает пока ее не передернеш

с другой стороны есть программатор авр из клавиатуры, где светодиодами мигают
https://github.com/steve-m/hidkey_gpio
правда автор под линупс делал

у другого автора я видел под виндовс на дельфях, но там непонятно какой доступ, наверное какие-то системные вызовы юзает

вот я и думают, а не страдаю ли я херней? может клавиатура и правда не дается
я просто хотел взять готовый девайс простой и расковырять
тематические ответы только в форуме, в приват не пишите
Аватара пользователя
Siarzhuk
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Re: Вопросы по С/С++ (СИ)

Сообщение Siarzhuk »

kalobyte писал(а):через этоту обертку будет доступ к клавиатуре? а то пишут, что типа к мышам и клавиатуре доступа нет, как бы системный драйвер не дает

Достоверной информацией по этому случаю не обладаю. С другой стороны - доступ через hid.dll не требует администраторских прав для доступа - так что почему-бы и не присунуть устройству контрольный пакет со стороны? Нужно экспериментировать.

kalobyte писал(а):вот я и думают, а не страдаю ли я херней? может клавиатура и правда не дается
я просто хотел взять готовый девайс простой и расковырять

Какого плана устройство? По мне так постоянно жить в ожидании подлянок со стороны системы или не дышать, боясь сделать подлянку системе - куда напряжённее чем потратиться на сборку платки с МК. Я для вышеупомянутого адаптера взял за пятнашку готовый модуль на PIC18F14K50 Devantech USB-GPIO12 для самодельщиков. Мне от него только IIC и нужен был. Платка идёт уже с бутлоадером - т.е. даже программатор не нужен.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Вопросы по С/С++ (СИ)

Сообщение kalobyte »

Siarzhuk писал(а):Какого плана устройство?

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

так вот, снифер показал, что это 2 разных устройства
т.е. код клавиатуры 6, а кейпада 7
а я думал с точки зрения системы это тот же контроллер, только там напаян один нумлок и выведены не все контакты
а оно вона как :roll:

Siarzhuk писал(а): Я для вышеупомянутого адаптера взял за пятнашку готовый модуль на PIC18F14K50 Devantech USB-GPIO12 для самодельщиков.

как раз в платках вопрос и не стоит, платка есть
http://littlewire.cc/ но это не хид, там нужен либусб0, а хочется вообще без

к тому же пока цель стоит научиться расковыривать готовые устройства
например по спецификации есть телефоны в виде усб трубки
http://support.usr.com/support/product- ... ?prod=9630
отличный девайс, но скайп с ним не работает уже
было бы неплохо прикрутить его к роутеру и там поднять воип телефон, пакет есть специальный даже
вот и хотел начать сей увлекательный процесс

так что как собрать свою плату с custom requst хватает
нет инфы по хакингу неизвестных устройств или известных
тематические ответы только в форуме, в приват не пишите
Аватара пользователя
Siarzhuk
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Re: Вопросы по С/С++ (СИ)

Сообщение Siarzhuk »

kalobyte писал(а):нет инфы по хакингу неизвестных устройств или известных

Я, когда писал дрова для одной альтернативной недо-OS-ки, сначала топал к линуксоидам - смотрел не расковыряли-ли уже они это железо. По результатам поисков либо забивал на задачу, либо тырил у них идейки и воспроизводил уже под лицензией MIT. ;) А так - сниффер и для начала общие знания о протоколе - фреймы, дескрипторы, иконфигурации, интерфейсы и прочая. Вроде хватает статей в научно-популярном изложении про это - бо официальная дока написана как будто специально для многовложенного рекурсивного чтения - или как точнее сказал-пожаловался один браза - "эти белые специально делают компы такими замороченными, чтобы пацаны не смогли в них разобраться". Касаемо конкретной USR-овской трубы - вроде не старая-же - должна бы стандартный USB Audio пользовать - и управление-нотификации в том-же HID интерфейсе. Или там таки полный и беспросветный vendor-specific? Но под виндой я только и всего, что обмен данными сниффил, а вся разработка шла в родной юниксоподобной системе - по понятной причине. Так что за винду ничего отсоветовать не смогу.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Вопросы по С/С++ (СИ)

Сообщение kalobyte »

Siarzhuk писал(а):бо официальная дока написана как будто специально для многовложенного рекурсивного чтения

это да, спек вообще гавно полное
я читал усб в скорлупе в переводе и в оригинале
мало чего понял
в голове никаких образов нет насчет этих конечных точек, каких-то там адресов
Siarzhuk писал(а):Или там таки полный и беспросветный vendor-specific?

как раз таки стандартный хид+аудио
из спеки я узнал, что есть даже класс хид усб телефоны и скорей всего там это реализовано
в крайнем случае можно поставить старый скайп и поснифить
я там еще пробовал расковырять длл, она не такая уж и большая, но что-то вызов функции установки времени не заработал
Siarzhuk писал(а):Так что за винду ничего отсоветовать не смогу.

дело не в системе, а в самом усб и его непонятности
тематические ответы только в форуме, в приват не пишите
Аватара пользователя
Siarzhuk
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Re: Вопросы по С/С++ (СИ)

Сообщение Siarzhuk »

kalobyte писал(а):я читал усб в скорлупе в переводе и в оригинале
мало чего понял
в голове никаких образов нет насчет этих конечных точек, каких-то там адресов

Ендпойнт - это, в моём понимании, буфер в устройстве, каждый имеющий свой адрес, размер. Пишем туда, читаем оттуда.

kalobyte писал(а):как раз таки стандартный хид+аудио
из спеки я узнал, что есть даже класс хид усб телефоны и скорей всего там это реализовано
в крайнем случае можно поставить старый скайп и поснифить

Да, если только стандартные интерфейсы - то скорее всего эвристика и не потребуется - только и глядеть, что сниффер там нахватал да по спеке сверяться на тему "что бы это значило."
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

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

Мой уютный бложик... заходите!
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Вопросы по С/С++ (СИ)

Сообщение kalobyte »

Siarzhuk писал(а):Ендпойнт - это, в моём понимании, буфер в устройстве, каждый имеющий свой адрес, размер. Пишем туда, читаем оттуда.

ну вот так я тоже понимал
тематические ответы только в форуме, в приват не пишите
Аватара пользователя
-Valerius-
Встал на лапы
Сообщения: 99
Зарегистрирован: Сб янв 12, 2013 22:43:10
Откуда: Москва

Re: Вопросы по С/С++ (СИ)

Сообщение -Valerius- »

Добрый день, ваяю часы на AVR и к155ид1, пишу на Си в Eclipse. Стоит задача "разбить" выводы портов контроллера mega32- группами по четыре. К мега32 хочу "прикрутить" шесть дешифраторов- соответственно, нужно шесть групп по 4 выхода. Проблем не возникает, если использовать целый порт для двух дешифраторов, но хочется использовать выходы AVR так сказать, в любой связке, пример:
2 выхода порта С и еще 2 порта А- составляют "группу" для одного дешифратора.
Спасибо.
Аватара пользователя
ks0
Прорезались зубы
Сообщения: 232
Зарегистрирован: Чт фев 28, 2013 14:16:10

Re: Вопросы по С/С++ (СИ)

Сообщение ks0 »

-Valerius- писал(а):Добрый день, ваяю часы на AVR и к155ид1,

И в чем проблема?
Аватара пользователя
-Valerius-
Встал на лапы
Сообщения: 99
Зарегистрирован: Сб янв 12, 2013 22:43:10
Откуда: Москва

Re: Вопросы по С/С++ (СИ)

Сообщение -Valerius- »

Моя проблема - от неопытности, не могу понять как можно объединить четыре разных вывода портов (к примеру С и А) в одну группу. Например:
Спойлерvoid set_time(unsigned char razriad_0, unsigned char data) // функция вывода данных - в разряд ноль
{
switch(razriad_0)
{
case 0: PORT_RAZRIAD0 = data; // данные (к примеру 0х9 (0b1001) ) выводим в порт С , и в порту они располагаются с PC0 по PC3
// а хотелось-бы чтобы пины контроллера были в произвольном порядке, в пределах двух портов.
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Вопросы по С/С++ (СИ)

Сообщение hybroid »

В закладках нету, но такая либа была или у ARV, или у Liv'а.. Или у обоих..
Аватара пользователя
-Valerius-
Встал на лапы
Сообщения: 99
Зарегистрирован: Сб янв 12, 2013 22:43:10
Откуда: Москва

Re: Вопросы по С/С++ (СИ)

Сообщение -Valerius- »

Понял, спасибо- посмотрю. :)
Аватара пользователя
ks0
Прорезались зубы
Сообщения: 232
Зарегистрирован: Чт фев 28, 2013 14:16:10

Re: Вопросы по С/С++ (СИ)

Сообщение ks0 »

Да я бы вручную раскидал, типа

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

if(data & 0b0001) PORTB |= 0b00100000;
else PORTB &= ~0b00100000;
if(data & 0b0110) PORTС |= 0b00011000;
else PORTС &= ~0b00011000;
if(data & 0b1000) PORTС |= 0b00000100;
else PORTС &= ~0b00000100;
...

Или функцию под это завел
Ответить

Вернуться в «Разные вопросы по МК»