Порядок байт, порядок вывода

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

JonHappy1 пишет:

Цитата:
А Вы считаете, что юниона до Си не было?

Помнится, еще в FORTRAN'е были COMMON блоки, включающие в себя функциональность юнионов.

С Адой подробно не знаком, но, судя по тому, что она восходит к Паскалю, вряд ли в ней не было аналогов юниона

...в паскале нет...

В Паскале, минимум, два механизма, делающих то же самое, что и юнион в Си:

1. Вариантная часть записи.

2. Директива absolute.

Цитата:

не разу не писав на Си , за 2 недели отладить...

Я, ни разу не писав ни на джаве, ни на процессинге, за пару вечеров собрал нечто, выполняющее функции многоканального USB-осциллографа и по совместительству логического анализатора для весьма специфического конкретного случая. И что? IMHO это должен суметь сделать любой, кому приходилось писать на нескольких других языках. Кое-что, конечно, сделал кривовато, что связано с незнанием тонкостей языка, но то, что сделал, работает, и я при этом ни к кому с глупыми вопросами обращался.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Да уже все ясно и так ..

JonHappy1
Offline
Зарегистрирован: 11.06.2018

Цитата:
Пипец наглое, брехливое ЧМО, в Паскале это называется запись с вариантами!Пипец наглое, брехливое ЧМО, в Паскале это называется запись с вариантами!
если бы ты был внимателен ты б обратил внимание на хранологию перечисленных. и не сравнивал нынешний паскаль, с паскалем тех временю.

Цитата:
В Java нет union, т.к. union можно смоделировать подклассами.
то что можно смоделировать классамиЮ совершенно не относится к тому что требуется тут, в java совершенно по- барабану что и как расположено, и сколько это занимает места. там использут шаблонизаторы и прочее, совершенно не задумываясь о быстродействии - не тенет- надо сменить железо . а  если вместо шаблонизатров использовать StringBuilder то можно плучит выйгрыш в 3 раза , это никого не смущает. там исползуют навороченные объект, это модно прогрессивно, ине задумывются что если испольвоать простые вещи то можно получить вместо такого времени выполнения 141101443,  такое 524.
так что "можно смоделировать" и получить четко  в памяти две большие разницы.

я две недели занимаюсь Cи, вы по нескольку лет.  Буквально два дня назад узнал что есть  struct, union - что вы стебётесь? сколько вы потратили времени на обучение? 

JonHappy1
Offline
Зарегистрирован: 11.06.2018

Цитата:
Кое-что, конечно, сделал кривовато, что связано с незнанием тонкостей языка, но то, что сделал, работает

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

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Раз есть желание учиццо и  "в залупу не лезешь", то и я тон снижу.

Помогу, где можно. В твоем случае нужно использовать адресную арифметику (мой пример), будет лучше по времени. Оптимизатору она привычна.

----

И еще: есть один язык программирования систем - это С и С++.. ОК, два ;) это уже религиозный спор: два это или один! ;)

Всё остальное - пока что баловство для веб-порталов.

Из 5-ого поколения нужно понимать Питон. Это один из лучших представителей ООП. Зная Питон можно писать на C#, но не наоборот.

Ява - просто один из миллионов инструментов, ИМХО, ничего особенного. У других может быть другое мнение.

Представитель именно научной школы о языках программирования тут - ЕвгенийП. Я - математик, Логик - профессиональный программист... Посидишь тут - поймешь, кто-есть-кто, по профессии вне форума.

sadman41
Offline
Зарегистрирован: 19.10.2016

...квон - угарает по классам и абстрактной марксистской философии, Семен просто читает Кернигана Ритча, плачет от умиления и пьет.

JonHappy1
Offline
Зарегистрирован: 11.06.2018

получился вот такой вариант

typedef struct  STRto9100 {
  byte address;
  byte command;
  uint16_t reg;
  uint16_t data;
  uint16_t crc;
};

//STRto9100 to9100[] = {0x31, 0x32, 0x3334,  0x3536,   0x3738};
STRto9100 to9100[] = {0x01, 0x06, 0xEA10, 0x8400, 0x0000};

byte buf[8];

void setup() {
  Serial.begin(230400);

  byte* buff = (byte*) &buf;
  getMBCRC((byte*) &to9100);

 


  for (int i = 0; i < 8; i++) {
    byte d = *(buff + i);
    Serial.print(d, HEX);
    Serial.print("+");
  }
  
    Serial.write(buf, 8);  



}



void loop() {

}

// *buf pointer to character array that contains the characters to used calculate CRC
// bufLen number of characters to calculate CRC for
// *crc pointer to the array that contains the calculated CRC
void getMBCRC(byte *bu) {    // Declare and initialize variables

  buf[0] = bu[0];
  buf[1] = bu[1];
  buf[2] = bu[3];
  buf[3] = bu[2];
  buf[4] = bu[5];
  buf[5] = bu[4];


  unsigned long crc_0 = 0xffff;
  unsigned long crc_1 = 0x0000;
  byte* crc = (byte*)&crc_0;
  int i, j;
  for (i = 0; i < 6; i++) {
    crc_0 ^= ((unsigned long)buf[i] & 0x00ff);
    for (j = 0; j < 8; j++) {
      crc_1 = (crc_0 >> 1) & 0x7fff;
      crc_0 = crc_0 & 0x0001 ? crc_1 ^ 0xa001 :  crc_1;
    }
  }
  buf[7] = crc[1];
  buf[6] = crc[0];

  return;
}

много что для просмотра/провеки  , итог в Serial.write выводит все как надо
но мне не нравится наличие дополнительного byte buf[8] и соответственно его заполнение.

 

Datak
Offline
Зарегистрирован: 09.10.2014

.

JonHappy1
Offline
Зарегистрирован: 11.06.2018

как можно померить время работы кода? в тиках, тактах и ли ещё как? чтоб была возиожность сравнивать варианты по скорости.

b707
Offline
Зарегистрирован: 26.05.2017

JonHappy1 пишет:

как можно померить время работы кода? в тиках, тактах и ли ещё как? чтоб была возиожность сравнивать варианты по скорости.

выполнить код в цикле 1000 раз и померить время миллисом или микросом

JonHappy1
Offline
Зарегистрирован: 11.06.2018

Цитата:
выполнить код в цикле 1000 раз и померить время миллисом или микросом
в java понитно выполнение кода много раз, там оптимизатор рантайма вносит лепту, а тут?  чтобы поймать с точностью более 4мкс?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

JonHappy1 пишет:
отладить клиента ws, подключить лазерный дальномер, и всё это заставить работать вместе -получив бегущую  кривую в браузере в реальном времени отражающую дальность от дачика до препятствия

Ну, блин, и дальномер подключил и с вебом связал, а вот два байта местами помеянть - ну, никак :(

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

JonHappy1 пишет:

с точностью более 4мкс?

А оно Вам точно надо с такой точностью?

sadman41
Offline
Зарегистрирован: 19.10.2016

Наверняка не менее, чем 62.5ns...

Logik
Offline
Зарегистрирован: 05.08.2014

JonHappy1 пишет:

Цитата:
выполнить код в цикле 1000 раз и померить время миллисом или микросом
в java понитно выполнение кода много раз, там оптимизатор рантайма вносит лепту, а тут?  чтобы поймать с точностью более 4мкс?

Легко. Выполняете 1000 раз, меряете время, затем в том же коде меняете константу числа повторов на допустим 5000 и снова меряете время.  Разницу второго и первого времени делиет на 5000-1000=4000. Возможно абсолютные цифры в каждом конкретном случае подобрать надо, но так можна точность и до такта получить. Даже с учетом погрешности таймера в 4мксек.

JonHappy1
Offline
Зарегистрирован: 11.06.2018

Цитата:
А оно Вам точно надо с такой точностью?
и я о том же, былою интереснее в мшинных циклах.

Цитата:
Ну, блин, и дальномер подключил и с вебом связал, а вот два байта местами помеянть - ну, никак :(
вопрос не просто поменять, а сделать это быстро, с минимумом памяти. я на примере java показал, что одного результата можно добиться разными способами , результаты будут отличаться до 5 порядков.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

JonHappy1 пишет:

если бы ты был внимателен ты б обратил внимание на хранологию перечисленных. и не сравнивал нынешний паскаль, с паскалем тех временю.

Вывсёврёти! Ключевое слово absolute, которое делает ровно то же самое, что и union, появилась в Трубо-Паскале 6.0, это примерно 1990 год.  А других паскалей с СССР тогда не было!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

я вот не понимаю, ты типа программист Java, по крайней мере себя так позиционируешь, что тебе мешает пробежать гласками, по диагонали хотябы, Евангелие от Кернигана?  Если ты лиарьно программист,  90%  тупых вопросов отпадут сразу же после прочтения, да и волосы станут мяхкими и шелковистыми.  

JonHappy1
Offline
Зарегистрирован: 11.06.2018

Цитата:
Вывсёврёти! Ключевое слово absolute, которое делает ровно то же самое, что и union, появилась в Трубо-Паскале 6.0, это примерно 1990 год.  А других паскалей с СССР тогда не было!
вот что значить молодёжь :)
до 1990 были СМ4/Электроника100 на которых  был паскаль

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Был. Первые попытки разобраться чегой-то там вылазит из ПЗС-матриц (алгоритм поиска границы "объекта", алгоритм повышения контрастности границы и др.) писал на каком-то ДВК-Паскале .. 1985-86гг.. :)

