Pull to refresh
4
0.1

Пользователь IDA Pro

Send message

Руководствуюсь «обывательской практикой»: регулярно катаюсь между страной из сабжа и РФ через южные транзитные страны, сужу по работе интернета в случаях «нечего делать, почитаю разного убить время», «посмотрю, что тут по дороге» итд - что в ЕС, что в Турции(!) всё открывается, а в РФ начинаются затыки в неожиданных местах, потом вспоминаю про VPN, включаю, и жизнь становится привычной. Да, наверняка есть какие-то нишевые случаи, нужно будет при случае попробовать зайти на сайт каких-нибудь каталонских сепаратистов, но это всё (а тем более всякое «собираются принять в Британии») по сравнению с РФ выглядит как «а вы на шкаф залезьте!».

Но на практике VPN включать приходится в основном почему-то на территории РФ и в сторону Запада, а не наоборот. Странные дела </s>

А как обсуждаемое противоречит благости намерений прагматичного гражданина США, коим является Маск? Сильная разведка собственной страны как-то помешает ему топить за республиканцев, строить ракеты, вживлять чипы в мозг итд?

ЕС - в т.ч. экономический союз, причём, не на бумаге (разделение труда по странам, отсутствие пошлин, быстрая логистика итд).

По мне, не настолько всё радикально плохо. Если HTC Vive после первого месяца восторгов дальше включал уже только гостям показать, то в Oculus 2 периодически поигрываю «просто ради развлечения» уже больше года, это уже выглядит достаточно простым и удобным (а о Quest 3 в сравнении с 2 слышу массу восторгов, прогресс продолжается). В сравнении со сложностью решения «прямо в мозг», решение основных проблем очков/шлемов (снижение веса и времени отклика) выглядит куда более близким будущим, в том же Oculus 2 в сравнении с Vive меня уже ни разу не укачивало, основная претензия - к всё ещё громоздкой штуковине на лице, затем - ко всё ещё низковатому разрешению (в Quest 3 его как раз подняли).

Неоднократно попадались «резиновые» магниты, хорошо прилипающие только одной стороной. Сборка Хальбаха?

Всякие CRAMFS, SquashFS, EROFS не имеют кластеризации, но таки считаются ФС, так что и эта грань давно размыта.

Имейте в виду: во многих моделях STM32 «дозапись» отдельных битов в ранее записанный байт запрещена, из-за этого традиционные схемы вида «добавили в конец новую запись, а у старой сбросили флаг valid» требуют под флаги целые байты/слова.

Это вообще повседневная ситуация, к примеру, во всяких Bluetooth контроллерах, где коммуникационный стек выполнен в виде отдельного бинарного модуля (нередко и в ROM хранящегося), из которого пользовательская часть вызывает различные функции, имеющие внутренние состояния в переменных в RAM. В таких случаях просто в «контракт» между модулями включается ограничение «диапазон RAM от сих до сих зарезервирован за ROM», в пользовательском .ld файле исключаем его, да и всё.

Пара тонких моментов:

  1. __set_MSP() - зло. Сразу после её вызова все стековые переменные превращаются в тыкву, а никто не гарантирует, что, к примеру, Jump_To_Application не в стеке хранится. Корректнее будет установку MSP и переход в App завернуть во что-нибудь такое: asm("msr msp, %0 \n bx %1" :: "r" (msp), "r" (reset_vector));

  2. Если на 100% придерживаться идеи «на входе в app состояние - как после сброса, только всё смещено на размер bootloader», то bootloader должен оставить прерывания разрешёнными (но деактивировать все их источники, а так же все DMA итд). С этим бывают сложности - забыли что-то деинициализировать итд, и некоторые люди поступают радикально - из boot в app оставляют единственный, максимально короткий путь сброс->проверка на необходимость входа в loader->иначе сразу в app (и ничего особо деинициализировать здесь не надо, не успели наинициализировать), а если таки вошли в loader - выходим из него перезагрузкой (таким образом деинициализируя всё и вся). Впрочем, мы - сами себе хозяева, никто не заставляет следовать именно таким правилам, на железе с ограниченной памятью бывает выгодно вообще сознательно унаследовать инициализированное состояние (попадалась даже загрузка по USB с наследованием состояний toggle и «бесшовным» продолжением общения уже из app).

Как-то в глубоком детстве намотал на рычажок внутреннего шпингалета туалета мягкую проволоку, вывел через щель между дверью и косяком наружу, потянул и закрыл. У отца были смешанные чувства :)

А без этого JMicron-адаптера, напрямую в PCIe слоте как оно себя ведёт? В таком виде должно быть куда больше возможностей настройки, к примеру, можно попробовать уменьшить /sys/module/nvme_core/parameters/io_timeout, да и reset какой-нибудь там же поискать (временно нахожусь вдали от машин с NVMe, не на чем посмотреть подробнее).

Да, но по идее он должен делать довольно простые вещи - копировать данные инициализации в динамически выделенную память и записывать в THREADPTR её адрес. Секцию с данными инициализации в скрипте линкера помещаете в «основной» сегмент (где код), ее начало/длину там же вытаскиваете в виде двух uint32 в заголовок, а при загрузке делаете memcpy оттуда в выделенную вами область, выставляете THREADPTR на неё же, прыгаете на точку входа, всё, вы - динамический линкер. Основная «магия» всех этих действий будет в другом - GCC сгенериурет код, где все обращения к static/global будут относительно THREADPTR, который под вашим контролем.

А Thread-Local Storage заабьюзить не пробовали? Если в данном GCC всё реализовано как надо, то всё должно свестись к добавлению к статическим/глобальным переменным атрибута __thread, и те начнут адресоваться относительно регистра THREADPTR (который при старте выставить на выделенную область). Для TLS и секция инициализации предусмотрена, которую по идее можно средствами ld поместить в кодовый сегмент и при старте скопировать в выделенную область (по аналогии с инициализацией .data в RAM из flash на микроконтроллерах).

Вдогонку: ещё один класс проблем, решаемых relocations, но не решаемых PC-relative адресацией: всякие константные таблицы указателей вроде { CmdText, CmdHandler }[], которые ld положит в .text как есть и никто их не пересчитает при загрузке.

Кроме трёхколёсного нечта пару лет назад был заявлен электрический DeLorean, но от DMC-12 там только имя (даже не логотип) и gull wing двери, нержавейки не будет, формы «зализанные».

Выглядит как реализация классической настольной Risk.

Всё ради безопасности пользователя разумеется.

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

Ок, пусть и не самым удобным образом запястье выворачивать, но ради избавления от этого иногда возникающего «неудобства» постоянно носить на ремешке какую-то дополнительную приблуду, которую ещё и заряжать отдельно надо??

Справедливости ради, 115200 - как раз таки очень распространённая скорость, а вот какие-нибудь 1.5-2мбод (CH340 такое поддерживает) были бы действительно нетипичны (как и противоположная крайность - 50бод).

Information

Rating
2,502-nd
Registered
Activity