Страница 3 из 4
Re: Как записать код лаконичнее
Добавлено: Вс окт 23, 2022 15:51:36
Ivanoff-iv
Есть ещё вариант, если ответ нужно получить очень быстро... это хранить количество различающихся элементов в переменной...
пусть A и B изначально равные массивы;
чар D =0;
....
если нужно изменить элемент одного из массивов (или элементы с одинаковым номером сразу обоих массивов) то
if (А!=B) D--; //сравниваем их значение
A=x; // изменяем
if (А!=B) D++; //снова сравниваем их значение
так D будет всегда равна количеству различающихся ячеек и проверив D==0 находим равенство массивов...
метода специфичен... но тоже работоспособен.
Re: Как записать код лаконичнее
Добавлено: Вс окт 23, 2022 20:23:24
Jack_A
Вот до каких глубин умственной работы может довести
а-ли-ментарнейший вопрос

А ТС уже давно ушёл за пиво'м.
Спойлер
"Мсье, вы не заметили - ваша дама уже ушла" © из старого анекдота
Re: Как записать код лаконичнее
Добавлено: Пн окт 24, 2022 23:38:30
ickatel
всем спасибо
пока расписал в столбик , чтобы не ошибиться
if((r1[0]==r2[0])
&&(r1[1]==r2[1])
----
---
&&(r1[39]==r2[39]))
Re: Как записать код лаконичнее
Добавлено: Вт окт 25, 2022 08:30:01
Eddy_Em
А ТС просто издевается, тролль недоделанный

Re: Как записать код лаконичнее
Добавлено: Вт окт 25, 2022 10:26:13
MLX90640
Хахаха, круто! Прям плюсану даже за такой лаконичный и нестандартный подход! Ма-ла-дец афтар, уделал всех.
Жаль, что массив всего на 40, а не на 4000 элементов!
Re: Как записать код лаконичнее
Добавлено: Вт окт 25, 2022 11:08:48
Eddy_Em
[uquote="MLX90640",url="/forum/viewtopic.php?p=4309650#p4309650"]Жаль, что массив всего на 40, а не на 4000 элементов![/uquote]
При помощи баша могу эту копипасту сгенерить и для массива в 4000 элементов

Re: Как записать код лаконичнее
Добавлено: Вт окт 25, 2022 11:58:54
codenamehawk
Eddy_Em писал(а):При помощи баша могу эту копипасту сгенерить и для массива в 4000 элементов
Компилятор может не осилить.
Re: Как записать код лаконичнее
Добавлено: Вт окт 25, 2022 12:30:04
Eddy_Em
codenamehawk, не, только что проверил. gcc осиливает отлично.
Re: Как записать код лаконичнее
Добавлено: Вт окт 25, 2022 12:38:56
Jack_A
Лаконизм записи у ТС достиг высот невиданных

Что до 4000 элементов, то осталось найти Мегу, в которую можно этот хекс впиндюрить. Мега8 точно не согласится.
Re: Как записать код лаконичнее
Добавлено: Сб окт 29, 2022 19:06:00
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 на разных оптимизациях
Спойлер


Стандартная функция memcmp на разных оптимизациях
Спойлер

У кого есть сомнения в результате -
можете считать такты по листингу
Re: Как записать код лаконичнее
Добавлено: Сб окт 29, 2022 19:53:41
Dimon456
VladislavS, а с чем сравнить-то? Где сравнение с ассемблерной вставкой? У вас одна версия компилятора, у меня другая.
VladislavS писал(а):Компилятор GCC 7.3.
Опустились до 7.3, давайте еще ниже, может там еще быстрее будет.
VladislavS писал(а):можете считать такты по листингу
конечно, по считаем такты, AVR GCC 12.2.0.
VladislavS писал(а):Компилятор GCC 7.3.
Мне, там, самому поставить 7.3 или как?
Re: Как записать код лаконичнее
Добавлено: Сб окт 29, 2022 20:36:36
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]Нет, я за вас буду выбирать компилятор и ключи оптимизации. Мышка отвалится самому ткнуть?
Re: Как записать код лаконичнее
Добавлено: Сб окт 29, 2022 20:47:06
Dimon456
VladislavS писал(а):Я AVR вообще не занимаюсь. Не поднимался, знаете ли.
Кажется в теме stm этот вопрос уже разбирали.
Пока у вас не будет сравнение с ассемблерной вставкой, оставим этот бесполезный спор.
Re: Как записать код лаконичнее
Добавлено: Сб окт 29, 2022 20:47:21
VladislavS
[uquote="Dimon456",url="/forum/viewtopic.php?p=4311904#p4311904"]VladislavS, а с чем сравнить-то? Где сравнение с ассемблерной вставкой? У вас одна версия компилятора, у меня другая.[/uquote]Вы версию компилятора и ключи оптимизации вообще не соизволили указать.
[uquote="Dimon456",url="/forum/viewtopic.php?p=4311904#p4311904"]Пока у вас не будет сравнение с ассемблерной вставкой, оставим этот бесполезный спор.[/uquote]
Ассемблерная вставка от компилятора зависит? Вы же её протестировали. Не доверяете своим тестам?
Re: Как записать код лаконичнее
Добавлено: Сб окт 29, 2022 20:59:31
Dimon456
Ладно, ваша взяла, версия 9.2.0
ассемблер 77мкс
ваша функция на -Os 141мкс, на -O3 51мкс, размер тестового кода на -Os 142 байта, на -O3 226 байт.
Re: Как записать код лаконичнее
Добавлено: Сб окт 29, 2022 21:03:19
VladislavS
[uquote="Dimon456",url="/forum/viewtopic.php?p=4311956#p4311956"]версия 9.2.0[/uquote]Из какого софта или самосборный?
Re: Как записать код лаконичнее
Добавлено: Сб окт 29, 2022 21:11:37
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)
Сейчас-то уже новее есть.
Re: Как записать код лаконичнее
Добавлено: Вс окт 30, 2022 07:16:27
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.
Re: Как записать код лаконичнее
Добавлено: Вс окт 30, 2022 12:09:08
Jack_A
[uquote="Dimon456",url="/forum/viewtopic.php?p=4311956#p4311956"]ассемблер
77мкс
ваша функция на -Os 141мкс, на -O3
51мкс[/uquote]
Вот это странно! Или действительно компилятор знает какие-то супербыстрые недокументированные команды (но мне
VladislavS объяснил, что это не так)

, или же асмовская вставка сделана коряво. Применение асма не гарантирует оптимальность кода без включения бо'шки.
VladislavS
Команды то те же, а вот применять их можно по разному.
Я не понимаю, как ещё по разному применять команды, кроме как собрать из них фрагмент программы - или оптимальный (как, видимо, делает умный компилятор), или через ~опу (если не шибко думать).
Re: Как записать код лаконичнее
Добавлено: Вс окт 30, 2022 12:15:43
MLX90640
Да нет, просто использует более выгодный по скорости порядок и состав инструкций. Никаких недокументированных возможностей конечно же не использует. Компилятор то, он же работает по заложенным в него шаблонам тех или иных действий.
Ну а топикстартер конечно же всех просто уделал, применив свой, наиболее "лаконичный" способ

Вот, "учитесь"!