Перейти к содержанию
    

А вот не подскажет ли кто - есть ли в природе embedded cron не для линукса, а для мелкопроцессоров типа ARM Cortex 3,

и чтоб в исходниках на Це, и чтоб памяти не ел, и чтоб difftime мухой считал без double.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот не подскажет ли кто - есть ли в природе embedded cron не для линукса, а для мелкопроцессоров типа ARM Cortex 3,

и чтоб в исходниках на Це, и чтоб памяти не ел, и чтоб difftime мухой считал без double.

Пробовал порт embedded cron на Cortex M0 (STM32F03x), причем приходилось снижать частоту, слишком быстро работал :)

 

Шутки шутками, но если серьезно, то зачем?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробовал порт embedded cron на Cortex M0 (STM32F03x), причем приходилось снижать частоту, слишком быстро работал :)

 

Шутки шутками, но если серьезно, то зачем?

порт embedded cron - где брать?

 

Запуск "задач" по расписанию посредством использования RTC. Типа в пятницу с утра включать поддержание температуры, включать-выключать освещение с заходом/восходом солнца. Всё вроде бы понятно как делать, но как-то некузяво получается.

Изменено пользователем evgen2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Запуск "задач" по расписанию посредством использования RTC. Типа в пятницу с утра включать поддержание температуры, включать-выключать освещение с заходом/восходом солнца. Всё вроде бы понятно как делать, но как-то некузяво получается.

У меня сложилось впечатление, что "из пушки по воробям" ...

 

Это продвинутый школьник за вечер напишет на ардуино. Если задача разовая, то быстрее сделать именно на ардуино или на край - практически на любой демоплате.

 

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

 

Повторюсь, почему именно Cortex-M3?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кхм, RTC имеет ограниченное количество будильников. При попытке в наглую сделать 10 будильников с разным временем и последовательностью установки - вас ждёт жестокий облом.

Тут требуется собственный диспетчер RTC, который будет знать о всех активных будильниках, и устанавливать их по порядку даты. Это можно и без ос сделать, но максимальное количество будильников должно быть ограниченно известным вам числом.

 

Проснулись, прошлись по всем будильникам и нашли минимальное время в + от текущего, установили , далее обработка функции на текущее время, и сон.

Добавление будильника - смотрим записи с датой ниже текущей, и юзаем первую-же попавшуюся.

Проект собирается без ос, любыми доступными способами.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня сложилось впечатление, что "из пушки по воробям" ...

 

Я когда смотрел на исходники cron'а - у меня сложилось впечатление, что пушка в воробья не залезет

 

Это продвинутый школьник за вечер напишет на ардуино. Если задача разовая, то быстрее сделать именно на ардуино или на край - практически на любой демоплате.

 

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

 

Продвинутый школьник может написать только гуано и первое во что он упрется - "как поспать N секунд".

 

Повторюсь, почему именно Cortex-M3?

 

как раз потому, что там можно сделать вебморду

 

Тут требуется собственный диспетчер RTC, который будет знать о всех активных будильниках, и устанавливать их по порядку даты. Это можно и без ос сделать, но максимальное количество будильников должно быть ограниченно известным вам числом.

 

Проснулись, прошлись по всем будильникам и нашли минимальное время в + от текущего, установили , далее обработка функции на текущее время, и сон.

Добавление будильника - смотрим записи с датой ниже текущей, и юзаем первую-же попавшуюся.

Проект собирается без ос, любыми доступными способами.

 

ну да, как-то так мыслится/хочется, только с функцией "периодический будильник" (раз в N секунд включаться на M секунд) и обработкой ситуации "несколько будильников сработали одновременно".

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я когда смотрел на исходники cron'а - у меня сложилось впечатление, что пушка в воробья не залезет
так и я о чем!

 

Продвинутый школьник может написать только гуано и первое во что он упрется - "как поспать N секунд".

У вас сложилось ошибочное мнение о школьниках

бошки у них порой варят по-лучше, чем у некоторых взрослых ;)

 

как раз потому, что там можно сделать вебморду
Ага, а на других процах это сделать невозможно.... буду знать

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Продвинутый школьник может написать только гуано и первое во что он упрется - "как поспать N секунд".

 

Ну прямо так и только :biggrin:

 

Вот делал много лет назад для своего первого ПЛК на АВР!

 

Сорри за многобукав, но чтоб было понятно...

 

RTCS – Real time Sheduler

Данный модуль позволяет задать до 16 событий с заданной длительностью от 1сек до нескольких лет! По наступлению события, устанавливается соотв. бит в регистре статуса.

Параметры задания находятся в энергонезависимой части ПГП, поэтому не стираются при выключении питания, как и часы реального времени.

Выдержка времени может быть задана как в абсолютном выражении (сек.мин.часы и т.д.)

так и относительно т.е. можно задать через сколько секунд, минут, часов или дней относительно текущего времени и даты, должно наступить событие. Это удобно например, для задания каких-либо сроков годности или сроков техобслуживания.

Время рассчитывается с учетом високосных лет и кол-ва дней в месяце.

 

Для работы RTCS необходимо задать текущее время и дату:

Например так

DATETIME[0]=10;DATETIME[1]=20;DATETIME[2]=10; //задаем сек,мин, часы соотв.

DATETIME[3]=29;DATETIME[4]=12;DATETIME[5]=12; //задаем день, месяц, год соотв.

blockwrite(RTC_DateTime,DATETIME); //задать время во внутренних часах

 

Для задания только времени можно использовать параметр RTC_Time, только даты - RTC_Date. Массив при этом состоит только из 3х элементов.

 

