LINUX.ORG.RU

Избранные сообщения tuk9

Осваиваем STM32 снизу: часть 1 - подключаем и исследуем плату

Статьи — Разработка

Часть 1 Часть 2 Часть 3 Часть 4 Часть 5 Часть 6 Часть 7 Часть 8 Часть 9

Все файлы можно взять тут.

В данной серии статей мы попробуем поработать с процессором STM32 с помощью GNU утилит, немного познакомимся с ассемблером и отладкой.

Примеры написаны для популярной платы blue pill, построенной на микроконтроллере STM32F103C8T6.

( читать дальше... )

 ,

vbr
()

QEMU в реальную сеть через WiFi

Форум — General

Проблема проста. Есть ноутбук подключенный к сети через WiFi.

Надо обеспечить доступ виртуальной машины на QEMU в эту же сеть.

Я понимаю, что для этого теоретически, надо создать tap сетевой адаптер и создать мост включающий его и сетевую карту, через которую реальная машина подключена к сети.

Вот тут и проблема - нельзя просто взять и создать мост с WiFi картой. Или как-то можно?

Подскажите пожалуйста. Возможно есть другие пути?

Виртуалка просто должна работать в реальной сети как еще один компьютер.

Интересует именно QEMU, как это сделать с Virtualbox я знаю, но он не подходит.

#####РЕШЕНИЕ#######

Спасибо @Pinkbyte! Я осилил по твоему совету.

Включаем Proxy ARP

# sysctl net.ipv4.conf.all.proxy_arp=1

Включаем IP Forwarding

# sysctl net.ipv4.ip_forward=1

Создаем tap сетевой интерфейс, доступный для пользователя (важно! qemu работает от пользователя !)

# tunctl -p -t tap0 -u <username>

Создаем маршрут для ip адреса виртуалки через tap0

ip route add 192.168.1.199 dev tap0

Запускаем QEMU с параметрами сети

-netdev tap,id=mynet0,ifname=tap0,script=no,downscript=no -device virtio-net-pci,netdev=mynet0

На гостевой системе - настраиваем статический ip адрес 192.168.1.199.

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

 ,

James_Holden
()

Поймать переполнение стека в C++

Форум — Development

По странным причинам задам простой вопрос:

А можно ли в C++ инструментом try/catch поймать переполнение стека? Если да, то можно пример?

P.S. причины почему не по-дак-дак-гоить простые и крайне смешные: возможный ответ тонет в бесконечном количестве статей ресурса stackoverflow, имя которого совпадает с главным ключевым словом :-)))

 

shaplov
()

Самый дешевый одноплатник с RJ45.

Форум — Linux-hardware

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

То есть, выдернуть БП «ненужной штучки» чтобы зарядить телефон или вовсе обесточить рубильником кабинет со свичом в середине «змеи из свичей» - запросто.

Усугубляется это все тем, что мне физически туда ехать - километров 150. И лучше всего при жалобах «у нас нет интернета на половине фабрики» туда не ехать, а говорить «проверьте питание свича в кабинете номер 97». А для этого неплохо бы понимать, где обрыв.

Я вот думаю, запихнуть в каждый свич по одноплатнику, дать каждому из них айпишник, запихнуть все в какой-нибудь fpinger и видеть - где чего погасло. Задача - тупо отвечать на пинги, больше ни для чего. Соотвтетственно, вычислительная мощность нужна минимальная, ну и цену хотелось бы подешевле.

Может, кто знает варианты?

 , ,

stabst
()

Как заизолировать мать от корпуса

Форум — Linux-hardware

Прямо наижелезнейший вопрос. Купил корпус, в сети пишут что мать должна быть изолирована от корпуса, звоню корпус через штоки для установки мат. платы - есть контакт, через мать пока не звонил - но тоже будет, посадочные места под винты на матери под винтом с металлической окантовкой, то есть гадом буду контакт тоже будет. Искал пластиковые винты стандартные вроде 3мм - нет таких, офигеть. Хотя винты к корпусу как и сам корпус в напылении - но этого напыления не достаточно, так как даже те винты что не закручивались ниразу звонятся, что у говорить когда я вверну их - напыление сотрется еще больше. Прошу советовать из личного опыта что можно предпринять. Да, корпус не дешевый, да я тоже до этого момента не заморачивался и крутил как есть.

 

VoDD87
()

На чём хранить фоточки?

Форум — Linux-hardware

