day & night

C/C++ и assembler, C/C++ и assembler
Дата обновления: , перейти к новому сообщению
#1
Штуцер



Специалист
Group Icon

Группа: Наши Люди
Сообщений: 363
Регистрация: 2.03.2006
Из: The Earth planet
Пользователь №: 125.765


Респектов: 83
-----X----




Такая задачка: есть некий прибор, подключеный к паралельному порту. Нужна функция, считывающая данные с порта в массив. И маленькая, но неприятная особенность - считывать нужно побитово, не побайтово. Сама прога написана на С++. Думаю, без асемблера здесь никак. Буду очень благодарен за помощь.
User is offline
Go topGo end
 

Ответов(1 - 4)
12.07.2006 - 23:52
#2
yah



профи!
[SoftoRooMTeaM] Group Icon

Группа: Наши Люди
Сообщений: 2.336
Регистрация: 27.01.2006
Из: рнд
Пользователь №: 500


Респектов: 408
-----XXX--




QUOTE(Штуцер @ 12.07.2006 - 15:08)
Сама прога написана на С++
*



Может выложишь искходники, все-таки легче будет.
User is offline
Go topGo end
13.07.2006 - 2:35
#3
CraZy_JumPeR



Опытный юзверь
**

Группа: Пользователи
Сообщений: 112
Регистрация: 4.02.2006
Пользователь №: 116.952


Респектов: 5
-----X----


Предупреждений:


В С++ есть битовые поля.

QUOTE
Элементы структуры или объединения могут быть определены как битовые поля шириной от 1 до 16 бит, знаковые или беззнаковые. Общая форма описания битового поля:
имя_типа  имя_поля : ширина;
Допустимые типы битовых полей - int, char, unsigned int, unsigned char. Ширина битового поля - целое число от 0 до 16. Идентификатор поля может быть пропущен, в этом случае заданное число бит размещается в памяти, но будет недоступно. Для знаковых полей старший левый бит интерпретируется как знак. Над элементами битовых полей не может быть выполнена операция взятия адреса &.
Пример:
struct  Date
{ unsigned int Day:5;
  unsigned int Mon:4;
  unsigned int Year:7;} Start ={1,9,98};


Другой вопрос, чё с ними делать.:) Обратиться к ним мне так и не удалось, сколько я ни пыхтел, хотя я далеко не высшая программистская инстанция. Может тебе и удастся.
Да и нужно это было для курсача, так что выход был таким:
CODE
unsigned char* DecToBin(int Dec, int k)
{
unsigned char* res;
res = new unsigned char[k];
for (int i = 0; i < k; i++) res[i] = 0;
int lg;
for (; Dec > 0; )
{
 lg = (log(Dec)/log(2) + 0.000001);
 res[k - lg - 1] = 1;
 Dec -= pow(2,lg);
}
return res;
}

User is offline
Go topGo end
13.07.2006 - 14:18
#4
Штуцер



Специалист
Group Icon

Группа: Наши Люди
Сообщений: 363
Регистрация: 2.03.2006
Из: The Earth planet
Пользователь №: 125.765


Респектов: 83
-----X----




Спасибо, CraZy_JumPeR, полезная инфа. Но все-таки, есть в С++ функция, считывающая с порта 1 бит? А если нет, то как реализовать ее, сишную, на асемблере?
User is offline
Go topGo end
13.07.2006 - 15:26
#5
ZaHack



Большой Брат
Group Icon

Группа: Заблокированные
Сообщений: 1.252
Регистрация: 24.01.2006
Из: Where The Eagles Fly
Пользователь №: 333


Респектов: 117
-----X----




QUOTE(Штуцер @ 13.07.2006 - 15:18)
... Но все-таки, есть в С++функция, считывающая с порта 1 байт? ...
*



QUOTE
...Нужна функция, считывающая данные с порта в массив. И маленькая, но неприятная особенность - считывать нужно побитово, не побайтово.


Так тебе нужно побайтово или все-таки побитово??? Определись наконец!
User is offline
Go topGo end

Topic Options
Сейчас: 19.05.2024 - 13:09
Мобильная версия | Lite версия