out (RTCS_Addr,15); //Задаем стартовый адрес в ПГП.

Внимание! Если адрес не задан, то считается равным 0!

Теперь можно задавать времена наступления событий:

 

blockwrite(RTCS_SetAbs,0,52,20,15,9,12);

В этом случае время события №1 задается абсолютно, а именно, сработает в 20часов 52мин 00сек 15сентября 2012года.

Если данные по событию представлены в виде массива из 6 элементов, то можно использовать параметр - RTCS_SetArr.

blockwrite(RTCS_SetArr,AlarmArray);

 

Если в условии задачи сказано, что событие должно наступить через N дней, то удобнее задавать относительным методом.

Например, зададим событие №2 на сработку через 10 дней:

 

blockwrite(RTCS_DayRel+1,10);

Сработка произойдет ровно в то же время, равное текущему, но через 10 дней.

Аналогично задаются:

RTCS_SecRel – секунды

RTCS_MinRel – минуты

RTCS_HrsRel – часы

Диапазон чисел (1-65535)

 

Данные события считаются наступившими, если текущая дата или время, более поздние, чем установлены. Но если нужна сработка только по совпадению дат и времени? Система позволяет это сделать!

Можно задать такой тип события, которое будет выполнятся циклически.

Например, нужно что-то включать каждые сутки в определенное время:

blockwrite(RTCSE_SetAbs,sec,min,hrs,0xff, 0xff,0xff,0xff);

Здесь мы задали событие во время sec,min,hrs, а остальные параметры нам неважны

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

Аналогичным образом устанавливаются относительные интервалы времени.

Например: blockwrite(RTCSE_DayRel,10);

 

 

Запись «RTCS_DayRel+1» означает, что мы задаем событие №2

Например, событие №5 будет задано как «RTCS_DayRel+4»

Аналогично выбирается номер события в абсолютном и других относительных методах.

 

После задания всех событий, нужно разрешить работу обработчика:

out (RTCS_Enable,0b0000000000000011); //разрешили работу первых 2х событий, остальные не обрабатываются. Как видно, можно задавать опрос только тех событий, бит которых =1.

Чтение текущего времени осуществляется аналогично записи, с использованием параметров RTC_Time, RTC_Date или RTC_DateTime.

blockread(RTC_Time,TIME); //read sec[0] min[1] hour[2]

blockread(RTC_Date,DATE); //read day[0] month[1] year[2]

 

Чтение статуса RTCS производится так: res=in(RTCS_Status);

получаем 16бит, где 0й бит соответствует первому событию 15й- шестнадцатому. Если бит=1 событие произошло.

 

Сбросить статус можно заданием новой уставки по событию, при этом бит статуса соотв. номеру события, стирается. Если задано время которое уже является прошедшим по сравнению с текущим, то бит будет снова установлен.

 

По наступлению события можно задать системное прерывание:

SEI (RTCS_IntrVect);

ВНИМАНИЕ! Если в одну секунду происходит сработка сразу нескольких событий, прерывание будет вызвано ОДНО, общее для них.

 

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ага, а на других процах это сделать невозможно.... буду знать

 

Меня терзают смутные сомнения, что на M0 можно сделать вебморду

 

Ну прямо так и только :biggrin:

 

Вот делал много лет назад для своего первого ПЛК на АВР!

ну так речь про школьника шла в контексте андурины, а там все через одно место...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну так речь про школьника шла в контексте андурины, а там все через одно место...

 

Просто хотел этим сказать, что все это делается без каких-либо особых проблем на любом МК с "часами", и гораздо быстрее, чем портировать линуксовое что-то с чем-то...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Меня терзают смутные сомнения, что на M0 можно сделать вебморду
вебморда вебморде - рознь.

К примеру: подключаем к любому M0 копеешный вайфай типа ESP и будет работать даже сложная вебмоморда на несколько клиентов.

 

 

а там все через одно место...

А вы посмотрите на свою задумку: всунуть в М3 урезанный линукс ради только нескольких RTC будильников...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вебморда вебморде - рознь.

К примеру: подключаем к любому M0 копеешный вайфай типа ESP и будет работать даже сложная вебмоморда на несколько клиентов.

 

Причём тут вайфай? Веб морда с тысипями кушает память, а в M0 ее кот наплакал - 8-12 кб

 

А вы посмотрите на свою задумку: всунуть в М3 урезанный линукс ради только нескольких RTC будильников...

 

cron, это небольшая (для PC) утилита типа вот такого https://packages.debian.org/source/wheezy/cron или https://github.com/dubiousjim/dcron которая несколько меньше линукса

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А какой минимальный шаг времени нужен? Поддержка дат нужна? Или просто "запуск задачи через час", "запуск задачи раз в сутки"? Если второй вариант, можно сделать свой планировщик, взяв за основу этот. Умеет периодический запуск задач. отложенный запуск.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну да, как-то так мыслится/хочется, только с функцией "периодический будильник" (раз в N секунд включаться на M секунд) и обработкой ситуации "несколько будильников сработали одновременно".

Это невозможно на физическом уровне. Ваш мк будет управлять физикой с двумя состояниями - вкл-выкл, ну может быть ещё шим - но у него тоже пишется единственное значение.

Значит все эти глюки необходимо разрулить ещё до фактической установки будильника.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ещё нашёл AVR-Crontab, но сам ни разу не пробовал. Если функционал устраивает, на ARM перенести вроде не сложно будет.

Изменено пользователем arhiv6

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...