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

 
 
> Как последовательно вытаскивать биты из массива?
мега16
сообщение Dec 26 2010, 12:11
Сообщение #1


Участник
*

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



Вобщем,нужно для светодиодного табло,на сдвиговые регистры пихать биты из массива,я так понимаю-нужно с конца массива поочередно брать биты. На си, например массив
Код
unsigned char code[]={0x38,0x7C,0x38,0xFE,0xFE,0x7C,0x38,0x7C};
Как их вытащить? На си код хотелось бы увидеть.
Go to the top of the page
 
+Quote Post
6 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 89)
kurtis
сообщение Dec 26 2010, 12:18
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Код
size_t i;
unsigned char some_value;

for (i=0; i<sizeof(code)/sizeof(code[0]); i++) {
    some_value = code[i];
    // some_value = *(code + i); /* альтернативный вариант */
}
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 26 2010, 12:26
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(kurtis @ Dec 26 2010, 17:18) *
Код
size_t i;
unsigned char some_value;

for (i=0; i<sizeof(code)/sizeof(code[0]); i++) {
    some_value = code[i];
    // some_value = *(code + i); /* альтернативный вариант */
}

БИТЫ не прочитали.

Код
size_t i;
unsigned char some_value;

for (i=0; i<sizeof(code)/sizeof(code[0]); i++) {
    some_value = code[i];
    // some_value = *(code + i); /* альтернативный вариант */
   for(j=0;j<8;j++) push_bit(  (code[i]&(1<<j))?1:0  )
}
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 12:35
Сообщение #4


Участник
*

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



Код
size_t i;
-а что это? Компилятор CVAVR ругается на это.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Dec 26 2010, 12:36
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(мега16 @ Dec 26 2010, 18:35) *
Код
size_t i;
-а что это? Компилятор CVAVR ругается на это.

Поставьте просто int, а можно и char, если массив у вас такой короткий. sm.gif
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 26 2010, 12:55
Сообщение #6


I WANT TO BELIEVE
******

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



a ведь никто и не посоветует человеку привыкать к стандартному заголовку stdint.h http://en.wikipedia.org/wiki/Stdint.h
и использовать uint8_t вместо unsigned char ))


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 13:02
Сообщение #7


Участник
*

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



Пробую в Протеусе, матрица на 1 букву 8х8 светодиодов, вот с этим кодом горят все светодиоды,что то не то.
Код
unsigned char counter;

unsigned char code[]={0x38};
int i;
unsigned char some_value;

DDRD=0x0F;

    RESET=1;  //линия сброса отключена
    
    for (i=0; i<sizeof(code)/sizeof(code[0]); i++) {
    some_value = code[i];
    
for (counter = 0; counter < 64; counter++){  // цикл
DS = some_value;      //записываем в линию данных
//Дергаем ногой чтоб пропихнуть бит в регистр
SH_CP = 1;
SH_CP = 0;
  }
  //Дергаем ногой и защёлкиваем данные
  ST_CP = 1;
  ST_CP = 0;
      }
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 26 2010, 13:05
Сообщение #8


I WANT TO BELIEVE
******

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



Methane ответил на Ваш вопрос. а вы же пытаетесь байт выдать за бит )


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 13:16
Сообщение #9


Участник
*

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



Извиняюсь-забыл это добавить, опять непонятно-то что красным отмечено
for(j=0;j<8;j++) push_bit( (code[i]&(1<<j))?1:0 )
Go to the top of the page
 
+Quote Post
Wise
сообщение Dec 26 2010, 13:35
Сообщение #10


Пользователь забанен
*****

Группа: Свой
Сообщений: 1 138
Регистрация: 9-08-05
Пользователь №: 7 492



Цитата(Xenia @ Dec 26 2010, 21:36) *
.. если массив у вас такой короткий. sm.gif


..Тот задумчивый и кроткий,
У кого массив короткий.
Нет сомнений за душой,
У кого массив большой.
rolleyes.gif


--------------------
It's me
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 13:45
Сообщение #11


Участник
*

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



Юмор я понимаю, но мне проблему решить..
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 26 2010, 13:50
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(мега16 @ Dec 26 2010, 18:16) *
Извиняюсь-забыл это добавить, опять непонятно-то что красным отмечено
for(j=0;j<8;j++) push_bit( (code[i]&(1<<j))?1:0 )

push_bit - функция которую. вам нужно написать
что-то вроде
static void
push_bit(char in)
{
strob = 0; //сигнал строба в 0
data_out = in; // BIT (1 нога процессора) должна опустится в 0 если на входе 0. Или подняться в 1, если на входе функции не 0.
strob = 1; // по фронту строба сдвигули бит дальше.
}

Про оператор (condition)? val_for_true:val_for_false посмотрите в книжке про С. Я не помню как оно называется.

Цитата(мега16 @ Dec 26 2010, 18:45) *
Юмор я понимаю, но мне проблему решить..

Лучше решите проблему как сделать ее дешевле в Китае.
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 14:04
Сообщение #13


Участник
*

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



Да уж,это слишком сложно для меня
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 26 2010, 14:08
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(мега16 @ Dec 26 2010, 19:04) *
Да уж,это слишком сложно для меня

Совершенно верно. На С любой дурак писать может. А вот сделать у нас, дешевле чем в Китае, это уже фиг! А сделать так чтобы китайцы не начали делать тоже самое но еще дешевле, это уже вообще не реально, как смерть фотона от старости.
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 14:12
Сообщение #15


Участник
*

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



Пойти изучать Баском АВР чтоли, все таки для себя самому сделать охота..
Go to the top of the page
 
+Quote Post
kurtis
сообщение Dec 26 2010, 14:15
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Напишите сначала программу которая просто выдает 1 байт в порт.
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 26 2010, 14:16
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(мега16 @ Dec 26 2010, 19:12) *
Пойти изучать Баском АВР чтоли, все таки для себя самому сделать охота..

JAVA.
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 14:23
Сообщение #18


Участник
*

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



Байт то в порт выводит, в том же коде есть,просто из массива вытаскивать не умею.
На JAVA для АВР компилятор есть чтоли?
Go to the top of the page
 
+Quote Post
kurtis
сообщение Dec 26 2010, 14:30
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Приведите код который у вас выводит байт в порт
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 26 2010, 14:31
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(мега16 @ Dec 26 2010, 19:23) *
Байт то в порт выводит, в том же коде есть,просто из массива вытаскивать не умею.

Все просто.

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

Разберем.

code[i]
Это просто берем значение с индексом i из массива (вектора) code.
(1<<j)
Напишите прогу (для ПС)
for (int i=0;i<10;i++) printf ( " i= %i 1<<i= %i\n" i, (1<<i));
Полученные 10 значений переведите в бинарную форму из десятичной. Потом сами догадаетесь что значит 1<<i

Ну а & просто http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%...%86%D0%B8%D1%8F

В С, переменная истинна, если хоть один бит в ней не равен 0.


Цитата
На JAVA для АВР компилятор есть чтоли?

На java можно писать для более хорошо оплачиваемых вещей, кроме как AVR.
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 14:56
Сообщение #21


Участник
*

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




Цитата
Приведите код который у вас выводит байт в порт

Код
for (counter = 0; counter < 64; counter++){  // цикл
DS = 1;      //записываем в линию данных 1
//Дергаем ногой чтоб пропихнуть бит в регистр-отправляем через порт на сдвиговые регисты
SH_CP = 1;
SH_CP = 0;
  }
  //Дергаем ногой и защёлкиваем данные
  ST_CP = 1;
  ST_CP = 0;

-отправляются 64 бита и горят все светодиоды

Ах да,вы про байт,я про бит

Сообщение отредактировал мега16 - Dec 26 2010, 14:36
Go to the top of the page
 
+Quote Post
kurtis
сообщение Dec 26 2010, 14:57
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Код
#include <limits.h>

typedef unsigned char my_type;

my_type code[]={0x38,0x7C,0x38,0xFE,0xFE,0x7C,0x38,0x7C};

int main()
{
    unsigned int i, j;

    DDRD = 0x0F;
    RESET = 1;

    for (i=0; i<sizeof(code)/sizeof(code[0]); i++) {
        for (j=0; j<(sizeof(my_type)*CHAR_BIT); j++) {
            if (code[i] & j) {
                DS = 1;
            }
            else {
                DS = 0;
            }
            SH_CP = 1;
            SH_CP = 0;
        }

    }

    ST_CP = 1;
    ST_CP = 0;

    return 0;
}
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 26 2010, 15:01
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(kurtis @ Dec 26 2010, 19:57) *
Код
#include <limits.h>

typedef unsigned char my_type;

my_type code[]={0x38,0x7C,0x38,0xFE,0xFE,0x7C,0x38,0x7C};

int main()
{
    unsigned int i, j;

    DDRD = 0x0F;
    RESET = 1;

    for (i=0; i<sizeof(code)/sizeof(code[0]); i++) {
        for (j=0; j<(sizeof(my_type)*CHAR_BIT); j++) {
            if (code[i] & j) {
                DS = 1;
            }
            else {
                DS = 0;
            }
            SH_CP = 1;
            SH_CP = 0;
        }

    }

    ST_CP = 1;
    ST_CP = 0;

    return 0;
}

Это чё?
Go to the top of the page
 
+Quote Post
kurtis
сообщение Dec 26 2010, 15:04
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



это автору
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 15:28
Сообщение #25


Участник
*

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



ВОТ СПАСИБО- это работает !
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 28 2010, 02:45
Сообщение #26


Участник
*

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



Блин,работает,но неправильно вытаскивает байты.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 28 2010, 03:59
Сообщение #27


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(kurtis @ Dec 26 2010, 22:57) *
Код
    for (i=0; i<sizeof(code)/sizeof(code[0]); i++) {
        for (j=0; j<(sizeof(my_type)*CHAR_BIT); j++) {
            if (code[i] & j) {

В последней строчке надо
Код
            if (code[i] & (1 << j)) {



--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 28 2010, 06:19
Сообщение #28


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

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



Вот так оптимальнее будет:-)
Код
uint8_t temp = code[i];

for (uint8_t j=0; j<8; j++, temp>>=1)
{
  if (temp & 1)
  {
    ...
  }
  else
  {
     ...
  }
}


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


Участник
*

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



Почему же так?
Код
my_type code[]={11111111,00000000,11110000,11100111};

Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 28 2010, 07:19
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(мега16 @ Dec 28 2010, 12:03) *
Почему же так?
Код
my_type code[]={11111111,00000000,11110000,11100111};


11110000 это десятичное число. И причем my_type должно быть 32 бита.
Лучше сделайте себе файлик,
#define BIN0000_0000 0x00
#define BIN0000_0001 0x01
#define BIN0000_0010 0x02
#define BIN0000_0011 0x03
и инклюдьте его туда где вам нужно что-то в бинарном виде рисовать.
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 28 2010, 12:58
Сообщение #31


Участник
*

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



Ну все ясно,работает правильно,вот в интернете шрифт нашел-попробовал,буква "А"-отражается нормально,правда повернуто-ну это понятно-шрифт для бегущего луча-т.е. для динамической индикации,я хочу собрать схему со статической.Главное-нормально работает код,все равно самому шрифт сделать придется,потому что 8 рядов светодиодов мало,хочу 16 сделать. Вот пример буквы "А"-
Код
my_type code[]={0x30,0x78,0xCC,0xCC,0xFC,0xCC,0xCC,0x00};


Спасибо большое всем.

Сообщение отредактировал мега16 - Dec 28 2010, 23:30
Go to the top of the page
 
+Quote Post
мега16
сообщение Jan 5 2011, 08:47
Сообщение #32


Участник
*

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



Продолжаю тему. Решил так организовать вывод символов на табло- для каждого символа функция показанная выше, символы ,какие надо вывести, записываю в массив(очень желательно в еепром,так как туда можно будет потом писать снаружи через усарт), вытаскиваю из массива символы и подставляю функции,соответствующие символам.
Если так-
Код
char mass[]={"a,b,c"};
-все нормально выводит, а если-
Код
eeprom char mass[]={"a,b,c"};
-то ничего не происходит, не могу понять..
Вот такой код-
Код
   void read_stroka(){unsigned int i;
for(i=0; i<sizeof(mass); i++){
switch(mass[i]){
   case 'a': cifra0(); break;
   case 'b': cifra1(); break;
   case 'c': cifra2(); break;
   }
}
}


Сообщение отредактировал мега16 - Jan 5 2011, 08:50
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 5 2011, 08:52
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Содержимое EEPROM располагается в своем собственном/отдельном адресном пространстве и доступ к EEPROM осуществляется через регистры модуля EEPROM.
Go to the top of the page
 
+Quote Post
мега16
сообщение Jan 5 2011, 08:53
Сообщение #34


Участник
*

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



Хм, а попонятнее можно,как же мне быть?
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 5 2011, 08:55
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(мега16 @ Jan 5 2011, 16:53) *
Хм, а попонятнее можно,как же мне быть?
Написать функцию извлечения данных из EEPROM, если таковой нет в библиотеке, сопутствующей вашему компилятору.
Go to the top of the page
 
+Quote Post
мега16
сообщение Jan 6 2011, 12:33
Сообщение #36


Участник
*

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



Вообще то CVAVR работает с EEPROM прозрачно-
Код
eeprom chap x;
x=1;
y=x;
-это нормально работает, а вот с массивом- нет, или Протеус это не понимает, на железе не проверял.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 6 2011, 18:04
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(мега16 @ Jan 6 2011, 20:33) *
Вообще то CVAVR работает с EEPROM прозрачно-
...это нормально работает, а вот с массивом- нет
В приведенном вами примере все действительно прозрачно. Константа препроцессором или оптимизатором компилятора переносится прямо в EEPROM. Проблема-то у вас не в этом, а в прямом доступе к памяти EEPROM при обращении к переменным, расположенным там. Почитайте наконец об архитектуре МК, его адресном пространстве и о различиях в типах и областях расположения данных.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 6 2011, 20:01
Сообщение #38


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

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



Цитата(rezident @ Jan 7 2011, 00:04) *
В приведенном вами примере все действительно прозрачно. Константа препроцессором или оптимизатором компилятора переносится прямо в EEPROM.
Насколько я могу судить, CV сам использует функции чтения записи при обращении к EEPROM данным (не константам). Таким образом, для пользователя предоставляется прозрачный механизм работы с EEPROM по аналогии с обычными переменными в ОЗУ.


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


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Ну я же написал выше, что при наличии библиотечных функций все просто. При отсутствии их нужно написать свои. По сути дела данные, расположенные во внутренней EEPROM, мало чем отличаются от данных, располагающихся во внешней м/с EEPROM.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 7 2011, 07:05
Сообщение #40


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

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



to мега16 приведите asm-листинг такого кода:
Код
char str1[] = "0123456789";
eeprom char str2[] = "0123456789";
for (uint8_t i=0; i<10; i++)
{
    PORTB = str1[i];
    PORTA = str2[i];
}


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


Участник
*

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



CVAVR на uint8_t ругается.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jan 8 2011, 07:16
Сообщение #42


I WANT TO BELIEVE
******

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



#include <stdint.h>


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


Участник
*

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



Ругается все равно.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 8 2011, 10:56
Сообщение #44


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



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

Цитата(мега16 @ Jan 8 2011, 16:45) *
Ругается все равно.

Ничего удивительного. CodeVision это такой недокомпилятор, использующий свою собственную интерпретацию стандарта языка Си. laughing.gif

Go to the top of the page
 
+Quote Post
мега16
сообщение Jan 8 2011, 14:21
Сообщение #45


Участник
*

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



На другом форуме посоветовали- надо объявить массив eeprom глобальным, с необходимым размером, без инициализации. В main присвоить нужные значения элементам. И так работает.
Go to the top of the page
 
+Quote Post
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
777777
сообщение Jan 24 2011, 13:11
Сообщение #61


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

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



Цитата(GetSmart @ Jan 24 2011, 11:46) *
Это же ветка для начинающих.

Поэтому им и дают советы
Цитата(GetSmart @ Jan 24 2011, 11:46) *
И Паскаль неплохой язык. Уймитесь, люди.

Только программистов приучает к дубовости и неповоротливости мышления и в результате им даже в голову не может прийти, что переменная цикла совсем не обязательно должна увеличиваться от нуля до N, а может делать что угодно, вплоть до того, что ее вообще может не быть.
Go to the top of the page
 
+Quote Post
OlegNZH
сообщение Jan 24 2011, 15:58
Сообщение #62


Участник
*

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



Это не с Паскаля начинается , с Basic-ка. sm.gif
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 24 2011, 16:07
Сообщение #63


.
******

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



Цитата(777777 @ Jan 24 2011, 18:11) *
Поэтому им и дают советы

Без ваших советов процесс шёл бы гораздо продуктивнее.
Зайдите ещё в детский садик и всем детишкам в глазки твердите что они тупые. Ну и советуйте в своём духе.


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


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(777777 @ Jan 24 2011, 18:11) *
Только программистов приучает к дубовости и неповоротливости мышления и в результате им даже в голову не может прийти, что переменная цикла совсем не обязательно должна увеличиваться от нуля до N

Да успокойтесь уже. Все уже поняли, что вы -- Настоящий Разработчик, вы умеете ставить резистор последовательно со светодиодами, знаете, как надо развести АЦП, чтоб не требовалась фильтрация, и пишете на Си.
А то, что критикуемого вами паскаля вы не знаете, и конструктива в ваших сообщениях - кот наплакал, -- это ничего, главное что вы побуждаете начинающих расти, не даёте им сбиться с пути. Продолжайте в том же духе, я мысленно вам аплодирую.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 24 2011, 16:57
Сообщение #65


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

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



Настала пора инквизиции? :-)
Цитата
Товарищ Сталин был большой любитель кино.
И лично смотрел каждый новый фильм перед тем как пустить фильм в прокат. Однажды ему показывают новую картину про то как на одной из совецких строек орудовал шпион-диверсант... Сталин посмотрел кино и говорит: "С точки зрения идеологии фильм не выдерживает критики... поэтому надо расстрелять режиссера, сценариста, всех актеров, занятых в съемке, всю массовку и весь киноперсонал..." Главный режиссер с бледным как простыня лицом: "Товарищ Сталин, может быть внести изменения в сценарий??? Допустим, шпион проникается духом совецких рабочих, перевоспитывается и становится передовиком???"
Сталин подумал, затянулся трубкой и говорит: "... ну или так..."

Кто за то чтобы расстрелять 7777777 на месте?


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


Участник
*

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



...
Кен Томпсон признал следующее - затем Деннис и Брайан разработали по-настоящему извращенный диалект Паскаля, назвав его "A". Когда мы обнаружили, что другие действительно пытаются писать программы на A, мы быстро добавили еще парочку хитрых примочек, создав B, BCPL, и, наконец, Си. Мы остановились, добившись успешной компиляции следующего:

for(;P("\n"),R-;P("|"))for(e=C;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);
...
sad.gif
PS.Шютка здесь http://www.fssr.ru/hz.php?name=News&fi...le&sid=1043

Сообщение отредактировал OlegNZH - Jan 24 2011, 17:27
Go to the top of the page
 
+Quote Post
777777
сообщение Jan 24 2011, 17:27
Сообщение #67


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

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



Цитата(AHTOXA @ Jan 24 2011, 19:36) *
Да успокойтесь уже. Все уже поняли, что вы -- Настоящий Разработчик, вы умеете ставить резистор последовательно со светодиодами, знаете, как надо развести АЦП, чтоб не требовалась фильтрация, и пишете на Си.
А то, что критикуемого вами паскаля вы не знаете, и конструктива в ваших сообщениях - кот наплакал, -- это ничего, главное что вы побуждаете начинающих расти, не даёте им сбиться с пути. Продолжайте в том же духе, я мысленно вам аплодирую.

Что с вами? У вас butthurt? Вы паскалист и шокированы, что на Си можно написать
Код
for (j = 1; j != 0; j <<= 1) {
    if (mass[i] & j)

Я могу только посочувствовать...
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 24 2011, 17:43
Сообщение #68


.
******

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



Цитата(777777 @ Jan 24 2011, 22:27) *
Я могу только посочувствовать...

Себе посочувствуйте..
Паскаль придумал Профессионал с большой буквы в 100! раз продвинутее вас. Идите нервно курить в сторонке sm.gif
Кстати, когда Паскаль был придуман, никакого Си не существовало в помине.

Сообщение отредактировал GetSmart - Jan 24 2011, 17:47


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


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(777777 @ Jan 24 2011, 22:27) *
Я могу только посочувствовать...

И это говорит человек, который не знает, что такое 1l в записи (1l<<15)? biggrin.gif
Сочувствие здесь из нас двоих как раз вызываете вы. Видно, что человек нахватался понемногу отовсюду, и сразу же возомнил себя крутым спецом. От этого и чрезмерная категоричность суждений, и неадекватные оценки, и поспешные выводы.
Надеюсь, что это временно, и когда-нибудь вы поймёте, как глупо себя вели.

И да, просто JFYI: циклы в паскале не обязательно начинаются с нуля. Кроме того, битовой маске совершенно не обязательно быть переменной цикла:
Код
var j, k : byte;
begin
  j := 1;
  for k := 1 to 8 do
  begin
    if mass[i] and j then do_something;
    j := j shl 1;
  end;
end;


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 24 2011, 20:01
Сообщение #70


;
******

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



Цитата(777777 @ Jan 24 2011, 16:11) *
Только программистов приучает к дубовости и неповоротливости мышления и в результате им даже в голову не может прийти, что переменная цикла совсем не обязательно должна увеличиваться от нуля до N, а может делать что угодно, вплоть до того, что ее вообще может не быть.

Значит, Вы не знаете Паскаля. Кстати, это уже не первый раз.
Ойц, мона было уже и не лезть.
Go to the top of the page
 
+Quote Post
777777
сообщение Jan 25 2011, 05:53
Сообщение #71


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

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



Цитата(AHTOXA @ Jan 24 2011, 20:44) *
И это говорит человек, который не знает, что такое 1l в записи (1l<<15)? biggrin.gif

Да, представь себе, я в таких случаях пишу 1L чтобы те, кто будут читать мою программу, не спутали ее с вертикальной чертой и не думали, что означает этот синтаксис. Мелочь, конечно, но...

Цитата(AHTOXA @ Jan 24 2011, 20:44) *
И да, просто JFYI: циклы в паскале не обязательно начинаются с нуля. Кроме того, битовой маске совершенно не обязательно быть переменной цикла:

Это называется "перевернуть с ног на голову". Си как раз тем и лучше паскаля, что там битовая маска может быть переменной цикла! А паскалю это недоступно - приходится водит еще одну абсолютно ненужную переменную.

Да, можете считать это чем угодно, но могу еще раз повторить: паскаль - ненавижу за его дубовость и неповоротливость и будь моя воля, я бы запретил изучение программирования по паскалю.
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jan 25 2011, 05:54
Сообщение #72


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(GetSmart @ Jan 24 2011, 21:43) *
Паскаль придумал Профессионал с большой буквы в 100! раз продвинутее вас. Идите нервно курить в сторонке sm.gif
Кстати, когда Паскаль был придуман, никакого Си не существовало в помине.

Ну, во-первых, Си придумали тоже отнюдь не дилетанты. Во-вторых, Паскаль и Си появились примерно в одно и то же время. И в-третьих, цели создания языков были разные. Если Паскаль был создан в целях обучения программированию, то Си - для упрощения создания системного программного обеспечения (ОС, компиляторов и т.д. и т.п.). Наконец, создатели обоих языков являлись профессионалами в своих областях. У каждого из языков есть свои достоинства и свои недостатки. Так что спорить тут не о чем. Или нет?
Go to the top of the page
 
+Quote Post
777777
сообщение Jan 25 2011, 06:00
Сообщение #73


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

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



Цитата(GetSmart @ Jan 24 2011, 20:43) *
Кстати, когда Паскаль был придуман, никакого Си не существовало в помине.

Алгол был придуман еще раньше - и что из этого? Только то, что паскаль оказался на помойке позже алгола.

Цитата(GetSmart @ Jan 24 2011, 20:43) *
Паскаль придумал Профессионал с большой буквы в 100! раз продвинутее вас. Идите нервно курить в сторонке sm.gif

Этот профессионал - типичный лузер, который, понимая, что K&R обошли его на порядок, тем не менее дергается и пытается что-то доказать, хотя постоянно остается догоняющим.
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jan 25 2011, 06:07
Сообщение #74


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(AHTOXA @ Jan 24 2011, 21:44) *
И это говорит человек, который не знает, что такое 1l в записи (1l<<15)? biggrin.gif
Сочувствие здесь из нас двоих как раз вызываете вы. Видно, что человек нахватался понемногу отовсюду, и сразу же возомнил себя крутым спецом. От этого и чрезмерная категоричность суждений, и неадекватные оценки, и поспешные выводы.
Надеюсь, что это временно, и когда-нибудь вы поймёте, как глупо себя вели.

И да, просто JFYI: циклы в паскале не обязательно начинаются с нуля. Кроме того, битовой маске совершенно не обязательно быть переменной цикла:
Код
var j, k : byte;
begin
  j := 1;
  for k := 1 to 8 do
  begin
    if mass[i] and j then do_something;
    j := j shl 1;
  end;
end;

А как данный код соотносится с выделением бита? Кстати, оператор shl в стандартном Паскале вообще отсутствовал.
Go to the top of the page
 
+Quote Post
777777
сообщение Jan 25 2011, 06:07
Сообщение #75


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

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



Цитата(_Bill @ Jan 25 2011, 08:54) *
Ну, во-первых, Си придумали тоже отнюдь не дилетанты.

Кто бы спорил.
Цитата(_Bill @ Jan 25 2011, 08:54) *
И в-третьих, цели создания языков были разные. Если Паскаль был создан в целях обучения программированию, то Си - для упрощения создания системного программного обеспечения (ОС, компиляторов и т.д. и т.п.).

Ошибаетесь. Поначалу это были конкурирующие языки с одним и тем же назначением. Но после того, как стало ясно, что паскаль сливает по всем параметрам, Вирт, чтобы не потерять рынок, начал заливать, что он, мол, с самого начала создавал его для обучения. На самом же деле для обучения он как раз и не подходит, так как отучает студета от гибкости, заталкивает его в узкие рамки и поэтому когда он переходит на Си, он просто не знает о том, что тех рамок уже нет, что можно сделать быстрее и проще.
Цитата(_Bill @ Jan 25 2011, 08:54) *
У каждого из языков есть свои достоинства и свои недостатки. Так что спорить тут не о чем. Или нет?

С таким же успехом можно доказываль, что у Мерседеса и Жигулей есть свои достоинства и свои недостатки и спорить тут не о чем.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 25 2011, 06:10
Сообщение #76


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(777777 @ Jan 25 2011, 10:53) *
Мелочь, конечно, но...

Да-да, я в курсе. "Крутой Профессионал С Большой Буквы ™" lol.gif
Цитата
Это называется "перевернуть с ног на голову". Си как раз тем и лучше паскаля, что там битовая маска может быть переменной цикла! А паскалю это недоступно - приходится водит еще одну абсолютно ненужную переменную.

Это называется - "по теме (помочь новичку) было сказать нечего, зато умею ненавидеть паскаль". А ведь на самом деле непонимание было совершенно не связано с паскалем (как это потом явно подтвердил сам автор темы). Но вы продолжили поносить паскаль...
Цитата
Да, можете считать это чем угодно, но могу еще раз повторить: паскаль - ненавижу за его дубовость и неповоротливость и будь моя воля, я бы запретил изучение программирования по паскалю.
Вы уже показали, что не знакомы с предметом своей ненависти, зачем же продолжать позориться? Ведь с каждым вашим постом становится всё более очевидным, что вы поёте с чужих слов, в надежде показаться "Профессионалом С Большой Буквы". Поверьте, это тщетные старания, настоящего профессионала видно не по его крутым суждениям, а по его практическим знаниям. А этого у вас, увы, пока не замечено.

Цитата(_Bill @ Jan 25 2011, 10:54) *
Так что спорить тут не о чем. Или нет?

Вообще-то сравнение шло не "автор паскаля vs авторы си", а "777777 vs автор паскаля". Как думаете, кто более профессионален? sm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
777777
сообщение Jan 25 2011, 06:14
Сообщение #77


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

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



Цитата(AHTOXA @ Jan 25 2011, 09:08) *
Это называется - "по теме (помочь новичку) было сказать нечего

Нечего? То есть писать (1<<j) - это по-вашему нормально? Пусть компилятор генерирует цикл сдвигающий единицу, ничего страшного?


Цитата(AHTOXA @ Jan 25 2011, 09:10) *
Вообще-то сравнение шло не "автор паскаля vs авторы си", а "777777 vs автор паскаля". Как думаете, кто более профессионален? sm.gif

Вообще-то сравнение шло "паскаль" vs "си", а все осталное - ваши фантазии и попытки перехода на личности.
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jan 25 2011, 06:26
Сообщение #78


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(777777 @ Jan 25 2011, 10:07) *
Кто бы спорил.

Поначалу это были конкурирующие языки с одним и тем же назначением. Но после того, как стало ясно, что паскаль сливает по всем параметрам, Вирт, чтобы не потерять рынок, начал заливать, что он, мол, с самого начала создавал его для обучения. На самом же деле для обучения он как раз и не подходит, так как отучает студета от гибкости, заталкивает его в узкие рамки и поэтому когда он переходит на Си, он просто не знает о том, что тех рамок уже нет, что можно сделать быстрее и проще.

Совсем нет. Когда Вирт придумал Паскаль и стал его использовать в своей преподавательской деятельности, для языка и компилятора не существовало. Компилятор с Паскаля появился позже, когда возникла необходимость в реально работающих программах. Если говорить о целях, то Паскаль являлся сильно типизированным языком, со строгой проверкой типов. Это позволяло избегать двусмысленностей в конструкциях. Си же напротив, многое возлагал на самих программистов, изначально в Си отсутствовала проверка типов. При этом многие конструкции языка были ориентированы на упрощение кодирования и генерирования более эффективного кода.
PS: Интересно отметить, что первый компилятор с Паскаля появился на "больших" машинах типа CDC и IBM. А первый компилятор с Си был написан для мини-ЭВМ типа Interdata, PDP. Это тоже о многом говорит.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 25 2011, 06:29
Сообщение #79


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(777777 @ Jan 25 2011, 11:14) *
Нечего? То есть писать (1<<j) - это по-вашему нормально? Пусть компилятор генерирует цикл сдвигающий единицу, ничего страшного?

Да, это нормально. Для начинающего вполне допустимо жертвовать производительностью в пользу наглядности. Сначала надо понять, как это работает вообще, а уже потом заниматься оптимизацией.
Цитата(777777 @ Jan 25 2011, 11:14) *
Вообще-то сравнение шло "паскаль" vs "си", а все осталное - ваши фантазии и попытки перехода на личности.
Вообще-то речь шла вот об этой цитате:
Цитата(GetSmart @ Jan 24 2011, 22:43) *
Себе посочувствуйте..
Паскаль придумал Профессионал с большой буквы в 100! раз продвинутее вас. Идите нервно курить в сторонке sm.gif

и в ней речь идёт именно о сравнении вас и автора паскаля.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 25 2011, 06:45
Сообщение #80


.
******

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



Цитата(777777 @ Jan 25 2011, 11:14) *
Вообще-то сравнение шло "паскаль" vs "си", а все осталное - ваши фантазии и попытки перехода на личности.

Чтобы открыто критиковать, а точнее просто срать на Паскаль, нужно сперва придумать что-то сравнимо значимое. А то это похоже это на лай дворняжки. Лично вы - никто в сравнении с теми, кто придумывал и Паскаль, ну и Си в придачу.

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

Цитата(_Bill @ Jan 25 2011, 10:54) *
Так что спорить тут не о чем. Или нет?

Наш/мой спор ведь не об этом. Так что есть.


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


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

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



Цитата(AHTOXA @ Jan 25 2011, 09:29) *
Вообще-то речь шла вот об этой цитате:

Жаль что это не моя цитата
Цитата(AHTOXA @ Jan 25 2011, 09:29) *
и в ней речь идёт именно о сравнении вас и автора паскаля.

Вот именно - речь идет о переходе на личности
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 25 2011, 06:54
Сообщение #82


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(777777 @ Jan 25 2011, 11:47) *
Жаль что это не моя цитата

Так и ответ был не вам. Вы хоть читайте внимательно что ли.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
777777
сообщение Jan 25 2011, 06:56
Сообщение #83


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

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



Цитата(GetSmart @ Jan 25 2011, 09:45) *
Чтобы открыто критиковать, а точнее просто срать на Паскаль, нужно сперва придумать что-то сравнимо значимое.

Забавное суждение. Значит вы пользуетесь плохими инструментами, покупаете бракованные микросхемы и для разводки плат выбираете худшую программу потому что сами даже такого не можете сделать? Я-то стараюсь выбрать лучшее, даже когда сам не могу сделать и худшее.
Цитата(GetSmart @ Jan 25 2011, 09:45) *
А уж периодически читая чушь, которую вы пишете в других ветках мне захотелось хотя бы в этой ветке высказаться о вашем уровне суждений.

А надо было там, где эта "чушь" была. А сейчас это действительно выглядит как лай дворняжки.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 25 2011, 07:05
Сообщение #84


.
******

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



Цитата(777777 @ Jan 25 2011, 11:56) *
А надо было там, где эта "чушь" была. А сейчас это действительно выглядит как лай дворняжки.

Всё нормально. Здесь она была самая большая.

Цитата(777777 @ Jan 25 2011, 11:56) *
Забавное суждение. Значит вы пользуетесь плохими инструментами,

Дальше этой дури читать смысла нет. С самого начала Паскаль активно использовался в обучении программированию. И тут приходит супер-мега-профи 777777 и говорит всем, что они недоумки. Если это мега-открытие, до которого не додумались тысячи-десятки/сотни людей, то за это полюбому надо вручить Нобеля biggrin.gif


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


;
******

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



Хрен с ним, с паскалем, лишь бы человек был хороший sm.gif
Насчет оптимизаций. Ну хватит делать ручную работу там, где можно автоматиццки. И на паскале конструкцию типа
Код
for j:= 0 to 7 do
begin
d := d or (1 shl j);
end;

компилер обязан привести в нормальный вид, и на сях подобные штучки оптимизируются за редким исключением. И все это поступательно движется в одном направлении: пока прграммеры тупеют, компиляторы умнеют. Шо сделаешь, диалектика.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jan 25 2011, 18:15
Сообщение #86


I WANT TO BELIEVE
******

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



Цитата
Код
(1 shl j)
компилер обязан привести в нормальный вид
на авр тоже? Ну не знаю...Мне кажется наоборот - не приведут в нормальный вид за редким исключением....


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jan 25 2011, 18:21
Сообщение #87


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(sigmaN @ Jan 25 2011, 22:15) *
на авр тоже? Ну не знаю...Мне кажется наоборот - не приведут в нормальный вид за редким исключением....

И на AVR тоже. Просто оператор shl в Паскале не является стандартным. Это - расширение.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 26 2011, 07:11
Сообщение #88


;
******

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



Цитата(sigmaN @ Jan 25 2011, 22:15) *
на авр тоже? Ну не знаю...Мне кажется наоборот - не приведут в нормальный вид за редким исключением....

Причем тут целевая машина? Посмотрите, например, PMP pascal - очень прилично для пиков.
Есть где-то для армоводов - зачат, но до половой зрелости как до луны пешком.
Кстати, Керниган когда писал свое "за что я не люблю паскаль" - в основном говорил о негибком FOR, и о том, что внутри блока низзя объявлять переменные, ... а, ну и о том, что нет статических переменных.
Извините за кривой почерк оффтоп sm.gif
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jan 26 2011, 09:54
Сообщение #89


I WANT TO BELIEVE
******

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



ну AVR я помянул именно от того, что как известно, умеет сдвигать за один такт на один бит, а тут получается надо сдвигать более чем на один бит. Т.е. будет иметь место вложенный цикл, реализующий сдвиг. Именно поэтому я немного усомнился в оптимальности такого решения.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 26 2011, 12:32
Сообщение #90


;
******

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



Цитата(sigmaN @ Jan 26 2011, 12:54) *
а тут получается надо сдвигать более чем на один бит.

Все, я понял. Вы просто вырвали из приведенного контекста (1 shl j), в то время как я привел цикл, для того, чтобы сказать, что компилер увидит, что переменная цикла "монотонно" возрастает и в выражении сдвига кроме нее других переменных нету, и просто заменит на операцию сдвига на 1 разряд в каждой итерации цикла. Вот я и говорил, что в Winavr такое уже есть, по факту гуанокод оптимизировался именно так.
Go to the top of the page
 
+Quote Post

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

 


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


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