реклама на сайте
подробности

 
 
6 страниц V  « < 2 3 4 5 6 >  
Reply to this topicStart new topic
> Как последовательно вытаскивать биты из массива?
sigmaN
сообщение Jan 8 2011, 16:59
Сообщение #46


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



CodeVision в топку! use gcc ))


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
WHALE
сообщение Jan 9 2011, 10:46
Сообщение #47


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



delete


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 9 2011, 14:47
Сообщение #48


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(мега16 @ Jan 8 2011, 08:36) *
CVAVR на uint8_t ругается.
замените uint8_t на unsigned char


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
мега16
сообщение Jan 9 2011, 16:35
Сообщение #49


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893



Проблема решена уже.
Go to the top of the page
 
+Quote Post
мега16
сообщение Jan 24 2011, 05:20
Сообщение #50


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893



Упростил так-
Код
  void bits(){unsigned int i,j;
    for (i=0; i<32; i++) {
        for (j=0; j<8; j++) {
          if (mass[i] & (1 << j))
          {DS = 1;}     //записываем в линию данных
          else {DS = 0;}        
        }}}

Работать то работает, но хочется конкретно понять, а именно вот эту часть-
Код
if (mass[i] & (1 << j))

Если на словах сказать-получается так- Если первый байт(к примеру) равен 1 и следующий бит равен 1, то...,но как может быть байт равен единице,там же 8 битов. И вообще, можно ли вытащить биты без двух циклов, у меня там всегда 32 байта по 8 битов, так что можно так-
Код
for (i=0; i<256; i++) {
или не можно? Я так по всякому пробовал-но не получается.
Go to the top of the page
 
+Quote Post
777777
сообщение Jan 24 2011, 05:49
Сообщение #51


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Код
code[i]&(1<<j))?1:0

Очень понравилось. Прям как типичный индусский код:

Код
if(x == true)
    return true;
else
    return false;

Я уж не говорю о том, что многоразрядные сдвиги в AVR отсутствуют и потому выражения типа 1<<j кодируются крайне неэффективно.

Впрочем, для тех, кто начинал с Паскаля, это простительно, их мозг безнадежно изуродован Паскалем и им просто не может прийти в голову написать так:

Код
        for (j = 1; j != 0; j <<= 1) {
          if (mass[i] & j)



Сообщение отредактировал 777777 - Jan 24 2011, 05:56
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jan 24 2011, 05:58
Сообщение #52


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Цитата
Если первый байт(к примеру) равен 1 и следующий бит равен 1, то...,но как может быть байт равен единице,там же 8 битов
ну так операция & же, а ещё сдвиг 1 влево на j бит (1 << j).
Дальше сами....
По Вашему посту видно, что Вы абсолютно не поняли смысл этого
Код
if (mass[i] & (1 << j))


Цитата
Я уж не говорю о том, что многоразрядные сдвиги в AVR отсутствуют и потому выражения типа 1<<j кодируются крайне неэффективно.
Тогда что же, 8 раз & с заранее заготовленными масками?
типа if( mass[j] & masks[j] ).. правда 8 байт памяти коту под хвост...
а на асме что-то типа test bit есть? а интринсик? может вообще тогда можно красиво сделать..


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
777777
сообщение Jan 24 2011, 06:00
Сообщение #53


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(sigmaN @ Jan 24 2011, 08:58) *
Тогда что же, 8 раз & с заранее заготовленными масками?
типа if( mass[j] & masks[j] ).. правда 8 байт памяти коту под хвост...
а на асме что-то типа test bit есть? а интринсик? может вообще тогда можно красиво сделать..

Вот-вот, я же говорю: мозг паскалиста безнадежно изуродован...

Будь моя воля, я бы запретил законом преподавание программирования по паскалю

Сообщение отредактировал 777777 - Jan 24 2011, 06:03
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jan 24 2011, 06:02
Сообщение #54


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Ггг)) ну да
Цитата
for (j = 1; j != 0; j <<= 1) {
if (mass[i] & j)


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
мега16
сообщение Jan 24 2011, 06:30
Сообщение #55


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893



Да я паскаль вообще не знаю,вообще я охриненно начинающий любитель,никто мне не преподавал ничего,вот сижу и учусь в свободное время,это же не запрещается.
Go to the top of the page
 
+Quote Post
мега16
сообщение Jan 24 2011, 07:57
Сообщение #56


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893



Ну так-можно ли вытаскивать байты в одном цикле for ?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 24 2011, 08:25
Сообщение #57


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Имхо, в недалеком будущем появится обилие тем типа "как присвоить значение 8-ми битной переменной" с последующим флеймом на 200 страниц. Нас почти 50штук (тысяч ГГ), давайте будем людьми, потому что уже стыдно перед более интеллектуальными амебами и инфузориями.
Go to the top of the page
 
+Quote Post
777777
сообщение Jan 24 2011, 08:26
Сообщение #58


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(мега16 @ Jan 24 2011, 10:57) *
Ну так-можно ли вытаскивать байты в одном цикле for ?

Байты в одном, биты - во вложенном в него.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 24 2011, 08:46
Сообщение #59


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Это же ветка для начинающих. И Паскаль неплохой язык. Уймитесь, люди.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
OlegNZH
сообщение Jan 24 2011, 09:45
Сообщение #60


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 19-11-08
Пользователь №: 41 782



У меня была проблема в другом-сдвигать сдвигать цепочку в 160 байт 4 строки (5000 диодов)! Тут каждый такт на счету, иначе даже на 16Мгц лажа. Пришлось ассм-вставку делать
CODE
#asm
OUT 0x15,R19 ; выводим
SBI 0x18,0 ;
SBI 0x12,5 ; защелкиваем
CBI 0x18,0 ;
CBI 0x12,5 ;
ROR R19 ; сдвигаем
#endasm

,выделяя для данных весь порт (благо дофига свободных было)-сам вывод в PORTx.0,
и потом 8 раз include sm.gif
#include <shift.asm>
#include <shift.asm>
........
Go to the top of the page
 
+Quote Post

6 страниц V  « < 2 3 4 5 6 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 14:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.015 секунд с 7
ELECTRONIX ©2004-2016