Посоветуйте, пожалуйста, надёжный внешний накопитель для фоточек и прочего для человека, далёкого от этого вашего айти. Важные критерии: чтобы его сложно было убить неловким движением и чтобы он сам не умер, полежав пол года на полке. Объём большой не нужен – 1 Тб хватит всем.

 ,

metalbeaver
()

UDP sendto как понять открыт ли порт?

Форум — Development

Здравствуйте, коллеги!

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
i = s.sendto("Hello".encode(), (127.0.0.1, 8080))

Насколько я понял, если 127.0.0.1 не слушает UDP порт 8080, то сервер должен вернуть ICMP сообщение, что невозможно доставить сообщение.

Собственно, вопрос: как эту ситуацию отлавливать? sendto просто возвращает число отправленных байтов и ему наплевать дошел ли пакет до получателя или нет. Как понять, что его ни кто не слушает? Понятно, что если на другом конце ни кто не слушает UDP 8080, то recvfrom ни когда ни чего не получит, но мне интересно как определить, открыть ли нужный UDP порт?

 ,

HighMan
()

Как работает UART over USB, если получатель тормозит?

Форум — Development

Предположим, у нас отправитель шлёт данные по 20 байтов тысячу раз в секунду. При этом получатель тормоз и не всегда успевает с такой частотой принимать данные (но если бы они где-то буферизовались, то проблем бы не было).

У меня есть девайс, который на компьютере принимает ровнёхонько 20 000 байтов в секунду, вообще без видимых флюктуаций. А вот на смартфоне не успевает и выходит на процентов 10-20 меньше. Я в протоколах этих не разбираюсь и предполагал, что там как-то автоматически будет буферизоваться всё где-то (в разумных пределах), а я там уже буду вычитывать, к примеру 100 раз в секунду по 200 байтов за раз, ну или как получится.

Я посмотрел исходники драйвера на смартфоне и там запускается поток с высоким приоритетом, который просто в цикле читает данные и передаёт их дальше. То бишь если у этого потока цикл будет не такой быстрый (а ведь андроид это не ОС реального времени и совершенно нельзя гарантировать, что поток, даже с высоким приоритетом, будет висеть на процессоре без перерыва) и иногда будут перерывы, то пакеты будут теряться.

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

 , ,

vbr
()

Растровый 64-битный шрифт 7x9

Форум — Development

Делюсь реализацией одной идеи. В библиотеках типа SDL2 своих встроенных шрифтов обычно нет. Для этого предусмотрены дополнительные библиотеки, зависеть от которых не хочется, да и придётся цеплять файл со шрифтом. Поэтому в Allegro, например, предусмотрели альтернативу: простейший растровый шрифт 8x8. Но там нет кириллицы.

У шрифтов 8x8 есть ещё такие недостатки: буквы маленькие и широкие, что особенно заметно на строчных. Это усугубляется тем, что некоторые буквы выступают вниз (например, «Д», «Щ») или вверх (Ё), из-за чего приходится оставлять пустое место сверху и снизу для остальных букв.

Шрифт 7x9 по битам занимает почти столько же, но выше и уже, что выглядит приятнее. Кроме того, лишний 64 бит можно использовать для признака сдвига вниз. Тогда не надо будет оставлять пустое место снизу. То есть строчка будет высотой даже не 9, а 10.

Коды для символов можно посмотреть тут. В отличие от Allegro я использовал не 8 uint8_t на символ, а одну uint64_t.

Исходный файл для правки тут. В качестве исходника используется не растровое изображение, а текстовое (ASCII art), для удобства трансляции. Приведу пример таких исходных символов:

В
.
.......
.#####.
.#....#
.#....#
.#####.
.#....#
.#....#
.#....#
.#####.
Г
.
.......
.#####.
.#.....
.#.....
.#.....
.#.....
.#.....
.#.....
.#.....
Д
#
...###.
..#..#.
.#...#.
.#...#.
.#...#.
.#...#.
.#...#.
#######
#.....#

Перед каждым изображением буквы оставил признак сдвига: точка если сдвига нет, # - если сдвиг на 1 вниз.

 , ,

Kogrom
()

Навеяно свежей дырой в Xorg

Форум — Development

Привет, ЛОР!

Ты, наверное, уже видел свежую дыру в Xorg, патч для которой выглядит буквально вот так:

-        else
+        else {
             free(to->button->xkb_acts);
+            to->button->xkb_acts = NULL;
+        }

