Вопросы по С/С++ (СИ)
Re: Вопросы по С/С++ (СИ)
Сработало! Вот же костыли-то из-за малого объема ОЗУ. Сколько не писал под АВР, как правило, оперативка всегда в дефиците была по сравнению с флешем.
Re: Вопросы по С/С++ (СИ)
ks0 писал(а):Прикольно, представил себе почти все функции обработки строк char* оказываются undefined behavior!
Да нет, с char как раз проблем нет. Можно привести любой указатель к типу char* и работать с ним побайтово. А вот наоборот неверно, но это нигде и не используется, разе только в malloc. В старом стандарте он возвращал как раз char*, который мы приводили к нужному типу. Вот только malloc гарантирует, что возвращенный указатель будет правильно выровнен, поэтому мы и можем смело его приводить к, например, int*.
Re: Вопросы по С/С++ (СИ)
menzoda писал(а):Можно привести любой указатель к типу char* и работать с ним побайтово. А вот наоборот неверно, но это нигде и не используется, разе только в malloc.
Если компилятор живёт на платформе с претензиями по выравниванию - то это забота его и его стандартных библиотек чтобы обойти все эти милые особенности как можно более прозрачно для пользователя. И подавляющее большинство последних, вряд-ли задумаются об оптимизации доступа пока конкретные грабли не оходят звонко их незамутнённые лбы. Просто из ваших реплик легко складывается впечатление, что есть ограничения по явному приведению указателей на разные типы. Хотя вряд-ли это так и тип указателя это всего-лишь подсказка компилятору - чтобы знал на сколько двигать при инкременте.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
Re: Вопросы по С/С++ (СИ)
Стандарт 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.
...
Так что это только в мечтах все радужно, и компилятор все сам делает.
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.
...
Так что это только в мечтах все радужно, и компилятор все сам делает.
Re: Вопросы по С/С++ (СИ)
вопрос про компиляцию hidapi.lib
типа есть студия 2013, там готовый проект тестовый hidtest
https://github.com/downloads/signal11/h ... -0.7.0.zip
гимор вот какой
уменя виндовс 8.1 х64
я компилю конфиг вин32 дебаг и релиз
все проходит, софт запускается и выполняется функция
а дальше я пробую открыть усб клавиатуру
и ничего не выходит
клавиатура рабочая, ее снифер видит и печатает она
вопросов 2
проект был заточен под старую студию и вылазят предупреждения какие-то после конвертации
>hidtest.obj : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/SAFESEH' specification
когда я пробую запустить отладку, то вылазит сообщение, что не может запустить приложение hidapi.dll
я решил проверить, может быть ехе не видит длл
переименовал длл и попробовал запустить просто приложение в консоли, но собранное с отладкой - сразу ошибка, что длл не найдена
а как сделать так, чтобы один раз собрал hidapi.lib и ее прилинковывать? чтобы длл не таскалась
я ее в проект добавил в корень, запертил собирать длл в опциях линкера, но все равно что-то тупит
там есть в папке тестгуй ехе, который собран вообще статично с графической библиотекой fox toolkit
и видать хидапи тоже туда вкомпилена
а как это сделать? я давно компилил статически, но уже не помню и студия была 2003 что ли
если кому не лень - соберите проекты, у вас вылазит ошибка загрузки длл, когда начинаете отладку и какая система стоит
я пробовал создать профиль х64, но там вылазит ошибка конвертации size_t, а я понятия не имею, что это такое
в гугле говорят, что лучше ничего в коде не менять
вот уже где-то 12 часов ковыряюсь, хочу управлять светодиодами на клавиатуре для начала
типа есть студия 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 часов ковыряюсь, хочу управлять светодиодами на клавиатуре для начала
тематические ответы только в форуме, в приват не пишите
Re: Вопросы по С/С++ (СИ)
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! 
Re: Вопросы по С/С++ (СИ)
Siarzhuk писал(а):hid.dll работает вне зависимости от разрядности приложения и системы.
а ты можеш в курсе - через этоту обертку будет доступ к клавиатуре? а то пишут, что типа к мышам и клавиатуре доступа нет, как бы системный драйвер не дает и там есть функция detach driver
но это про линупс пишут
что-то я вызывал эту функцию, так ничего и не происходит
если я ничего не путаю, то при сборке под виндовс - там препроцессор не вставляет код в тело функции, просто ставит return 1
я еще пробовал с libusb0 + обертка на питоне
там есть фильтр, где выбираеш нужное устройство и происходит какая-то магния
клавиатура работает как обычно, но как я понял дается неэксклюзивный доступ и из других прог
но после отправки control report светодиод гаснет как и должен, но вот клавиатура больше не отвечает пока ее не передернеш
с другой стороны есть программатор авр из клавиатуры, где светодиодами мигают
https://github.com/steve-m/hidkey_gpio
правда автор под линупс делал
у другого автора я видел под виндовс на дельфях, но там непонятно какой доступ, наверное какие-то системные вызовы юзает
вот я и думают, а не страдаю ли я херней? может клавиатура и правда не дается
я просто хотел взять готовый девайс простой и расковырять
тематические ответы только в форуме, в приват не пишите
Re: Вопросы по С/С++ (СИ)
kalobyte писал(а):через этоту обертку будет доступ к клавиатуре? а то пишут, что типа к мышам и клавиатуре доступа нет, как бы системный драйвер не дает
Достоверной информацией по этому случаю не обладаю. С другой стороны - доступ через hid.dll не требует администраторских прав для доступа - так что почему-бы и не присунуть устройству контрольный пакет со стороны? Нужно экспериментировать.
kalobyte писал(а):вот я и думают, а не страдаю ли я херней? может клавиатура и правда не дается
я просто хотел взять готовый девайс простой и расковырять
Какого плана устройство? По мне так постоянно жить в ожидании подлянок со стороны системы или не дышать, боясь сделать подлянку системе - куда напряжённее чем потратиться на сборку платки с МК. Я для вышеупомянутого адаптера взял за пятнашку готовый модуль на PIC18F14K50 Devantech USB-GPIO12 для самодельщиков. Мне от него только IIC и нужен был. Платка идёт уже с бутлоадером - т.е. даже программатор не нужен.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
Re: Вопросы по С/С++ (СИ)
Siarzhuk писал(а):Какого плана устройство?
дело в том, что я решил расковырять протокол усб
поэтому за устройство взял стандартное - еще одну клавиатуру усб и у меня даже был кусочек клавиатуры усб, который называется кейпад - цифровая часть
брал у китаез, думал сделать ручное управление для станка
так вот, снифер показал, что это 2 разных устройства
т.е. код клавиатуры 6, а кейпада 7
а я думал с точки зрения системы это тот же контроллер, только там напаян один нумлок и выведены не все контакты
а оно вона как
Siarzhuk писал(а): Я для вышеупомянутого адаптера взял за пятнашку готовый модуль на PIC18F14K50 Devantech USB-GPIO12 для самодельщиков.
как раз в платках вопрос и не стоит, платка есть
http://littlewire.cc/ но это не хид, там нужен либусб0, а хочется вообще без
к тому же пока цель стоит научиться расковыривать готовые устройства
например по спецификации есть телефоны в виде усб трубки
http://support.usr.com/support/product- ... ?prod=9630
отличный девайс, но скайп с ним не работает уже
было бы неплохо прикрутить его к роутеру и там поднять воип телефон, пакет есть специальный даже
вот и хотел начать сей увлекательный процесс
так что как собрать свою плату с custom requst хватает
нет инфы по хакингу неизвестных устройств или известных
тематические ответы только в форуме, в приват не пишите
Re: Вопросы по С/С++ (СИ)
kalobyte писал(а):нет инфы по хакингу неизвестных устройств или известных
Я, когда писал дрова для одной альтернативной недо-OS-ки, сначала топал к линуксоидам - смотрел не расковыряли-ли уже они это железо. По результатам поисков либо забивал на задачу, либо тырил у них идейки и воспроизводил уже под лицензией MIT.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
Re: Вопросы по С/С++ (СИ)
Siarzhuk писал(а):бо официальная дока написана как будто специально для многовложенного рекурсивного чтения
это да, спек вообще гавно полное
я читал усб в скорлупе в переводе и в оригинале
мало чего понял
в голове никаких образов нет насчет этих конечных точек, каких-то там адресов
Siarzhuk писал(а):Или там таки полный и беспросветный vendor-specific?
как раз таки стандартный хид+аудио
из спеки я узнал, что есть даже класс хид усб телефоны и скорей всего там это реализовано
в крайнем случае можно поставить старый скайп и поснифить
я там еще пробовал расковырять длл, она не такая уж и большая, но что-то вызов функции установки времени не заработал
Siarzhuk писал(а):Так что за винду ничего отсоветовать не смогу.
дело не в системе, а в самом усб и его непонятности
тематические ответы только в форуме, в приват не пишите
Re: Вопросы по С/С++ (СИ)
kalobyte писал(а):я читал усб в скорлупе в переводе и в оригинале
мало чего понял
в голове никаких образов нет насчет этих конечных точек, каких-то там адресов
Ендпойнт - это, в моём понимании, буфер в устройстве, каждый имеющий свой адрес, размер. Пишем туда, читаем оттуда.
kalobyte писал(а):как раз таки стандартный хид+аудио
из спеки я узнал, что есть даже класс хид усб телефоны и скорей всего там это реализовано
в крайнем случае можно поставить старый скайп и поснифить
Да, если только стандартные интерфейсы - то скорее всего эвристика и не потребуется - только и глядеть, что сниффер там нахватал да по спеке сверяться на тему "что бы это значило."
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
EndPoint скорее можно сопоставить обработчику прерываний, т.к. туда попадает запрос аппаратно, а уже в обработчике этого EndPoint-а пишутся-читаются данные из буферов.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Вопросы по С/С++ (СИ)
Siarzhuk писал(а):Ендпойнт - это, в моём понимании, буфер в устройстве, каждый имеющий свой адрес, размер. Пишем туда, читаем оттуда.
ну вот так я тоже понимал
тематические ответы только в форуме, в приват не пишите
- -Valerius-
- Встал на лапы
- Сообщения: 99
- Зарегистрирован: Сб янв 12, 2013 22:43:10
- Откуда: Москва
Re: Вопросы по С/С++ (СИ)
Добрый день, ваяю часы на AVR и к155ид1, пишу на Си в Eclipse. Стоит задача "разбить" выводы портов контроллера mega32- группами по четыре. К мега32 хочу "прикрутить" шесть дешифраторов- соответственно, нужно шесть групп по 4 выхода. Проблем не возникает, если использовать целый порт для двух дешифраторов, но хочется использовать выходы AVR так сказать, в любой связке, пример:
2 выхода порта С и еще 2 порта А- составляют "группу" для одного дешифратора.
Спасибо.
2 выхода порта С и еще 2 порта А- составляют "группу" для одного дешифратора.
Спасибо.
Re: Вопросы по С/С++ (СИ)
-Valerius- писал(а):Добрый день, ваяю часы на AVR и к155ид1,
И в чем проблема?
- -Valerius-
- Встал на лапы
- Сообщения: 99
- Зарегистрирован: Сб янв 12, 2013 22:43:10
- Откуда: Москва
Re: Вопросы по С/С++ (СИ)
Моя проблема - от неопытности, не могу понять как можно объединить четыре разных вывода портов (к примеру С и А) в одну группу. Например:
{
switch(razriad_0)
{
case 0: PORT_RAZRIAD0 = data; // данные (к примеру 0х9 (0b1001) ) выводим в порт С , и в порту они располагаются с PC0 по PC3
// а хотелось-бы чтобы пины контроллера были в произвольном порядке, в пределах двух портов.
Спойлер
void set_time(unsigned char razriad_0, unsigned char data) // функция вывода данных - в разряд ноль{
switch(razriad_0)
{
case 0: PORT_RAZRIAD0 = data; // данные (к примеру 0х9 (0b1001) ) выводим в порт С , и в порту они располагаются с PC0 по PC3
// а хотелось-бы чтобы пины контроллера были в произвольном порядке, в пределах двух портов.
Re: Вопросы по С/С++ (СИ)
В закладках нету, но такая либа была или у ARV, или у Liv'а.. Или у обоих..
- -Valerius-
- Встал на лапы
- Сообщения: 99
- Зарегистрирован: Сб янв 12, 2013 22:43:10
- Откуда: Москва
Re: Вопросы по С/С++ (СИ)
Понял, спасибо- посмотрю. 
Re: Вопросы по С/С++ (СИ)
Да я бы вручную раскидал, типа
Или функцию под это завел
Код: Выделить всё
if(data & 0b0001) PORTB |= 0b00100000;
else PORTB &= ~0b00100000;
if(data & 0b0110) PORTС |= 0b00011000;
else PORTС &= ~0b00011000;
if(data & 0b1000) PORTС |= 0b00000100;
else PORTС &= ~0b00000100;
...
Или функцию под это завел