|
Как узнать, запущена ли уже ось? |
|
|
|
Apr 7 2010, 14:04
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Что-то с ходу не соображу. У меня для вывода в отладочную в качестве буфера передачи используется OS::channel. Соответственно, если я пытаюсь что-то выдать до вызова OS::Run(), то всё наглухо зависает... Пока придумалось определять, запущена ли ось, и, если нет, то выдавать напрямую в регистр передачи, в обход OS::channel. Короче, субж
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
 |
Ответов
|
Apr 7 2010, 17:01
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(AHTOXA @ Apr 7 2010, 16:19)  Что-то с ходу не соображу. Да, проблема  для простых OS создающих задачи статически. У меня периферии обычно много + PnP + диагностика... Посему система с динамически создаваемыми задачами поднимается постепенно ядро, idle, консолька с буфером, который в случае чего можно и принудительно разгрузить. Потом отдельная задача медленно и печально читает конфигурацию, продолжает инициализировать перефирию, создает нужные задачи и кончает жизнь самоубийством. В процессе работы тоже могут возникать задачи типа калибровок, заказной диагностики.... Может пора подумать о других системах?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 7 2010, 17:22
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(zltigo @ Apr 7 2010, 23:16)  Да, проблема  для простых OS создающих задачи статически. Да на самом деле не так чтоб очень, можно просто флажок добавить и взводить его в OS::Run() Просто думал, может есть более легитимное решение, без внесения добавлений в исходники оси. Цитата Посему система с динамически создаваемыми задачами поднимается постепенно ядро, idle, консолька с буфером, который в случае чего можно и принудительно разгрузить. Потом отдельная задача медленно и печально читает конфигурацию, продолжает инициализировать перефирию, создает нужные задачи и кончает жизнь самоубийством. В процессе работы тоже могут возникать задачи типа калибровок, заказной диагностики.... Всё это решаемо, вместо динамически создаваемых задач - статическая задача (или несколько), вызывающая нужные функции - "подзадачи". Цитата Может пора подумать о других системах? Мне плюсы нравятся. И scmRTOS пока вполне покрывает мои потребности. Чего нет - добавим. Да и компания душевная, а это немаловажно для меня
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Apr 7 2010, 17:41
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(AHTOXA @ Apr 7 2010, 19:37)  Всё это решаемо, вместо динамически создаваемых задач - статическая задача (или несколько), вызывающая нужные функции - "подзадачи". Гениально  следующим шагом останется выбросить систему. Цитата Чего нет - добавим.  В рамках концепции не разгуляешся.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 8 2010, 03:45
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(zltigo @ Apr 8 2010, 00:56)  Гениально  следующим шагом останется выбросить систему. Напрасный сарказм. Делегирование действий одной задачи другой (с иным приоритетом) - мощный паттерн проектирования, и на плюсах получается красиво и безопасно. Конечно, это полностью не покрывает функционала, достигаемого честным созданием и удалением объектов-задач, но позволяет достичь изрядной части целей, ради которых обычно затевается вся эта кухня. Кроме того, делегирование действий позволяет эффективно бороться с проблемами, для решения которых применяется инверсия приоритетов (в mutex'ах). Цитата(zltigo @ Apr 8 2010, 00:56)   В рамках концепции не разгуляешся. В определенном смысле да. Но смена концепции - другая цена. Т.ч. везде компромиссы. Цитата(AHTOXA @ Apr 7 2010, 21:19)  Короче, субж  Не очень понял - тебе надо, чтобы оно работало до запуска оси, или чтобы, если ось не запущена, то чтобы можно было это на рантайме диагностировать и не запускать соответствующий код, чтобы программа не падала? Если второе, то действительно, задача решается просто добавлением флажка, взводимого при старте.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
Сообщений в этой теме
AHTOXA Как узнать, запущена ли уже ось? Apr 7 2010, 14:04 jorikdima Зачем же пользоваться средствами ОС до ее запуска?... Apr 7 2010, 15:29 AHTOXA Конструкторы глобальных/статических объектов вызыв... Apr 7 2010, 15:57    zltigo Цитата(dxp @ Apr 8 2010, 06:00) Напрасный... Apr 8 2010, 05:28    AHTOXA Цитата(dxp @ Apr 8 2010, 10:00) Не очень ... Apr 8 2010, 05:28     dxp Цитата(AHTOXA @ Apr 8 2010, 12:43) его со... Apr 8 2010, 07:35
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|