Jump to content
    

Как узнать, запущена ли уже ось?

Что-то с ходу не соображу.

У меня для вывода в отладочную в качестве буфера передачи используется OS::channel. Соответственно, если я пытаюсь что-то выдать до вызова OS::Run(), то всё наглухо зависает... Пока придумалось определять, запущена ли ось, и, если нет, то выдавать напрямую в регистр передачи, в обход OS::channel.

Короче, субж:)

Share this post


Link to post
Share on other sites

Зачем же пользоваться средствами ОС до ее запуска? Не делайте ничего до запуска, а всю инициализацию в самом приоритетном потоке.

Share this post


Link to post
Share on other sites

Конструкторы глобальных/статических объектов вызываются до запуска оси. А для них желательно уже иметь инициализированной всю периферию. Так, имхо, идеологически правильнее (и гораздо удобнее, что даже важнее :) )

Share this post


Link to post
Share on other sites

Что-то с ходу не соображу.

Да, проблема :( для простых OS создающих задачи статически. У меня периферии обычно много + PnP + диагностика... Посему система с динамически создаваемыми задачами поднимается постепенно ядро, idle, консолька с буфером, который в случае чего можно и принудительно разгрузить. Потом отдельная задача медленно и печально читает конфигурацию, продолжает инициализировать перефирию, создает нужные задачи и кончает жизнь самоубийством. В процессе работы тоже могут возникать задачи типа калибровок, заказной диагностики.... Может пора подумать о других системах?

Share this post


Link to post
Share on other sites

Да, проблема :( для простых OS создающих задачи статически.

Да на самом деле не так чтоб очень, можно просто флажок добавить и взводить его в OS::Run() :)

Просто думал, может есть более легитимное решение, без внесения добавлений в исходники оси.

Посему система с динамически создаваемыми задачами поднимается постепенно ядро, idle, консолька с буфером, который в случае чего можно и принудительно разгрузить. Потом отдельная задача медленно и печально читает конфигурацию, продолжает инициализировать перефирию, создает нужные задачи и кончает жизнь самоубийством. В процессе работы тоже могут возникать задачи типа калибровок, заказной диагностики....

Всё это решаемо, вместо динамически создаваемых задач - статическая задача (или несколько), вызывающая нужные функции - "подзадачи".

Может пора подумать о других системах?

Мне плюсы нравятся. И scmRTOS пока вполне покрывает мои потребности. Чего нет - добавим. Да и компания душевная, а это немаловажно для меня:)

Share this post


Link to post
Share on other sites

Всё это решаемо, вместо динамически создаваемых задач - статическая задача (или несколько), вызывающая нужные функции - "подзадачи".

Гениально :( следующим шагом останется выбросить систему.

Чего нет - добавим.

:) В рамках концепции не разгуляешся.

Share this post


Link to post
Share on other sites

Гениально :( следующим шагом останется выбросить систему.

Напрасный сарказм. Делегирование действий одной задачи другой (с иным приоритетом) - мощный паттерн проектирования, и на плюсах получается красиво и безопасно. Конечно, это полностью не покрывает функционала, достигаемого честным созданием и удалением объектов-задач, но позволяет достичь изрядной части целей, ради которых обычно затевается вся эта кухня. Кроме того, делегирование действий позволяет эффективно бороться с проблемами, для решения которых применяется инверсия приоритетов (в mutex'ах).

 

:) В рамках концепции не разгуляешся.

В определенном смысле да. Но смена концепции - другая цена. Т.ч. везде компромиссы.

 

Короче, субж:)

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

Share this post


Link to post
Share on other sites

Напрасный сарказм. Делегирование действий одной задачи другой (с иным приоритетом) - мощный паттерн проектирования....

Читаем первоисточник вызвавший "сарказм":

статическая задача (или несколько), вызывающая нужные функции - "подзадачи"

Но смена концепции - другая цена.

О чем и речь :(.

Т.ч. везде компромиссы.

Вопрос в оценке (можете считать субъективной :) )предлагаемого scmRTOS уровня компромиссов.

Share this post


Link to post
Share on other sites

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

Мне нужно чтоб работало, поэтому нужно не запускать соответствующий код, а запускать вместо него осенезависимый вариант:) Уже сделал флажок. Вечером тормозил, не сообразил, что его совершенно необязательно запихивать внутрь оси:)

Share this post


Link to post
Share on other sites

его совершенно необязательно запихивать внутрь оси:)

Действительно! Тоже об этом не подумал. :) Стереотипы мышления давят.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...