The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

В Си-библиотеке  nolibc, входящей в состав ядра Linux, реализована поддержка сигналов, opennews (??), 23-Янв-23, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


9. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +1 +/
Сообщение от Аноним (9), 23-Янв-23, 11:39 
Кто-нибудь знает "некостыльное" применение sleep? Не надёжнее ли следить за завершением какого-либо процесса через pid?
Ответить | Правка | Наверх | Cообщить модератору

15. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +/
Сообщение от Аноним (15), 23-Янв-23, 12:10 
> Не надёжнее ли следить за завершением какого-либо процесса через pid?

какой pid скажет тебе когда подключенное USB устройство готово к обмену ?

Ответить | Правка | Наверх | Cообщить модератору

22. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +/
Сообщение от YetAnotherOnanym (ok), 23-Янв-23, 12:34 
А какой там у ядра PID, согласно народной традиции?
Ответить | Правка | Наверх | Cообщить модератору

38. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +/
Сообщение от Аноним (15), 23-Янв-23, 14:19 
> А какой там у ядра PID, согласно народной традиции?

не все драйверы в ядре?

https://en.wikipedia.org/wiki/Libusb

Ответить | Правка | Наверх | Cообщить модератору

111. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +/
Сообщение от Аноним (-), 24-Янв-23, 00:04 
> А какой там у ядра PID, согласно народной традиции?

Изначально в линуксе все начинается с ядерного треда, его PID = 0 вроде бы номинально. Потом он кроме всего прочего создаст еще один, который уже PID = 1, он попытается стать вашим init'ом.

Но это не конец истории. Во первых есть такая штука как kthreadd. Обычно он садится на PID=2, хотя является ли это каким-то жестким requirement - черт знает, сорц смотреть надо. Как можно догадаться из названия, это - как инит, но для тредов кернела. Треды ядра считаются запущенными им, он их "parent pid" для всего что важно.

Ах да, из всего этого следует что ядро так то threaded и может запускать треды. Какой там у них PID будет? Да любой валидный. Это мало чем хуже обычного процесса. Ну разве что исполняемого файла нет (линк на образ исполняемого в proc не работает) и убить стандартным способом нельзя.

Если этого показалось мало, есть еще такая штука как kworker. На самом деле довольно забавная штука, используется для дефера тяжелых операций в фоновые воркеры. Те кому в ядре надо тяжелые операции пульнуть могут зарегистрировать это в воркере и отвалить по быстрому. А вот это добро потом в фоне отпедалит запрошенное. Так то довольно продвинуто, для ядра то, такому то сервису и апликушник высокоуровневый позавидует иной раз.

Ну вон ps -AF какой рисует ядерные тредики не как processname а как [processname], квадратные скобки хинтят что это принадлежит ядру. Так что если вы хотели все его PID познать - да вот, изучайте. Ну там ps -AFH вам в руки (это еще и иерархически, показывает что треды ядра под kthreadd живут например).

Ответить | Правка | К родителю #22 | Наверх | Cообщить модератору

146. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +2 +/
Сообщение от YetAnotherOnanym (ok), 24-Янв-23, 13:21 
> Изначально в линуксе все начинается с ядерного треда, его PID = 0
> вроде бы номинально.

Вот-вот, я именно его имел в виду. Дождаться завершения PID=0, чтобы определить готовность USB-устройства - эта идея мне нравится.

Ответить | Правка | Наверх | Cообщить модератору

163. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +/
Сообщение от Аноним (-), 27-Янв-23, 23:18 
Он по моему уже не существует на момент старта инита, так что "condition always true, optimize out". А коли так - считайте что usb девайс всегда доступен, с дельфистов пример берите!
Ответить | Правка | Наверх | Cообщить модератору

112. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +1 +/
Сообщение от Аноним (-), 24-Янв-23, 00:05 
> какой pid скажет тебе когда подключенное USB устройство готово к обмену ?

sleep это тоже не подскажет сам по себе :)


Ответить | Правка | К родителю #15 | Наверх | Cообщить модератору

141. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +/
Сообщение от Аноним (15), 24-Янв-23, 10:34 
> sleep это тоже не подскажет сам по себе

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

Ответить | Правка | Наверх | Cообщить модератору

151. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +/
Сообщение от Аноним (-), 24-Янв-23, 20:33 
> он используется по прямому назначению - задержка в многозадачной среде исполнения в
> ожидании готовности устройства

Тут кмк от деталей все сильно зависит, usb устройства разные бывают. Но вообще есть и менее дурацкие способы отлова наличия нужного девайса. Начиная с рулесов udev допустим, когда тот сам желаемую программу позовет по факту "обнаружен девайс VID:PID такой-то". Можно serial или что там еще взять.

Я так себе сделал /dev/board0 допустим для вон той платки. Или /dev/china-crap для кетайского сериального шнурка (crap за глючность его чипа). Ну, как появляется так с ним что-то и делается.

Ответить | Правка | Наверх | Cообщить модератору

155. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +/
Сообщение от Аноним (15), 25-Янв-23, 09:38 
> дурацкие способы отлова наличия нужного девайса

я не про это говорил. Послал ты уже обнаруженной по USB китайской платке команду стереть флешь память - какой удав тебе скажет что процесс завершён и можно следующую команду слать ?  только ждать определённое время - sleep/usleep в зависимости от команды.

