Как записать код лаконичнее

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Как записать код лаконичнее

Сообщение Ivanoff-iv »

Есть ещё вариант, если ответ нужно получить очень быстро... это хранить количество различающихся элементов в переменной...
пусть A и B изначально равные массивы;
чар D =0;
....
если нужно изменить элемент одного из массивов (или элементы с одинаковым номером сразу обоих массивов) то
if (А!=B) D--; //сравниваем их значение
A=x; // изменяем
if (А!=B) D++; //снова сравниваем их значение

так D будет всегда равна количеству различающихся ячеек и проверив D==0 находим равенство массивов...

метода специфичен... но тоже работоспособен.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Как записать код лаконичнее

Сообщение Jack_A »

Вот до каких глубин умственной работы может довести а-ли-ментарнейший вопрос :) :)) А ТС уже давно ушёл за пиво'м.
Спойлер"Мсье, вы не заметили - ваша дама уже ушла" © из старого анекдота
Изображение
Реклама
ickatel
Открыл глаза
Сообщения: 43
Зарегистрирован: Вт июн 11, 2019 17:08:25

Re: Как записать код лаконичнее

Сообщение ickatel »

всем спасибо
пока расписал в столбик , чтобы не ошибиться
if((r1[0]==r2[0])
&&(r1[1]==r2[1])
----
---
&&(r1[39]==r2[39]))
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: Как записать код лаконичнее

Сообщение Eddy_Em »

А ТС просто издевается, тролль недоделанный :)
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
MLX90640
Опытный кот
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Re: Как записать код лаконичнее

Сообщение MLX90640 »

Хахаха, круто! Прям плюсану даже за такой лаконичный и нестандартный подход! Ма-ла-дец афтар, уделал всех.
Жаль, что массив всего на 40, а не на 4000 элементов!
Реклама
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: Как записать код лаконичнее

Сообщение Eddy_Em »

[uquote="MLX90640",url="/forum/viewtopic.php?p=4309650#p4309650"]Жаль, что массив всего на 40, а не на 4000 элементов![/uquote]
При помощи баша могу эту копипасту сгенерить и для массива в 4000 элементов :)
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Реклама
codenamehawk
Вымогатель припоя
Сообщения: 528
Зарегистрирован: Вт фев 09, 2010 17:52:26

Re: Как записать код лаконичнее

Сообщение codenamehawk »

Eddy_Em писал(а):При помощи баша могу эту копипасту сгенерить и для массива в 4000 элементов
Компилятор может не осилить.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: Как записать код лаконичнее

Сообщение Eddy_Em »

codenamehawk, не, только что проверил. gcc осиливает отлично.
Вложения
1.c
(148.14 КБ) 117 скачиваний
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Как записать код лаконичнее

Сообщение Jack_A »

Лаконизм записи у ТС достиг высот невиданных :) Что до 4000 элементов, то осталось найти Мегу, в которую можно этот хекс впиндюрить. Мега8 точно не согласится.
Изображение
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Как записать код лаконичнее

Сообщение VladislavS »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4308662#p4308662"]Хватить спорить[/uquote]Зная ваш "талант" тестировщика, решил перепроверить. Компилятор GCC 7.3.

Код: Выделить всё

#include <avr/io.h>

uint8_t arr1[8] = { 1,2,3,4,5,6,7,8 };
uint8_t arr2[8] = { 1,2,3,4,5,6,7,9 };

uint8_t my_memcmp(uint8_t* buf1, uint8_t* buf2, uint8_t count)
{
  while (count--) if (*buf1++ != *buf2++) return 1;
  return 0;
}

int main()
{
  DDRD = (1 << PD0);
  PORTD |= 1 << PD0;
  if (my_memcmp(arr1, arr2, 8)) PORTD &= ~(1<< PD0);
  for (;;);
}
Симуляция с тактовой 1 МГц. По листингу такты вроде сходятся.

Функция my_memcmp на разных оптимизациях
СпойлерИзображение

Изображение

Изображение
изображение_2022-10-29_184711928.png
(83.16 КБ) 75 скачиваний
изображение_2022-10-29_184928286.png
(85.93 КБ) 77 скачиваний
изображение_2022-10-29_185054921.png
(85.43 КБ) 80 скачиваний
Стандартная функция memcmp на разных оптимизациях
СпойлерИзображение

Изображение
изображение_2022-10-29_185406004.png
(86.23 КБ) 70 скачиваний
изображение_2022-10-29_185510596.png
(84.67 КБ) 65 скачиваний
У кого есть сомнения в результате - можете считать такты по листингу
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Как записать код лаконичнее

Сообщение Dimon456 »

