LINUX.ORG.RU
ФорумAdmin

Задержка в OpenWRT в миллисекундах

 , , , ,


0

1

В OpenWRT существует известная проблема того, что невозможно получить задержку меньше, чем одна секунда... Может есть у кого какие мысли или решения по этому поводу? Буду очень признателен.

Уже опробовано: - sleep 0.5 = не работает; - реализовал на с = не запускается заранее откомпиленный файл; - реализовал задержку на php, но не получилось поставить пакеты на OpenWRT, вернее поставил, но компилятор так и не был найден по пути /etc/..; - в сети также делают задержку через perl, но опять же я не могу поставить нужные пакеты..

Или может у кого-то есть список ТОЧНО работающих пакетов для того или иного ЯП.

Еще есть вариант сделать свой таймер, который просто будет в вечном цикле проверять текущее время и время через заданные, например, 0,2 секунды. Тогда подскажите, как в этой OpenWRT через grep получить время до миллисекунд?

use Time::HiRes qw(alarm sleep);

sleep($floating_seconds);
alarm($floating_seconds);
outtaspace ★★★
()
Ответ на: комментарий от zolden

Нужно засвечивать и тушить пин(gpio) на модуле с периодом меньше 1 сек.

alexey995
() автор топика
Ответ на: комментарий от disarmer

Да, я видел этот код в сети! Скажите, пожалуйста, какие именно пакеты perl’a нужно добавлять при компиляции своей прошивки OpenWRT при этом?

alexey995
() автор топика
Ответ на: комментарий от alexey995

Не знаю про openwrt, но это самый обычный perl, тут нет никаких зависимостей к модулям. Так что, скорее всего, любой perl подойдёт

disarmer ★★★
()

я думаю, тебе надо попробовать покрутить конфиги сборки бизибокса
у меня sleep с дробными работает
да, есть ручка CONFIG_BUSYBOX_CONFIG_FEATURE_FLOAT_SLEEP=y

ii343hbka ★★★
()
Последнее исправление: ii343hbka (всего исправлений: 1)
Ответ на: комментарий от alexey995

ну хз

root@wndr3700v1:~# cat /etc/banner
  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 CHAOS CALMER (r45748.Os-k0.ps.cs, r45748)
 -----------------------------------------------------
  * 1 1/2 oz Gin            Shake with a glassful
  * 1/4 oz Triple Sec       of broken ice and pour
  * 3/4 oz Lime Juice       unstrained into a goblet.
  * 1 1/2 oz Orange Juice
  * 1 tsp. Grenadine Syrup
 -----------------------------------------------------
root@wndr3700v1:~# time sleep 0.2
real    0m 0.20s
user    0m 0.00s
sys     0m 0.00s
root@wndr3700v1:~# time sleep 1
real    0m 1.00s
user    0m 0.00s
sys     0m 0.01s

ii343hbka ★★★
()
Ответ на: комментарий от Iron_Bug

Кернел... где или как его смотреть?) А чистый С будет работать на openWRT без дополнительных пакетов?

И может кто-то знает почему не добавляются пакеты при сборе прошивки. Модуль HLK RM-04

alexey995
() автор топика
Ответ на: комментарий от alexey995

я на работе работаю с OpenWRT, в том числе с разными нестандартными железяками. но без конкретики я ничего сказать не могу.
что значит «чистый С будет работать»? что подразумевается под работой? на конкретные образы можно закатать что угодно, включая девелоперский софт. просто обычно этого не делают, потому что образы делаются для девайсов с ограниченными ресурсами и там лишнего не добавляют в пакеты.
пакеты добавляются через make menuconfig. если ты выбрал пакет и пересобрал образ, то пакет будет входить в образ. если он был выбран, как модуль, то он будет лежать среди модулей, но автоматически грузиться не будет. это обычное ядро линюкса и там ничего отличного от настройки ядра нет. отдельно ядро тоже можно настроить, если нужно (make kernel_menuconfig). курить доки по сборке здесь: http://wiki.openwrt.org/doc/howto/build

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

Я компилю через make image Мне просто нужно под конкретный модуль только прошивку. И никак не могу реализовать задержку в миллисекундах...( Хотяб на чем-то уже.

Имею ввиду, что файл на С будет исполнятся. Ибо я скомпилил свой на линуксе, закинул в openwrt, а он не запускается. Не найдена команда, что-то такое.

alexey995
() автор топика
Ответ на: комментарий от alexey995

во-первых, OpenWRT компилит сначала свой тулчейн, а потом компилит этим тулчейном образ. чтобы твой сишник запустился на целевой платформе, тебе его нужно компилить этим самым тулчейном. лежит он в build_dir/toolchain_бла-бла-бла. найти там все тулзы и компилить ими.
про задержку в миллисекундах не скажу сразу. в OpenWRT по умолчанию используется uClibc и я навскидку не скажу, поддерживают ли потоки uClibc такие слипы. они не POSIX-овские, там есть ограничения. а про реализацию sleep'а в пыхе я вообще ничего сказать не могу.
возможно, слипы в потоках могут зависеть ещё от архитектуры, под которую собирается образ.
могу ради эксперимента попробовать собрать что-либо для проверки на x86 виртуалке. но не прямо вот щаз.

Iron_Bug ★★★★★
()
Ответ на: комментарий от alexey995

да, в более-менее новых версиях OpenWRT есть опция Build OpenWRT SDK. она соберёт готовый тулчейн для тестирования софта и можно им собирать тестовые сишники.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

Можете скомпилить С-шный файл для openWRT, в котором просто будет реализована задержка 0.1с, пожалуйста? Нету возможности(инет модем) установить toolchain..( (стучусь в Google+/Hangouts)

alexey995
() автор топика
Ответ на: комментарий от ABW

Не уверен уже.. Нужно попробовать задать этот параметр в .config У меня не получается собрать командой make menuconfig Получаю в ответ: make: *** No rule to make target `menuconfig'. Stop.

alexey995
() автор топика
Ответ на: комментарий от alexey995

я попробую, но позже. пока просто нет свободного времени.
да, кстати, конечная реализация может зависеть от конкретной архитектуры. под какую архитектуру ты собираешь свой образ? и какой вариант libC используется? в последних версиях OpenWRT, как я понимаю, на выбор предлагают аж три разных: eglibc, uClibc и musl.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

Наконец-то получилось... Получилось добавить php-пакет и там реализовал задержку

Всем спасибо)

alexey995
() автор топика
Ответ на: комментарий от Iron_Bug

Вообщем, задержка на php, на удивление, выполняется тоже не корректно. Доли секунды все же дают погрешность, что ставит задачу опять в русло в нерешенные.

Заметил одну особенность. Есть такая фишка в модуле - моргать светодиодом, через триггер.

Есть триггер timer. И для включение/выключения светодиода есть параметры option trigger 'timer' option delayon '5000' option delayoff '500'

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

alexey995
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.