Когда используешь While(1) (gcc ubuntu), оказывается в командной строке в теле этого бесконечного цикла, автоматически будет работать ввод символов, а ввывод символов работать не будет. Вполне возможно, что их как-то и можно выводить, но мне это уже не интересно..
Хотя такое происходит не во всех случаях... почему-то именно в программировании TCP. Это очень глупо с моей стороны -плохо знаю С.
воскресенье, 24 марта 2013 г.
V-USB. AVR. LibUSB. Ubuntu
Откомпилировал я прогу hidtool, которая идет в примерах библиотеки V-USB, и столкнулся с такой ошибкой (в виндовсе такого нет):
Упрошенный вид кода таков:
Возникает потому что:
http://codebot.wordpress.com/2010/01/05/libusb-dokumentaciya/
http://microsin.ru/content/view/955/44/
Error sending message: error sending control message: Device or resource busy
error writing data: Communication error with device
Ответ был найден здесь: http://forums.obdev.at/viewtopic.php?t=1474 .Упрошенный вид кода таков:
usb_set_configuration(dev, 1);Вписывается он после: dev = openDevice();
while(usb_claim_interface(dev, 0)!= 0){
if(usb_detach_kernel_driver_np(dev, 0)<0) printf("Error 123");
}
Возникает потому что:
Полезные ссылки:
The first error indicates that Linux insists that you claim an interface. That's somewhat strange, since it should be possible to query the device's string descriptors (through endpoint 0) when the device is otherwise busy.by christian » Wed May 28, 2008 5:22 pm
http://codebot.wordpress.com/2010/01/05/libusb-dokumentaciya/
http://microsin.ru/content/view/955/44/
вторник, 5 марта 2013 г.
C/C++ чем * отличается от &
Статья
В С/С++ существует понятие указателя. Указатель – это переменная, значением которой является адрес некоторого объекта (обычно другой переменной) в памяти компьютера.
int *a; //создается указатель с типом данных int
Тип данных определяет возможные действия над указателем. Так же не стоит забывать про void.
int b=2;//создаем переменную со значением 2
a=&b;//записываем в указатель а АДРЕС значения переменной b
То есть оператор & возвращает адрес переменной.
Теперь небольшой фокус:
int *a;
int b=2;
a=&b;
int v;
v=*a;//в значение переменной v будет находиться 2
//, здесь*a -называется разыменованием
//тоесть по сути это равнозначно v=b;
Теперь самое интересное! Операции над указателями.
3) Определение значения, на которое ссылается
указатель: *p (операция косвенной адресации).
4) Увеличение (уменьшение) указателя. Увеличение выполняется как с помощью операции сложения (+), так и с помощью операции инкремента (++). Уменьшение – с помощью операции вычитания (–) либо декремента (––).
-4 байта, если *p1 имеет тип int (в 32 разрядной операционной системе) или 2 байта (в 16 разрядной операционной системе);
5) Разность двух указателей. Пусть р1 и р2 – указатели одного и того же типа. Можно определить разность р1 и р2, чтобы найти, на каком расстоянии друг от друга находятся элементы массива.
В С/С++ существует понятие указателя. Указатель – это переменная, значением которой является адрес некоторого объекта (обычно другой переменной) в памяти компьютера.
int *a; //создается указатель с типом данных int
Тип данных определяет возможные действия над указателем. Так же не стоит забывать про void.
int b=2;//создаем переменную со значением 2
a=&b;//записываем в указатель а АДРЕС значения переменной b
То есть оператор & возвращает адрес переменной.
Теперь небольшой фокус:
int *a;
int b=2;
a=&b;
int v;
v=*a;//в значение переменной v будет находиться 2
//, здесь*a -называется разыменованием
//тоесть по сути это равнозначно v=b;
Теперь самое интересное! Операции над указателями.
Над указателями определено 5 основных операций.
1)
Определение адреса указателя: &p, где p – указатель (&p – адрес ячейки, в которой находится указатель).
2)
Присваивание. Указателю можно присвоить адрес
переменной p=&q, где
p – указатель, q – идентификатор
переменной.
4) Увеличение (уменьшение) указателя. Увеличение выполняется как с помощью операции сложения (+), так и с помощью операции инкремента (++). Уменьшение – с помощью операции вычитания (–) либо декремента (––).
Например, пусть p1 – указатель,
тогда р1++
перемещает указатель на:
-1 байт, если *p1 имеет тип
char; -4 байта, если *p1 имеет тип int (в 32 разрядной операционной системе) или 2 байта (в 16 разрядной операционной системе);
-4 байта, если *p1 имеет тип float.
5) Разность двух указателей. Пусть р1 и р2 – указатели одного и того же типа. Можно определить разность р1 и р2, чтобы найти, на каком расстоянии друг от друга находятся элементы массива.
Подписаться на:
Сообщения (Atom)