VladislavS, а с чем сравнить-то? Где сравнение с ассемблерной вставкой? У вас одна версия компилятора, у меня другая.
VladislavS писал(а):Компилятор GCC 7.3.
Опустились до 7.3, давайте еще ниже, может там еще быстрее будет.
VladislavS писал(а):можете считать такты по листингу
конечно, по считаем такты, AVR GCC 12.2.0.
VladislavS писал(а):Компилятор GCC 7.3.
Мне, там, самому поставить 7.3 или как?
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Как записать код лаконичнее

Сообщение VladislavS »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4311904#p4311904"]Опустились до 7.3[/uquote]Что значит опустился? Я AVR вообще не занимаюсь. Не поднимался, знаете ли.

[uquote="Dimon456",url="/forum/viewtopic.php?p=4311904#p4311904"]давайте еще ниже, может там еще быстрее будет.[/uquote]Какой был компилятор под рукой, тем и собрал.

[uquote="Dimon456",url="/forum/viewtopic.php?p=4311904#p4311904"]Мне, там, самому поставить 7.3 или как?[/uquote]Нет, я за вас буду выбирать компилятор и ключи оптимизации. Мышка отвалится самому ткнуть?
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Как записать код лаконичнее

Сообщение Dimon456 »

VladislavS писал(а):Я AVR вообще не занимаюсь. Не поднимался, знаете ли.
Кажется в теме stm этот вопрос уже разбирали.
Пока у вас не будет сравнение с ассемблерной вставкой, оставим этот бесполезный спор.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Как записать код лаконичнее

Сообщение VladislavS »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4311904#p4311904"]VladislavS, а с чем сравнить-то? Где сравнение с ассемблерной вставкой? У вас одна версия компилятора, у меня другая.[/uquote]Вы версию компилятора и ключи оптимизации вообще не соизволили указать.

[uquote="Dimon456",url="/forum/viewtopic.php?p=4311904#p4311904"]Пока у вас не будет сравнение с ассемблерной вставкой, оставим этот бесполезный спор.[/uquote]
Ассемблерная вставка от компилятора зависит? Вы же её протестировали. Не доверяете своим тестам?
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Как записать код лаконичнее

Сообщение Dimon456 »

Ладно, ваша взяла, версия 9.2.0
ассемблер 77мкс
ваша функция на -Os 141мкс, на -O3 51мкс, размер тестового кода на -Os 142 байта, на -O3 226 байт.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Как записать код лаконичнее

Сообщение VladislavS »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4311956#p4311956"]версия 9.2.0[/uquote]Из какого софта или самосборный?
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Как записать код лаконичнее

Сообщение Dimon456 »

С их сайта скаченый, файл avr-gcc.exe датируется от 07.09.2019
Спойлер

Код: Выделить всё

C:\WinAVR\bin>avr-gcc -v
Using built-in specs.
Reading specs from c:/winavr/bin/../lib/gcc/avr/9.2.0/device-specs/spec
s-avr2
COLLECT_GCC=avr-gcc
COLLECT_LTO_WRAPPER=c:/winavr/bin/../libexec/gcc/avr/9.2.0/lto-wrapper.
exe
Target: avr
Configured with: ../configure --prefix=/omgwtfbbq/win64 --target=avr --enable-la
nguages=c,c++ --disable-nls --disable-libssp --disable-libada --with-dwarf2 --di
sable-shared --enable-static --enable-mingw-wildcard --host=x86_64-w64-mingw32 -
-build=x86_64-pc-linux-gnu
Thread model: single
gcc version 9.2.0 (GCC)

Сейчас-то уже новее есть.
OKF
Это не хвост, это антенна
Сообщения: 1393
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Как записать код лаконичнее

Сообщение OKF »

[uquote="ickatel",url="/forum/viewtopic.php?p=4309558#p4309558"]всем спасибо
пока расписал в столбик , чтобы не ошибиться
if((r1[0]==r2[0])
&&(r1[1]==r2[1])
----
---
&&(r1[39]==r2[39]))[/uquote]
Ужос! Вам уже Eddy_Em всё написал в самом начале. Если вы боитесь memcmp.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Как записать код лаконичнее

Сообщение Jack_A »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4311956#p4311956"]ассемблер 77мкс
ваша функция на -Os 141мкс, на -O3 51мкс[/uquote]
Вот это странно! Или действительно компилятор знает какие-то супербыстрые недокументированные команды (но мне VladislavS объяснил, что это не так) :) , или же асмовская вставка сделана коряво. Применение асма не гарантирует оптимальность кода без включения бо'шки. :(

VladislavS
Команды то те же, а вот применять их можно по разному.
Я не понимаю, как ещё по разному применять команды, кроме как собрать из них фрагмент программы - или оптимальный (как, видимо, делает умный компилятор), или через ~опу (если не шибко думать).
Изображение
Аватара пользователя
MLX90640
Опытный кот
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Re: Как записать код лаконичнее

Сообщение MLX90640 »

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

Ну а топикстартер конечно же всех просто уделал, применив свой, наиболее "лаконичный" способ :))) Вот, "учитесь"!
Ответить

Вернуться в «AVR»