В связи с этим у меня возник вопрос: а почему в стандартной библиотеке C нет макроса SAFE_FREE()?

#define SAFE_FREE(ptr) do{free(ptr);(ptr)=NULL;}while(0)

Напомню, что значение указателя после вызова free() является неопределённым согласно стандарту. Не только значение памяти, на которое он указывает, но и значение самого указателя, и работа с ним представляет собой жуткое undefined behaviour, а значит единственное что можно сделать – занулить его.

Так вот, почему даже таких банальных вещей нет? Я уже не говорю про строковый тип, а то даже Эдичка тут строки не осилил.

Моя гипотеза тут: C – это язык культа страданий во имя страданий.

 , ,

hateyoufeel
()

На чем все таки надо писать Embedded?

Форум — Development

Относительно недавно начал работать программистом для встройки (stm32f0-f1-f3). Раньше делал только домашние проекты на сишке, потому что все книги и гайды пишут на сишке и я подумал что это идет как стандарт для встройки. Когда шел на работу, думал: «Ух, сейчас на сях попишу». Оказалось, что там пишут на плюсах, стиль там скорее как «си с классами», но потихоньку двигаются в сторону плюсовых подходов (например, хотим концепты затащить). Вот хотел бы выслушать людей с многолетним опытом, какие-то аргументы за C или С++ в embedded, потому что все что услышал тут: «Ну, не надо передавать ссылку на self в функции для работы со структурами».

 , , ,

snake266
()

Возможно ли сделать .so обертку над .dll через winelib без исходников

Форум — Development

Есть dll библиотека написанная на си, исходников нет. Есть следующие файлы от библиотеки: .dll, .h, .lib. Возможно ли сделать обертку над .dll через winelib?

Уже пробовал что-то подобное сделать, создав новый dll проект, который является оберткой над библиотекой, после чего пытался собрать это всё через winelib, но неудачно.

 , , ,

freaks338
()

ESP32 - говно! Кто согласен?

Форум — General

Короче сколько не пытался вкатиться в esp32(хотя эмбедом относительно давно увлекаюсь), каждый раз осознаю какое это говно. И не в плане железа - ттх чипа просто топовые за свою цену, а в плане SDK. Кто его писал? Зачем в эмбеде такое дрочево с многопоточностью? Например, тому же SPI нельзя просто так сказать «вот здесь задай DMA контроллеру пересылку по SPI из этой области памяти размером n», нужны костыли с прерываниями, уже поверх которых сделан поллинг, и все равно это с очередями и лишним оверхедом. Не проще было SPI сделать на классических критических секциях чем вот это вот? Плюс какие-то огромные инициализаторы, того же SPI - стуктура, описывающая настройки шины это нормально. Но вторая структура, в которой в явном виде намешано все что только можно(это и чипселект, и настройки qspi, которые В ЯВНОМ виде надо проинициализировать в -1, если они не используются). Третья структура с описанием транзакции с миллионом флагов. При этом железо закрытое, бейр метал можно писать - но это костыль без официальных доков. Понамешан ненужный функционал, аля «ну мы для вас сделали механизм разделов и дисков, а еще прикрутили файловую систему и прикрутили это к C API». Вернее, функционал то нужен, но для какого-то конкретного проекта логичнее будет самому это реализовать, нежели полагаться на непонятную реализацию, или на крайняк взять оную из freertos.

SDK очень неповортливое и не умеет нормально в инкременталку(хотя ща получше стало чем год назад), не работает с юникодом адекватно. Или я не прав?

 , , ,

monobogdan1337
()

TWM: шёл 2022 год...

Галерея — Скриншоты

Вот, натыкал себе TWM!

Раньше с ним сталкивался, но как-то отпугивался, всё тайлы трогал.

Тут на дистрибутиве (Arch) с LXDE в настройках сессии, вместо openbox-lxde просто вписал twm на запуск. Тем самым сохранив панель и прочие настройки раскладок, звук и прочее.

Довольно интересный twm, летает быстрее скорости света. И посему есть несколько вопросов, так как тут темы уже архивные.

Как сделать:

  • не могу разобратся с шрифтами, чтобы не вписывал, ну ничего не меняется! нужно избавится от русских кракозябр!

  • поднятие окна при клике в любом месте, а не по заголовку;

  • анимация сворачивания окон (если такое есть);

  • сейчас у окон толщина border = 0, поэтому они «сливаются», но если сделать border толще, то все стает очень четко и красиво, но на активном окне, остальные окна обрамляются пунктирными белыми рамками, что просто ужасно! как же убрать их! Нашел как отключить этот пунктир! NoHighlight

 

beeper
()

Кто Linux потерял? Мы потеряли

Галерея — Скриншоты

Debian Woody, стандартный KDE 2.2.

Коммуникация с интернетом обеспечивается с помощью высоконадёжного ядра 2.2.20. Сейчас таких не делают.

Opera 8.51, что интересно, показывает LOR. Netscape Navigator 4.77 не показывает.

Опера даже позволяет залогиниться, но отправлять скриншот не хочет.

 , , woody,

alt-tab-let
()

Выпуск встраиваемой СУБД libmdbx 0.11.7 после блокировок на Github

Новости — Open Source
Группа Open Source

Состоялся выпуск библиотеки libmdbx v0.11.7 с реализацией высокопроизводительной компактной встраиваемой базы данных класса ключ-значение. Код распространяется под лицензией OpenLDAP Public License. Заявлено о поддержке всех актуальных операционных системы и архитектур, включая российский Эльбрус 2000.

Заслуживает внимания, что с 2021 года libmdbx используется в трех самых высокопроизводительных реализациях Ethereum (Erigon, Akula, Silkwork), а также связанных с ними проектах Binance Chain. При этом разработчики Erigon разъяснили причины выбора libmdbx, а Ankr Team отметили 30% прирост производительности в сравнении с RocksDB.

Важное отличие этого релиза от предыдущих в вынужденной миграции на GitFlic после блокировки и удаления проекта администрацией GitHub. Кроме этого, разработчики сообщают об устранении множества недочётов и решении проблем со сборками для редких конфигураций. Полный перечень всех значимых доработок доступен в ChangeLog.

Кроме традиционного C API, в libmdbx предлагается развитое C++ API, а также поддерживаемые энтузиастами привязки к языкам Lua, Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Исторически libmdbx является глубокой переработкой библиотектой LMDBhttps://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database. По утверждению разработчиков, libmdbx превосходит своего прародителя по надёжности, набору возможностей и производительности. Больше внимание уделяется тестированию и автоматическим проверкам.

>>> Подробности

 , , ,

anonymous
()

C какими флагами правильно бекапить / ?

Форум — Admin
tar --acls \
    --xattrs \
    --warning='no-file-ignored' \
    -cjpf "${TARGET_DST}/${TARGET_ARCH}" \
    .

Вот так правильно, или нужно что-то еще?

 ,

serg002
()

Помогите разобраться с flakes + home-manager в NixOS.

Форум — Admin

Нигде не могу найти нормальных документаций по flakes в NixOS (в /etc/nixos), только мелкие обрывки. Хочу более точно в этом разобраться, а не склеивать все по обрывкам. Буду благодарен за пару ссылок как связать flakes с home-manager.

 ,

cimidellate
()

как сохранить книги?

Форум — General

Я совсем далёк. Слышал что-то о Флибустре. Только у меня мало места.

Предпочитаю FB2 формат. Хочу сохранить НФ и пару писателей за некий период до 2022 года. Это много по объёму?

Кто как хранит библиотеки?

И похоже, что надо запастись тех литературой…

 ,

modest
()

Как работает шина?

Форум — Linux-hardware

Всем привет!

Вопрос понимающим в железе.

Возьмем, например, локальную проводную сеть. На самом низком уровне, НЯЗ, она работает так: сетевая карта «выставляет на шину» пакет, т.е. последовательность сигналов 1/0, содержащий заголовок какого-то самого низкоуровневого протокола и данные. В заголовке - физический адрес сетевой карты-получателя. Этот пакет принимают ВСЕ карты, сверяют адрес получателя со своим собственным, и выкидывают пакет, если адрес не совпадает. Вопросы:

  1. В вышеописанном все верно, или нет?

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

Теперь про шину внутри компа на материнке. Она работает аналогично? Как там вообще происходит?

  1. Допустим, если всем рулит процессор: такт 1 - он выставляет на шину адрес и в старших битах - код устройства, к которому обращается, и команду «чтение/запись»; такт 2 - устройство (при чтении) или процессор (при записи) выставляет на шину данные. Или все совсем не так?

  2. Что насчет DMA? Оно же тоже должно шину использовать, например при копировании данных с устройства в RAM. Кем и как принимается решение, кто занимает шину в следующий такт - процессор или DMA?

Благодарствую. :)

 , ,

pr849
()