Ответить | Правка | Наверх | Cообщить модератору

157. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +/
Сообщение от Аноним (-), 26-Янв-23, 16:11 
> я не про это говорил. Послал ты уже обнаруженной по USB китайской
> платке команду стереть флешь память - какой удав тебе скажет что
> процесс завершён и можно следующую команду слать ?

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

> только ждать определённое время - sleep/usleep в зависимости от команды.

Это что-то совсем уж донный уровень инженерии. Даже для китайцев.

Ответить | Правка | Наверх | Cообщить модератору

159. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +/
Сообщение от Аноним (15), 26-Янв-23, 17:10 
> Это что-то совсем уж донный уровень инженерии. Даже для китайцев.

подозреваю у тебя просто отсутствует опыт

https://gitlab.com/dfu-util/dfu-util/-/blob/master/src/porta...

https://gitlab.com/dfu-util/dfu-util/-/blob/master/src/main....

https://gitlab.com/dfu-util/dfu-util/-/blob/master/src/dfuse...

и тд

Ответить | Правка | Наверх | Cообщить модератору

164. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +/
Сообщение от Аноним (-), 27-Янв-23, 23:26 
Чего сказать то хотели?
Мои протоколы либо успешно прошивают девайс тем что задумано, либо это валится с диагностикой что не так. И мне такое поведение вполне нравится. При том это не обязан быть USB. Хотя по нему тоже так можно. А в чем прикол? Мне не нравятся заваленые апдейты и левак прошитый в устройства, равно как и отсутствие диагностики что не так. Если вы хотели сказать что г@вняная работа прошивалок это так и задумано - вот я и пожелаю вам удачных обновлений ваших фирмварей.
Ответить | Правка | Наверх | Cообщить модератору

168. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +/
Сообщение от Аноним (15), 31-Янв-23, 10:22 
> Мои протоколы либо успешно прошивают девайс тем что задумано, либо это валится с диагностикой что не так.

ваши протоколы никто не видел, а DFU отлично работает везде, от микроконтроллеров до SoC c UDC на u-boot и любой хостовой ОС.

Ответить | Правка | Наверх | Cообщить модератору

94. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +1 +/
Сообщение от Аноним (91), 23-Янв-23, 21:29 
wait, waitpid, а если нужно из этих функций по тайм-ауту выйти, то они прерываются сигналами. Если нужно просто заблочить исполнение программы, пока child не вернёт статус, то хватит и просто этих двух функций. Если вам нужен таймаут, но не нравятся сигналы, то можно просто через kill(pid, 0) проверять, существует ли такой pid (костыльный метод, т.к. pid может быть не того процесса, который ожидался, но мне лень сейчас придумывать другой), а в качестве функции сна лучше юзать nanosleep вместо usleep (если нужны тайминги меньше секунды), т.к. я заметил, что usleep как-будто в busy-waiting сидит и жрёт процессор, когда nanosleep не жрёт ничего и выдаёт сумасшедшую точность на обычном десктопном процессоре (я так себе часики в статусбарной самописной приложухе для dwm подкручиваю, чтобы секунды тикали именно когда они должны тикать, а не накапливали ошибку и потом перепрыгивали через одну секунду).
Ответить | Правка | К родителю #9 | Наверх | Cообщить модератору

140. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +/
Сообщение от Аноним (15), 24-Янв-23, 10:31 
> в качестве функции сна лучше юзать nanosleep вместо usleep (если нужны тайминги меньше секунды), т.к. я заметил, что usleep как-будто в busy-waiting сидит

перепиывал недавно пару открытых проектов, нужна была кросскомпиляция mingw под венду - usleep для венды есть в отличии от nanosleep

Ответить | Правка | Наверх | Cообщить модератору

115. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +/
Сообщение от Аноним (-), 24-Янв-23, 00:10 
> Кто-нибудь знает "некостыльное" применение sleep?

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

Если мы будем наивно чекать эникей в цикле, с максимальной скоростью - это в принципе сработает. Однако если вызов не блочится, мы будем гонять цикл с офигенной скоростью, гоняя дикое количество сисколов в секунду и грузя систему как черт знает что.

Вопрос: а нам точно надо знать нажатие эникей с чуть не микросекундной точностью? Или плюс-минус сотня миллисекунд которые юзер даже не увидит - не так уж и страшно? Ну полсотни, точно не увидит. А вот тут можно воткнуть sleep() в цикл и он таки будет каждые 50 миллисекунд чекать не нажал ли юзер эникей. А может и что еще. Основательно разгрузив систему от постоянного поллинга с максимальной скоростью.

Пример несколько условный и не является руководством к действию но дает понять в чем прикол. Программа жрущая ядро проца в полку на ожидание чего-то совершенно не рулит. А тут мы сигналим операционке что в принципе не особо торопимся, можно поспать, проц отдайте другим программам на это время.

Ответить | Правка | К родителю #9 | Наверх | Cообщить модератору

128. "В Си-библиотеке  nolibc, входящей в состав ядра Linux, реали..."  +/
Сообщение от www2 (??), 24-Янв-23, 06:05 
Настраиваешь обработку сигналов и засыпаешь. А что ещё делать, если тебе нужно дождаться поступления сигнала? Только спать.
Ответить | Правка | К родителю #9 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру