Ср апр 12, 2017 16:51:29
Чт апр 13, 2017 01:19:09
Алексей bird писал(а):Собственно вот и вопрос, а зачем всё это? Имеется ввиду архитектура Mega, в xMega там ресурсов поболее и прочие няшки есть. Но вот зачем городить RTOS на Mege, какой выигрыш и в чем это даст. Спасибо!
Чт апр 13, 2017 04:10:52
ОСРВ позволяет программисту сосредоточить свои усилия на решении конкретных задач (алгоритмических, математических и т.п.), не отвлекаясь на задачи второстепенные. Она берет на себя:
переключение между параллельными процессами (например, опрос клавиатуры, вывод информации на экран, управление реле и.т.п.);
отсчет таймаутов, выдержку задержек;
выбор готовой к выполнению задачи с наивысшим приоритетом и передача ей управления;
обмен данными между задачами (с помощью семафоров, сообщений и пр.).
Задачами в ОСРВ OSA являются обычные функции. Тело функции должно содержать бесконечный цикл, внутри которого должен быть хотя бы один вызов сервиса переключения задач (иначе остальные задачи не получат управления).
Чт апр 13, 2017 09:41:04
viiv писал(а):Если спрашиваете, то Вам это (RTOS) не нужно.
Чт апр 13, 2017 10:39:48
Вы задаёте вопрос так, как будто Вам её навязывают, или заставляют писать код, используя её.Алексей bird писал(а):Но вот зачем городить RTOS на Mege, какой выигрыш и в чем это даст
Лучше 1 раз увидеть, чем 100 раз услышать. Возьмите и попробуйте. А потом сами определитесь, нужна ли она Вам.Только как понять нужна ли мне ...
Чт апр 13, 2017 11:36:33
Чт апр 13, 2017 11:49:51
Чт апр 13, 2017 12:09:09
Чт апр 13, 2017 13:02:21
Алексей bird писал(а):viiv писал(а):Если спрашиваете, то Вам это (RTOS) не нужно.
Интересные выводы.
Только как понять нужна ли мне САПР, ведь я рисую на миллиметровке и мне нравится.
Чт апр 13, 2017 13:13:02
надежды, что применение RTOS для AVR развяжет программисту руки и даст невиданную свободу, никогда не оправдаются.DimAlt писал(а):Получился старый подход к написанию программы, но с быстрым переключением нескольких суперциклов.
Чт апр 13, 2017 13:17:18
viiv писал(а):Мой смайлик ввел Вас в заблуждение. На самом деле ответ был без сарказма. На мой взгляд, при увеличении сложности задач, Вы придете к выводу, что затраты на разработку неприемлемые и нужен новый уровень абстракции. Даже сейчас Вы на XMEGA видите преимущества, но и меги разные бывают 128 или 256K программной памяти - это прилично.
"Зачем мне экскаватор, если я за день выкопаю траншею, а подъезд экскаватора затруднен?" Если задается такой вопрос, то экскаватор спрашивающему не нужен.
----------
Я предполагаю, если Вы знаете, что на AVR можно запустить RTOS, то Вы хоть что-то прочитали про эту RTOS.
Так же предполагаю, что прочитав хоть самую малость, Вы в общих чертах поняли, что дает использование RTOS.
На мой взгляд основные: 1) использование "чужого" кода (и многократное использование своего) 2) переносимость (когда пишется большая часть кода, не важно на каком целевом микроконтролле он будет работать), 3) "изолированность" кода. Т.е. все это ведет к уменьшению затрат на разработку и увеличению надежности ПО.
Естественно, это все не бесплатно. Например, может понадобится больше памяти, большая производительность...
Чт апр 13, 2017 14:00:13
На счет спектрума не соглашусь. Роль ОС в спектруме выполнял встроенный в 16КБ ПЗУ Бэйсик. Разработчики программ активно пользовались его функциями, экономя тем самым драгоценное ОЗУ. В русифицированных спектрумах был несколько изменен код в ПЗУ из-за чего не все игры работали на таких компах. Но это так, ремарка, не имеющая значения для данной темы.ARV писал(а):И при этом ни в спектруме, ни в UzeBox-е не то что реального времени, а вообще никакой ОС нет.
Чт апр 13, 2017 14:01:57
Алексей bird писал(а):1) А разве код не нужно будет "прилизывать" к каждой RTOS? Ведь они используют разные имена, переменные и прочее.
Алексей bird писал(а):2) А разве без RTOS это сложно?
Чт апр 13, 2017 14:03:51
viiv писал(а):но и меги разные бывают 128 или 256K программной памяти - это прилично.
Чт апр 13, 2017 14:09:29
DimAlt писал(а):Флеш в ОС не основное, главное ОЗУ. Оно определяет сколько процессов можно использовать. У меня получалось только 4 процесса на 1к ОЗУ. Сколько у Вас обычно процессов крутится? Думаю, что набор/заготовка пустого проекта, если следовать пунктам 2 и 3, будет стандартной.
Чт апр 13, 2017 15:35:13
это не аналог ОС, это аналог библотеки подпрограмм - libc иначе говоря. все это сейчас вместе с компилятором доступно.Z_h_e писал(а):Роль ОС в спектруме выполнял встроенный в 16КБ ПЗУ Бэйсик
Чт апр 13, 2017 18:02:06
Я знаю что Вас нельзя переубедить, так что не буду пробовать. Однако замечу, что при таком подходе MS-DOS тоже не ОС. А в спектруме, кроме встроенного бэйсика управляющего компом при его старте, еще существует TR-DOS.ARV писал(а):это не аналог ОС, это аналог библотеки подпрограмм
Операцио́нная систе́ма, сокр. ОС (англ. operating system, OS) — комплекс взаимосвязанных программ, предназначенных для управления ресурсами компьютера и организации взаимодействия с пользователем.
Ну вроде никто обратного и не утверждал.ARV писал(а):спектрум как был, так и остался однозадачной системой,
Чт апр 13, 2017 19:03:40
/* включает/выключает питание экрана */
void lcd_power (bool_t on);
/* Очистка экрана */
void lcd_clear ();
/* установить текущую позицию */
void lcd_goto (u8_t row, u8_t col);
/* выводит строку (inv: флаг инвертирования) */
void lcd_puts (bool_t inv, const char *s);
/* возвращает ID нажатой кнопки, если !nblock, вызывающий блокируется до момента нажатия */
u8_t get_key (bool_t nblock);
#define KEY_NONE 0
#define KEY_UP 1
#define KEY_DOWN 2
#define KEY_LEFT 4
#define KEY_RIGHT 5
#define KEY_SELECT 6
#define KEY_ESC 7
void do_main_menu (void)
{
#define MAIN_MENU_ROW 0
#define MAIN_MENU_COL 0
static const char* help_str __AT_FLASH__ = "Up/Down to navigate.";
static const char* conf_str __AT_FLASH__ = "Configure... ";
static const char* save_str __AT_FLASH__ = "Save config ";
static const char* dflt_str __AT_FLASH__ = "Load default config ";
#define MAIN_MENU_ITEMS 3
const char* const items [MAIN_MENU_ITEMS] = {
conf_str,
save_str,
dflt_str,
}
u8_t key;
u8_t i;
u8_t current_item = 0;
lcd_power (1); /* включаем LCD */
do {
lcd_clear ();
for (i = 0; items [i]; i++) {
lcd_goto (i + MAIN_MENU_ROW, MAIN_MENU_COL);
lcd_puts (i == current_item, items [i]);
}
lcd_goto (i + MAIN_MENU_ROW, MAIN_MENU_COL);
lcd_puts (0, help_str);
do {
key = get_key (0);
if (key == KEY_SELECT) {
switch (current_item) {
case 0: configure_menu (); break
case 1: save_config (); break;
case 2: default_config (); break;
}
break; /* redraw menu */
}
if (key == KEY_UP || key == KEY_DOWN) {
/* гасим активный пункт */
lcd_goto (current_item + MAIN_MENU_ROW, MAIN_MENU_COL);
lcd_puts (0, items [current_item]);
if (key == KEY_UP) {
current_item = (current_item > 0) ?
((current_item - 1) : (MAIN_MENU_ITEMS - 1);
} else {
/* нажата кнопка вниз */
if (++current_item >= MAIN_MENU_ITEMS)
current_item = 0;
}
/* активируем новый пункт */
lcd_goto (current_item + MAIN_MENU_ROW, MAIN_MENU_COL);
lcd_puts (1, items [current_item]);
}
} while (key != KEY_ECS);
} while (key != KEY_ESC);
lcd_clear ();
lcd_power (0); /* выключаем LCD */
}
Чт апр 13, 2017 19:35:35
при классическом подходе это ГЛАВНЫЙ ЦИКЛviiv писал(а):Эта функция выполняется в потоке взаимодейтвия с пользователем
в классическом подходе это ОБРАБОТЧИКИ ПРЕРЫВАНИЙviiv писал(а):данный поток не мешал более высоприоритетным задачам
Чт апр 27, 2017 17:15:48