Программистские задачки и хитрости

Аватара пользователя
MX_Master
Мастер
Сообщения: 7460
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3086
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение MX_Master »

Ну что, товарищи :) механизм общей памяти с программными spinlock'ами таки обогнал по скорости систему двунаправленного буфера. Самый увесистый кусок кода удерживает общую память не дольше 2-3 микросекунд. В системе сообщений (два буфера) аналогичный обмен данными мог занимать десятки микросекунд.

Следующий шаг - проверка скорости передачи с аппаратными spinlock'ами...
Duhas
Мастер
Сообщения: 1949
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 284
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение Duhas »

ежели объем тот же - что-то ой разница. я думаю большой вопрос в корректности реализации или еще каких нюансах.
Аватара пользователя
MX_Master
Мастер
Сообщения: 7460
Зарегистрирован: 27 июн 2015, 19:45
Репутация: 3086
Настоящее имя: Михаил
Откуда: Алматы
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение MX_Master »

Вощём, с аппаратными spinlock'ами ещё быстрее на 200-300 нсек. Что ожидаемо :)
Duhas писал(а):ежели объем тот же - что-то ой разница. я думаю большой вопрос в корректности реализации или еще каких нюансах.
Система сообщений (2 буфера) даже в теории имеет больше накладных расходов. Просто, за счёт двойного копирования данных. Сначала в буфер, а потом из него по конкретным местам. Накладывается ещё и поиск непрочитанных сообщений. Ну и кривая реализация от автора тоже добавляет накладных :freak:
Duhas
Мастер
Сообщения: 1949
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 284
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение Duhas »

дык оно происходит в разных процессах )

хотя вопрос как там доступ к памяти реализован и т.д. ну если все хорошо, то все хорошо )
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение Serg »

Кто в теме IP: почему работает? :)

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

$ ping -c 5 192.168.1.555
...
--- 192.168.1.555 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4128ms
rtt min/avg/max/mdev = 0.214/0.294/0.334/0.042 ms
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Duhas
Мастер
Сообщения: 1949
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 284
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение Duhas »

переполнение байтовой переменной?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение Serg »

Duhas писал(а):переполнение байтовой переменной?
Нет. IPv4 адрес - это uint32_t практически во всех реализациях.
Надо ширше мыслить! ;)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Duhas
Мастер
Сообщения: 1949
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 284
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение Duhas »

ну я в кишки не заглядывал даже ) так пальцем в небо,

шо, резолвится в 192,168,3,43?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение Serg »

Нет. Адрес в сети 192.168.1.0/24 :)

Задачка не совсем про программирование, а про IP и на сообразительность, просто более подходящей темы нет.
С другой стороны программист, мыслящий стандартами - так себе программист, скорее просто кодер. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
wldev
Мастер
Сообщения: 1637
Зарегистрирован: 24 янв 2012, 16:04
Репутация: 510
Настоящее имя: Сергей Бочаров
Откуда: Новосибирск
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение wldev »

Адрес 192.168.1.138
1000101011-555
10001010-138
Префикс 24бита.
Далее отбрасывается 2бита.
Новости: https://t.me/wldevruch
Обсуждения: https://t.me/wldevgr
Аватара пользователя
merkwurdigliebe
Мастер
Сообщения: 606
Зарегистрирован: 17 дек 2013, 22:14
Репутация: 579
Откуда: București
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение merkwurdigliebe »

UAVpilot писал(а):почему работает?
echo 127.0.0.1 192.168.1.555 >>/etc/hosts
nevkon
Почётный участник
Почётный участник
Сообщения: 2388
Зарегистрирован: 17 июл 2015, 10:25
Репутация: 302
Настоящее имя: Константин
Откуда: Балаково (Саратовская обл.)
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение nevkon »

Оно не обязательно должно быть где-то объявлено. Помню было на обучении, но в чем прикол уже не помню.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение Serg »

merkwurdigliebe писал(а):echo 127.0.0.1 192.168.1.555 >>/etc/hosts
:good:
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Duhas
Мастер
Сообщения: 1949
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 284
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение Duhas »

сложно назвать задачкой, однако:
пишу библиотечку для дисплея, хочу выводить или не выводить лидирующие нули: "030" или " 30"

для этой задачи в классе дисплея заведена переменная uint8_t _leadingZeroes.
она инициализирована нулем в конструкторе и имеет функцию для доступа элементарного вида:
void HD44780::LeadingZeroes(uint8_t on)
{
_leadingZeroes = on;
}
А вот дальше начинается интересное, в процессе написания было поймано интересное поведение компилятора
на кусочке кода: (для просмотра содержимого нажмите на ссылку)

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

			if (Ts)
				Send_Data(Ts+0x30);
			else if (_leadingZeroes)
				Send_Data(' ');
			else
				Send_Data(Ts+0x30);
если из него вырезать последний else

получается
такое приключение (для просмотра содержимого нажмите на ссылку)
HD44780.o: In function `HD44780::SendNumber(signed char)':
C:\!AVR\I2C_display\I2C_display\Debug/.././HD44780.cpp:407:(.text._ZN7HD4478010SendNumberEa+0xcc): relocation truncated to fit: R_AVR_7_PCREL against `no symbol'
collect2.exe(0,0): error: ld returned 1 exit status
на другую переменную в условии реагирует нормально, собственно не знаю зачем тут это, просто не понимаю чего собственно может не нравится

ПС Atmel Studio 7, AVR8/GNU C Compiler : 5.4.0
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение Serg »

Ничёго не понял:
Какой именно "else"? Покажи вариант с ним и без него.
На какую именно переменную, в куске кода их две.
Строка 407 - это какая именно?
Значение у "on" какое?

И почему-бы не упростить до такого?

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

if (Ts || !_leadingZeroes)
    Send_Data(Ts+0x30)
else
    Send_Data(' ');
P.S. Используй теги [code] [/code]
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
alex_sar
Мастер
Сообщения: 1630
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 272
Настоящее имя: Алексей
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение alex_sar »

Duhas писал(а): просто не понимаю чего собственно может не нравится
https://www.technovelty.org/c/relocatio ... t-wtf.html
calabr
Мастер
Сообщения: 937
Зарегистрирован: 04 янв 2019, 15:19
Репутация: 146
Настоящее имя: Calabr
Откуда: Киев
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение calabr »

Duhas писал(а): C:\!AVR\I2C_display\I2C_display\Debug/.././HD44780.cpp:407:(.text._ZN7HD4478010SendNumberEa+0xcc): relocation truncated to fit: R_AVR_7_PCREL against `no symbol'
Вот более близкое к AVR описание проблемы:
https://www.avrfreaks.net/forum/error-r ... ncated-fit

Думаю нужно поиграться с опциями линкера -relax, -no-relax,
Поменять порядок объявлнгия переменных в коде...
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение Serg »

Порядок объявления переменных тут скорее всего не при чем - по твоей-же ссылке есть объяснение. :)
Нужно больше подробностей, особенно с вариантами экспериментов и полный текст самой функции SendNumber. А ещё лучше ассемблерный код, который получается (avr-gcc -S).

Странно, что сам компилятор с этим сам не справляется, хотя его версия довольно древняя. По любому полный текст функции нужен.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
kochevnik
Мастер
Сообщения: 224
Зарегистрирован: 13 окт 2013, 16:24
Репутация: 9
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение kochevnik »

Может кто с esp32 играется?
Столкнулся с проблемой загрузки файлов через веб интерфейс, даже дефолтный пример глючит, если в файле пара строк текста и в конце три дефиса "---"
Может кто сталкивался и как то решили?
alex_sar
Мастер
Сообщения: 1630
Зарегистрирован: 28 авг 2018, 17:13
Репутация: 272
Настоящее имя: Алексей
Контактная информация:

Re: Программистские задачки и хитрости

Сообщение alex_sar »

kochevnik писал(а): Может кто с esp32 играется?
игрался, но upload не пробовал.
а как конкретно глючит? в консоли через monitor что показывает в этот момент?
Ответить

Вернуться в «Оффтоп»