evgen2 0 1 декабря, 2015 Опубликовано 1 декабря, 2015 · Жалоба А вот не подскажет ли кто - есть ли в природе embedded cron не для линукса, а для мелкопроцессоров типа ARM Cortex 3, и чтоб в исходниках на Це, и чтоб памяти не ел, и чтоб difftime мухой считал без double. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 2 декабря, 2015 Опубликовано 2 декабря, 2015 · Жалоба А вот не подскажет ли кто - есть ли в природе embedded cron не для линукса, а для мелкопроцессоров типа ARM Cortex 3, и чтоб в исходниках на Це, и чтоб памяти не ел, и чтоб difftime мухой считал без double. Пробовал порт embedded cron на Cortex M0 (STM32F03x), причем приходилось снижать частоту, слишком быстро работал :) Шутки шутками, но если серьезно, то зачем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgen2 0 2 декабря, 2015 Опубликовано 2 декабря, 2015 (изменено) · Жалоба Пробовал порт embedded cron на Cortex M0 (STM32F03x), причем приходилось снижать частоту, слишком быстро работал :) Шутки шутками, но если серьезно, то зачем? порт embedded cron - где брать? Запуск "задач" по расписанию посредством использования RTC. Типа в пятницу с утра включать поддержание температуры, включать-выключать освещение с заходом/восходом солнца. Всё вроде бы понятно как делать, но как-то некузяво получается. Изменено 2 декабря, 2015 пользователем evgen2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 2 декабря, 2015 Опубликовано 2 декабря, 2015 · Жалоба Запуск "задач" по расписанию посредством использования RTC. Типа в пятницу с утра включать поддержание температуры, включать-выключать освещение с заходом/восходом солнца. Всё вроде бы понятно как делать, но как-то некузяво получается. У меня сложилось впечатление, что "из пушки по воробям" ... Это продвинутый школьник за вечер напишет на ардуино. Если задача разовая, то быстрее сделать именно на ардуино или на край - практически на любой демоплате. Если серия, то это значит делается для обычного человека, а тут уже нужен нормальный интерфейс, прога или вебморда на пк/планшете/смарфоне. Повторюсь, почему именно Cortex-M3? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVI-crak 0 2 декабря, 2015 Опубликовано 2 декабря, 2015 · Жалоба Кхм, RTC имеет ограниченное количество будильников. При попытке в наглую сделать 10 будильников с разным временем и последовательностью установки - вас ждёт жестокий облом. Тут требуется собственный диспетчер RTC, который будет знать о всех активных будильниках, и устанавливать их по порядку даты. Это можно и без ос сделать, но максимальное количество будильников должно быть ограниченно известным вам числом. Проснулись, прошлись по всем будильникам и нашли минимальное время в + от текущего, установили , далее обработка функции на текущее время, и сон. Добавление будильника - смотрим записи с датой ниже текущей, и юзаем первую-же попавшуюся. Проект собирается без ос, любыми доступными способами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgen2 0 2 декабря, 2015 Опубликовано 2 декабря, 2015 · Жалоба У меня сложилось впечатление, что "из пушки по воробям" ... Я когда смотрел на исходники cron'а - у меня сложилось впечатление, что пушка в воробья не залезет Это продвинутый школьник за вечер напишет на ардуино. Если задача разовая, то быстрее сделать именно на ардуино или на край - практически на любой демоплате. Если серия, то это значит делается для обычного человека, а тут уже нужен нормальный интерфейс, прога или вебморда на пк/планшете/смарфоне. Продвинутый школьник может написать только гуано и первое во что он упрется - "как поспать N секунд". Повторюсь, почему именно Cortex-M3? как раз потому, что там можно сделать вебморду Тут требуется собственный диспетчер RTC, который будет знать о всех активных будильниках, и устанавливать их по порядку даты. Это можно и без ос сделать, но максимальное количество будильников должно быть ограниченно известным вам числом. Проснулись, прошлись по всем будильникам и нашли минимальное время в + от текущего, установили , далее обработка функции на текущее время, и сон. Добавление будильника - смотрим записи с датой ниже текущей, и юзаем первую-же попавшуюся. Проект собирается без ос, любыми доступными способами. ну да, как-то так мыслится/хочется, только с функцией "периодический будильник" (раз в N секунд включаться на M секунд) и обработкой ситуации "несколько будильников сработали одновременно". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 2 декабря, 2015 Опубликовано 2 декабря, 2015 · Жалоба Я когда смотрел на исходники cron'а - у меня сложилось впечатление, что пушка в воробья не залезеттак и я о чем! Продвинутый школьник может написать только гуано и первое во что он упрется - "как поспать N секунд". У вас сложилось ошибочное мнение о школьниках бошки у них порой варят по-лучше, чем у некоторых взрослых ;) как раз потому, что там можно сделать вебмордуАга, а на других процах это сделать невозможно.... буду знать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 57 2 декабря, 2015 Опубликовано 2 декабря, 2015 (изменено) · Жалоба Продвинутый школьник может написать только гуано и первое во что он упрется - "как поспать N секунд". Ну прямо так и только Вот делал много лет назад для своего первого ПЛК на АВР! Сорри за многобукав, но чтоб было понятно... 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); ВНИМАНИЕ! Если в одну секунду происходит сработка сразу нескольких событий, прерывание будет вызвано ОДНО, общее для них. Изменено 2 декабря, 2015 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgen2 0 2 декабря, 2015 Опубликовано 2 декабря, 2015 · Жалоба Ага, а на других процах это сделать невозможно.... буду знать Меня терзают смутные сомнения, что на M0 можно сделать вебморду Ну прямо так и только Вот делал много лет назад для своего первого ПЛК на АВР! ну так речь про школьника шла в контексте андурины, а там все через одно место... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 57 2 декабря, 2015 Опубликовано 2 декабря, 2015 · Жалоба ну так речь про школьника шла в контексте андурины, а там все через одно место... Просто хотел этим сказать, что все это делается без каких-либо особых проблем на любом МК с "часами", и гораздо быстрее, чем портировать линуксовое что-то с чем-то... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 2 декабря, 2015 Опубликовано 2 декабря, 2015 · Жалоба Меня терзают смутные сомнения, что на M0 можно сделать вебмордувебморда вебморде - рознь. К примеру: подключаем к любому M0 копеешный вайфай типа ESP и будет работать даже сложная вебмоморда на несколько клиентов. а там все через одно место... А вы посмотрите на свою задумку: всунуть в М3 урезанный линукс ради только нескольких RTC будильников... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgen2 0 2 декабря, 2015 Опубликовано 2 декабря, 2015 · Жалоба вебморда вебморде - рознь. К примеру: подключаем к любому M0 копеешный вайфай типа ESP и будет работать даже сложная вебмоморда на несколько клиентов. Причём тут вайфай? Веб морда с тысипями кушает память, а в M0 ее кот наплакал - 8-12 кб А вы посмотрите на свою задумку: всунуть в М3 урезанный линукс ради только нескольких RTC будильников... cron, это небольшая (для PC) утилита типа вот такого https://packages.debian.org/source/wheezy/cron или https://github.com/dubiousjim/dcron которая несколько меньше линукса Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 20 2 декабря, 2015 Опубликовано 2 декабря, 2015 · Жалоба А какой минимальный шаг времени нужен? Поддержка дат нужна? Или просто "запуск задачи через час", "запуск задачи раз в сутки"? Если второй вариант, можно сделать свой планировщик, взяв за основу этот. Умеет периодический запуск задач. отложенный запуск. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AVI-crak 0 2 декабря, 2015 Опубликовано 2 декабря, 2015 · Жалоба ну да, как-то так мыслится/хочется, только с функцией "периодический будильник" (раз в N секунд включаться на M секунд) и обработкой ситуации "несколько будильников сработали одновременно". Это невозможно на физическом уровне. Ваш мк будет управлять физикой с двумя состояниями - вкл-выкл, ну может быть ещё шим - но у него тоже пишется единственное значение. Значит все эти глюки необходимо разрулить ещё до фактической установки будильника. Функция - будильник каждую секунду - задаётся с некорректными значениями неиспользуемых разрядов будильника. Например каждую секунду - число секунд, а минуты, часы дни - года FFFF. Тогда при установке будильника можно будет задействовать отдельный канал со спец режимом, именно для этих целей, но таких каналов кажись всего один штук. Ну и управление физикой будет очень ограниченным. С этим делом прекрасно справляется программный таймер, там даже ничего изобретать не нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 20 2 декабря, 2015 Опубликовано 2 декабря, 2015 (изменено) · Жалоба Ещё нашёл AVR-Crontab, но сам ни разу не пробовал. Если функционал устраивает, на ARM перенести вроде не сложно будет. Изменено 2 декабря, 2015 пользователем arhiv6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться