Например TDA7294

Форум РадиоКот • Просмотр темы - Как записать код лаконичнее
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт дек 12, 2025 20:03:12

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 71 ]    , , 3,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Вс окт 23, 2022 15:51:36 
Друг Кота
Аватар пользователя

Карма: 52
Рейтинг сообщений: 2114
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 7057
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (2)
Есть ещё вариант, если ответ нужно получить очень быстро... это хранить количество различающихся элементов в переменной...
пусть A и B изначально равные массивы;
чар D =0;
....
если нужно изменить элемент одного из массивов (или элементы с одинаковым номером сразу обоих массивов) то
if (А[i ]!=B[i ]) D--; //сравниваем их значение
A[i ]=x; // изменяем
if (А[i ]!=B[i ]) D++; //снова сравниваем их значение

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

метода специфичен... но тоже работоспособен.

_________________
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Вс окт 23, 2022 20:23:24 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 885
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6192
Откуда: Minsk
Рейтинг сообщения: 0
Вот до каких глубин умственной работы может довести а-ли-ментарнейший вопрос :) :)) А ТС уже давно ушёл за пиво'м.
Спойлер"Мсье, вы не заметили - ваша дама уже ушла" © из старого анекдота

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Пн окт 24, 2022 23:38:30 
Открыл глаза

Зарегистрирован: Вт июн 11, 2019 17:08:25
Сообщений: 43
Рейтинг сообщения: 2
всем спасибо
пока расписал в столбик , чтобы не ошибиться
if((r1[0]==r2[0])
&&(r1[1]==r2[1])
----
---
&&(r1[39]==r2[39]))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Вт окт 25, 2022 08:30:01 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -24
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2516
Рейтинг сообщения: 0
А ТС просто издевается, тролль недоделанный :)

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Вт окт 25, 2022 10:26:13 
Опытный кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 164
Зарегистрирован: Ср авг 03, 2022 05:22:56
Сообщений: 848
Рейтинг сообщения: 0
Хахаха, круто! Прям плюсану даже за такой лаконичный и нестандартный подход! Ма-ла-дец афтар, уделал всех.
Жаль, что массив всего на 40, а не на 4000 элементов!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Вт окт 25, 2022 11:08:48 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -24
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2516
Рейтинг сообщения: 0
Жаль, что массив всего на 40, а не на 4000 элементов!

При помощи баша могу эту копипасту сгенерить и для массива в 4000 элементов :)

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Вт окт 25, 2022 11:58:54 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 41
Зарегистрирован: Вт фев 09, 2010 17:52:26
Сообщений: 474
Рейтинг сообщения: 0
Eddy_Em писал(а):
При помощи баша могу эту копипасту сгенерить и для массива в 4000 элементов

Компилятор может не осилить.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Вт окт 25, 2022 12:30:04 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -24
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2516
Рейтинг сообщения: 2
codenamehawk, не, только что проверил. gcc осиливает отлично.


Вложения:
1.c [148.14 KiB]
Скачиваний: 109

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Вт окт 25, 2022 12:38:56 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 885
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6192
Откуда: Minsk
Рейтинг сообщения: 0
Лаконизм записи у ТС достиг высот невиданных :) Что до 4000 элементов, то осталось найти Мегу, в которую можно этот хекс впиндюрить. Мега8 точно не согласится.

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Сб окт 29, 2022 19:06:00 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2556
Рейтинг сообщения: 0
Хватить спорить
Зная ваш "талант" тестировщика, решил перепроверить. Компилятор 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 KiB]
Скачиваний: 53
Вложение:
изображение_2022-10-29_184928286.png [85.93 KiB]
Скачиваний: 61
Вложение:
изображение_2022-10-29_185054921.png [85.43 KiB]
Скачиваний: 59

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

Изображение
Вложение:
изображение_2022-10-29_185406004.png [86.23 KiB]
Скачиваний: 53
Вложение:
изображение_2022-10-29_185510596.png [84.67 KiB]
Скачиваний: 46


У кого есть сомнения в результате - можете считать такты по листингу


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Сб окт 29, 2022 19:53:41 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
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 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2556
Рейтинг сообщения: 0
Опустились до 7.3
Что значит опустился? Я AVR вообще не занимаюсь. Не поднимался, знаете ли.

давайте еще ниже, может там еще быстрее будет.
Какой был компилятор под рукой, тем и собрал.

Мне, там, самому поставить 7.3 или как?
Нет, я за вас буду выбирать компилятор и ключи оптимизации. Мышка отвалится самому ткнуть?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Сб окт 29, 2022 20:47:06 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
VladislavS писал(а):
Я AVR вообще не занимаюсь. Не поднимался, знаете ли.
Кажется в теме stm этот вопрос уже разбирали.
Пока у вас не будет сравнение с ассемблерной вставкой, оставим этот бесполезный спор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Сб окт 29, 2022 20:47:21 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2556
Рейтинг сообщения: 0
VladislavS, а с чем сравнить-то? Где сравнение с ассемблерной вставкой? У вас одна версия компилятора, у меня другая.
Вы версию компилятора и ключи оптимизации вообще не соизволили указать.

Пока у вас не будет сравнение с ассемблерной вставкой, оставим этот бесполезный спор.

Ассемблерная вставка от компилятора зависит? Вы же её протестировали. Не доверяете своим тестам?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Сб окт 29, 2022 20:59:31 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Ладно, ваша взяла, версия 9.2.0
ассемблер 77мкс
ваша функция на -Os 141мкс, на -O3 51мкс, размер тестового кода на -Os 142 байта, на -O3 226 байт.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Сб окт 29, 2022 21:03:19 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 433
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2556
Рейтинг сообщения: 0
версия 9.2.0
Из какого софта или самосборный?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Сб окт 29, 2022 21:11:37 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
С их сайта скаченый, файл 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 
Это не хвост, это антенна

Карма: 12
Рейтинг сообщений: 136
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1306
Рейтинг сообщения: 0
всем спасибо
пока расписал в столбик , чтобы не ошибиться
if((r1[0]==r2[0])
&&(r1[1]==r2[1])
----
---
&&(r1[39]==r2[39]))

Ужос! Вам уже Eddy_Em всё написал в самом начале. Если вы боитесь memcmp.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Вс окт 30, 2022 12:09:08 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 885
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6192
Откуда: Minsk
Рейтинг сообщения: 0
ассемблер 77мкс
ваша функция на -Os 141мкс, на -O3 51мкс

Вот это странно! Или действительно компилятор знает какие-то супербыстрые недокументированные команды (но мне VladislavS объяснил, что это не так) :) , или же асмовская вставка сделана коряво. Применение асма не гарантирует оптимальность кода без включения бо'шки. :(

VladislavS
Цитата:
Команды то те же, а вот применять их можно по разному.

Я не понимаю, как ещё по разному применять команды, кроме как собрать из них фрагмент программы - или оптимальный (как, видимо, делает умный компилятор), или через ~опу (если не шибко думать).

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Как записать код лаконичнее
СообщениеДобавлено: Вс окт 30, 2022 12:15:43 
Опытный кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 164
Зарегистрирован: Ср авг 03, 2022 05:22:56
Сообщений: 848
Рейтинг сообщения: 0
Да нет, просто использует более выгодный по скорости порядок и состав инструкций. Никаких недокументированных возможностей конечно же не использует. Компилятор то, он же работает по заложенным в него шаблонам тех или иных действий.

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


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 71 ]    , , 3,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y