реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> embedded cron
evgen2
сообщение Dec 1 2015, 21:04
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



А вот не подскажет ли кто - есть ли в природе embedded cron не для линукса, а для мелкопроцессоров типа ARM Cortex 3,
и чтоб в исходниках на Це, и чтоб памяти не ел, и чтоб difftime мухой считал без double.
Go to the top of the page
 
+Quote Post
Forger
сообщение Dec 2 2015, 06:37
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(evgen2 @ Dec 2 2015, 00:04) *
А вот не подскажет ли кто - есть ли в природе embedded cron не для линукса, а для мелкопроцессоров типа ARM Cortex 3,
и чтоб в исходниках на Це, и чтоб памяти не ел, и чтоб difftime мухой считал без double.

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

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


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
evgen2
сообщение Dec 2 2015, 07:21
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



Цитата(Forger @ Dec 2 2015, 09:37) *
Пробовал порт embedded cron на Cortex M0 (STM32F03x), причем приходилось снижать частоту, слишком быстро работал sm.gif

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

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

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

Сообщение отредактировал evgen2 - Dec 2 2015, 07:21
Go to the top of the page
 
+Quote Post
Forger
сообщение Dec 2 2015, 07:28
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(evgen2 @ Dec 2 2015, 10:21) *
Запуск "задач" по расписанию посредством использования RTC. Типа в пятницу с утра включать поддержание температуры, включать-выключать освещение с заходом/восходом солнца. Всё вроде бы понятно как делать, но как-то некузяво получается.

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

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

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

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


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Dec 2 2015, 07:49
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 182
Регистрация: 16-10-15
Пользователь №: 88 894



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

Проснулись, прошлись по всем будильникам и нашли минимальное время в + от текущего, установили , далее обработка функции на текущее время, и сон.
Добавление будильника - смотрим записи с датой ниже текущей, и юзаем первую-же попавшуюся.
Проект собирается без ос, любыми доступными способами.
Go to the top of the page
 
+Quote Post
evgen2
сообщение Dec 2 2015, 08:11
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



Цитата(Forger @ Dec 2 2015, 10:28) *
У меня сложилось впечатление, что "из пушки по воробям" ...


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

Цитата(Forger @ Dec 2 2015, 10:28) *
Это продвинутый школьник за вечер напишет на ардуино. Если задача разовая, то быстрее сделать именно на ардуино или на край - практически на любой демоплате.

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


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

Цитата(Forger @ Dec 2 2015, 10:28) *
Повторюсь, почему именно Cortex-M3?


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

Цитата(AVI-crak @ Dec 2 2015, 10:49) *
Тут требуется собственный диспетчер RTC, который будет знать о всех активных будильниках, и устанавливать их по порядку даты. Это можно и без ос сделать, но максимальное количество будильников должно быть ограниченно известным вам числом.

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


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



Go to the top of the page
 
+Quote Post
Forger
сообщение Dec 2 2015, 08:13
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(evgen2 @ Dec 2 2015, 11:00) *
Я когда смотрел на исходники cron'а - у меня сложилось впечатление, что пушка в воробья не залезет
так и я о чем!

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

У вас сложилось ошибочное мнение о школьниках
бошки у них порой варят по-лучше, чем у некоторых взрослых wink.gif

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



--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
mantech
сообщение Dec 2 2015, 08:16
Сообщение #8


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(evgen2 @ Dec 2 2015, 11:11) *
Продвинутый школьник может написать только гуано и первое во что он упрется - "как поспать N секунд".


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

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

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

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 - Dec 2 2015, 08:17
Go to the top of the page
 
+Quote Post
evgen2
сообщение Dec 2 2015, 08:34
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



Цитата(Forger @ Dec 2 2015, 11:13) *
Ага, а на других процах это сделать невозможно.... буду знать


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

Цитата(mantech @ Dec 2 2015, 11:16) *
Ну прямо так и только biggrin.gif

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

ну так речь про школьника шла в контексте андурины, а там все через одно место...
Go to the top of the page
 
+Quote Post
mantech
сообщение Dec 2 2015, 08:39
Сообщение #10


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(evgen2 @ Dec 2 2015, 11:34) *
ну так речь про школьника шла в контексте андурины, а там все через одно место...


Просто хотел этим сказать, что все это делается без каких-либо особых проблем на любом МК с "часами", и гораздо быстрее, чем портировать линуксовое что-то с чем-то...
Go to the top of the page
 
+Quote Post
Forger
сообщение Dec 2 2015, 08:48
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(evgen2 @ Dec 2 2015, 11:34) *
Меня терзают смутные сомнения, что на M0 можно сделать вебморду
вебморда вебморде - рознь.
К примеру: подключаем к любому M0 копеешный вайфай типа ESP и будет работать даже сложная вебмоморда на несколько клиентов.


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

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


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
evgen2
сообщение Dec 2 2015, 09:26
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



Цитата(Forger @ Dec 2 2015, 11:48) *
вебморда вебморде - рознь.
К примеру: подключаем к любому M0 копеешный вайфай типа ESP и будет работать даже сложная вебмоморда на несколько клиентов.


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

Цитата(Forger @ Dec 2 2015, 11:48) *
А вы посмотрите на свою задумку: всунуть в М3 урезанный линукс ради только нескольких RTC будильников...


cron, это небольшая (для PC) утилита типа вот такого https://packages.debian.org/source/wheezy/cron или https://github.com/dubiousjim/dcron которая несколько меньше линукса
Go to the top of the page
 
+Quote Post
arhiv6
сообщение Dec 2 2015, 09:33
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



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


--------------------
Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Dec 2 2015, 09:40
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 182
Регистрация: 16-10-15
Пользователь №: 88 894



Цитата(evgen2 @ Dec 2 2015, 15:11) *
ну да, как-то так мыслится/хочется, только с функцией "периодический будильник" (раз в N секунд включаться на M секунд) и обработкой ситуации "несколько будильников сработали одновременно".

Это невозможно на физическом уровне. Ваш мк будет управлять физикой с двумя состояниями - вкл-выкл, ну может быть ещё шим - но у него тоже пишется единственное значение.
Значит все эти глюки необходимо разрулить ещё до фактической установки будильника.
Функция - будильник каждую секунду - задаётся с некорректными значениями неиспользуемых разрядов будильника. Например каждую секунду - число секунд, а минуты, часы дни - года FFFF. Тогда при установке будильника можно будет задействовать отдельный канал со спец режимом, именно для этих целей, но таких каналов кажись всего один штук. Ну и управление физикой будет очень ограниченным. С этим делом прекрасно справляется программный таймер, там даже ничего изобретать не нужно.
Go to the top of the page
 
+Quote Post
arhiv6
сообщение Dec 2 2015, 09:42
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



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

Сообщение отредактировал arhiv6 - Dec 2 2015, 09:46


--------------------
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 21:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01488 секунд с 7
ELECTRONIX ©2004-2016