JonHappy1
Offline
Зарегистрирован: 11.06.2018

если для вас такое "Евангелие от Кернигана" что-то говорит, то для меня пока только то что есть какая-то книшка. дали б полное название или где скачать

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Расслабьтесь. Ардуино (которые Меги, Нано, Уно) - они все 8-и битные машинки. То есть единица измерения - 1(один) байт. соответственно, нет никакой задачи "поменять местами 2 байта", особенно в целях вывода. Вам уже отписали (видимо Вы пропустили, поэтому повторяю) - надо иной порядок - пересчитывайте указатель адреса ваших байтов в нужном порядке вывода. Это собственно и все, "самое эффективное" решение. Не надо ничего никуда перекопировать .. просто меняете порядок обхода байтиков указателем.

Брайан Керниган, Дениска Ричи: "Язык программирования Си". Только это сильно устаревший стандарт языка .. так сказать его основы.

JonHappy1
Offline
Зарегистрирован: 11.06.2018

Цитата:
пересчитывайте указатель адреса ваших байтов в нужном порядке вывода. Это собственно и все, "самое эффективное" решение. Не надо ничего никуда перекопировать .. просто меняете порядок обхода байтиков указателем.
это будет точно короче? и быстрее?

JonHappy1
Offline
Зарегистрирован: 11.06.2018

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

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

тогда Коран от Страуструпа. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, во-первых, последние  издания К&Р достаточно современные, но ежели желаете

JonHappy1 пишет:

что-то поновее,чтоб не переучиваться

их есть у меня - https://www.iso.org/standard/68564.html

Новее нет ничего - это последний писк.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Arhat109-2 пишет:

Брайан Керниган, Дениска Ричи: "Язык программирования Си". Только это сильно устаревший стандарт языка .. так сказать его основы.

Опять Архат лужу газирует! Ну шо ж делать? ;)

Можно уточнения понятия "сильно устаревший"? на предмет "потрогать"? Что-то, что ты ежедневно используешь в коде? Кроме локальных объявлений.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Сильно устаревший - это если оригинальное переиздание и не поздние допечатки. Вам тут уже ответили, впрочем. У меня лежит ещё фиг знает какого года .. до 82-го вот точно. :)

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Arhat109-2 пишет:

Сильно устаревший - это если оригинальное переиздание и не поздние допечатки. Вам тут уже ответили, впрочем. У меня лежит ещё фиг знает какого года .. до 82-го вот точно. :)

И что? Какие знания позволяют тебе влезать в тему с глупостью? Ты можешь без гугля сказать, что именно отличает АНСИ Си от КР(Керниган Ричи) Си?

Просто отметится захотелось, Так сказать "ножку задрать" на кустик?

Тот Си, которым ты постоянно пользуешься для Ардуинки - это КР Си с незначительными дополнениями, типа локальных объявлений. То, что это было написано в 70-е годы - ничего не означает. Изменения последнего стандарта от 2011 года тебя очень вряд ли сильно волнуют.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Arhat109-2 пишет:

У меня лежит ещё фиг знает какого года .. до 82-го вот точно. :)

Опять склероз, как было с именем Ершова и писаниной Фаэтона?