-
- У меня хуже. Клиент хочет делать апгрейд софта контроллера не останавливая его выполнение. Я в ступоре. AlexandrY(254 знак., 30.10.2007 10:49)
- Может, я сейчас глупость скажу, но может быть просто сделать обновление прошивки настолько быстрым, чтобы никто ничего не заметил :o) Естественно, с удержанием входов и выходов на это время. Ну и семафоры ес-но. - бомж(31.10.2007 10:08)
- не знаю насчет Си и асма, но Оберон (творение незабвенного Вирта). такое умеет, Смолтолк -- тожа (там программа и данные -- это вообще база данных), Питон конечно же. не нативно, но умеет. bialix(205 знак., 30.10.2007 22:19)
- Да нет, совсем не глупость. Хороший интерпретируемый язык (Tcl, Lua, Python,...) умеет подключать сущности, написанные на С. Evgeny_CD(1384 знак., 30.10.2007 23:46)
- Делал так, как Евгений описал в п.2 на LPC213x Алексей Мусин(91 знак., 30.10.2007 11:36, ссылка)
- Угу. Для этого в "нормальных" архитектурах MIPS, CF есть специальные способы генерации position independent code и position independent data. Но увы, нас забыли спросить :(( - Evgeny_CD(30.10.2007 11:59)
- Канешна можно сделать загрузчик, который по таблице будет править содержимое ячеек перед прошивкой, но это уже отдельный рисеч, к тому же довольно не малый. - Evgeny_CD(30.10.2007 12:02)
- А грамотнее всего принимать новую прошивку в SPI|I2C EEPROM (с криптованием), и затем при рестарте перешиваться. Там же можно хранить factory default, last known good - на случай отката. - Evgeny_CD(30.10.2007 12:04)
- У меня в голове вообще-то друга модель крутилась. AlexandrY(622 знак., 30.10.2007 12:39)
- ИМХО Алексей Мусин(520 знак., 30.10.2007 13:35)
- почти финт применяется хорошим знакомым, он может сейчас подтянется =) он создает/убивает задачи, но не потому, что загружает их снаружи, а потому что памяти мало =) А почему нет, в чем может быть проблема? по-моему, хорошее решение - Gamma SPb(30.10.2007 12:53)
- Мы же не под виндой работаем! Практическое использование такого финта вот чем черевато Evgeny_CD(927 знак., 30.10.2007 12:48)
- Кароче, Вам туда -> Plan 9 - там такие фишки на уровне ОСи изначально заложены. Open Source, между прочим :) Inferno (картинка) - тоже из этой оперы. - Evgeny_CD(30.10.2007 12:57, ссылка, ссылка)
- о каком динамическом выделении памяти вы говорите?? задача в своем стеке работает. Нет задачи - стек (как бы он не был до этого выделен, статически, динамически) можно отдать новой задаче. Gamma SPb(105 знак., 30.10.2007 12:55)
- Т.е. у задачи нет статических переменных? Можно и так. Т.е. все статические данные - это некая внешнаяя структура. Задача получат указатель на нее, и дрочится с ней. Тогда вполне реально. - Evgeny_CD(30.10.2007 12:58)
- а зачем задаче статические переменные?? зачем тогда RTOS вообще? задача должна общаться с внешним миром (прерываниями, другими задачами) через сервисы RTOS. И никаких глобальных переменных. Вы же сами об этом постоянно твердите... - Gamma SPb(30.10.2007 13:06)
- Вопрос в том, что мы можем перезагрузить. Если чистую высокоуровневую логику - нивапрос. А если баг в обработчике прерывания нашелся - вот тогда его просто так не перезагрузишь. Спор, по сути дела, о глубине перезагрузки. И задачу с зависшим семафором Evgeny_CD(263 знак., 30.10.2007 13:13)
- Интересно, каково ваше решение "нивапроса"? Мне видится, что в выделенном куске ОЗУ должны храниться векторы входных и выходных данных. Такой механизм сносен для ПЛК, где задача - ввод-вывод, но вряд ли применим для систем с пакетной передачей данных. - Алексей Мусин(30.10.2007 13:26)
- Да нет, векторы могут храниться извне, в обработчиках прерываний, быть очередями сообщений ОСи и пр. Доступ к ним получаем по дескрипторам. Несколько задач могут получить один и тот же дескриптор, но не работать с ними одновременно :) - Evgeny_CD(30.10.2007 13:30)
- В общем, для этого толстые ОСи и мегабайты памяти и нужны :) Это вам не big loop патчить :) - Evgeny_CD(30.10.2007 13:32)
- Для пакетного контроллера - легко. Есть входная очередь, и выходная. Все объекты ОСи. Даем "старой" задаче сообщение - прекратить формирование новых пакетов, очистить выходную очередь. Входные копятся в буфере, но не вычитываются. Даем ей другую коману Evgeny_CD(279 знак., 30.10.2007 13:36)
- ну, правильно все. Необязательно правда выходную очередь чистить, потому как она отдельно от задачи живет, ну да ладно. state machine можно передать как аргумент функции новой задачи - задача запускается смотрит параметр Gamma SPb(96 знак., 30.10.2007 13:41)
- В общем, получается, что убиваемая задача должна иметь, как минимум, механизм управления. А это уже нетривально для простых ОСей. Сигналы нужны. - Evgeny_CD(30.10.2007 13:41)
- два проца на плате, не меньше, угу, иначе работать не будет. - Gamma SPb(30.10.2007 13:33)
- Мне неохота спорить про принципы ОСей. Книжку Таненбаума почитайте штоль. -> - Evgeny_CD(30.10.2007 13:38, ссылка)
- Для пакетного контроллера - легко. Есть входная очередь, и выходная. Все объекты ОСи. Даем "старой" задаче сообщение - прекратить формирование новых пакетов, очистить выходную очередь. Входные копятся в буфере, но не вычитываются. Даем ей другую коману Evgeny_CD(279 знак., 30.10.2007 13:36)
- В общем, для этого толстые ОСи и мегабайты памяти и нужны :) Это вам не big loop патчить :) - Evgeny_CD(30.10.2007 13:32)
- Да нет, векторы могут храниться извне, в обработчиках прерываний, быть очередями сообщений ОСи и пр. Доступ к ним получаем по дескрипторам. Несколько задач могут получить один и тот же дескриптор, но не работать с ними одновременно :) - Evgeny_CD(30.10.2007 13:30)
- ну понятно, что посередине выполнения задачу корректно оборвать не получится. Александр этого и не хотел, как я понял, он хотел загрузить новую задачу и запустить ее только после того, как старая дойдет до Gamma SPb(384 знак., 30.10.2007 13:25)
- Интересно, каково ваше решение "нивапроса"? Мне видится, что в выделенном куске ОЗУ должны храниться векторы входных и выходных данных. Такой механизм сносен для ПЛК, где задача - ввод-вывод, но вряд ли применим для систем с пакетной передачей данных. - Алексей Мусин(30.10.2007 13:26)
- Вопрос в том, что мы можем перезагрузить. Если чистую высокоуровневую логику - нивапрос. А если баг в обработчике прерывания нашелся - вот тогда его просто так не перезагрузишь. Спор, по сути дела, о глубине перезагрузки. И задачу с зависшим семафором Evgeny_CD(263 знак., 30.10.2007 13:13)
- Но как ни крути, распределение памяти надо тщательно продумывать на уровне системного проекта. Т.е. есть два стека - основной и запасной для переменной задачи. И есть два куска программной памяти - основной и запасной. Иначе будет взрослый менеджер Evgeny_CD(7 знак., 30.10.2007 13:01)
- Да, я уже понял легкий маразм получается. AlexandrY(376 знак., 30.10.2007 13:10)
- +1 - Evgeny_CD(30.10.2007 13:14)
- да не надо там никакое распределение памяти придумывать. Просто отдельная задачка - менеджер, которая запускает/убивает то что нужно - Gamma SPb(30.10.2007 13:08)
- Ну и еще надо придумать, как бороться с ошибками. Типа выгружаем мы задачу - а она не "отпустила" объекты ядра - семафоры и пр. Можно на них забить, но память кончится. В общем, закат солнца вручную получается. Unix изобретаем. - Evgeny_CD(30.10.2007 13:03)
- опять не понял. Куда она кончится, память-то? объекты не должны принадлежать одной задаче, какой тогда в них смысл? - Gamma SPb(30.10.2007 13:10)
- Да, я уже понял легкий маразм получается. AlexandrY(376 знак., 30.10.2007 13:10)
- а зачем задаче статические переменные?? зачем тогда RTOS вообще? задача должна общаться с внешним миром (прерываниями, другими задачами) через сервисы RTOS. И никаких глобальных переменных. Вы же сами об этом постоянно твердите... - Gamma SPb(30.10.2007 13:06)
- Т.е. у задачи нет статических переменных? Можно и так. Т.е. все статические данные - это некая внешнаяя структура. Задача получат указатель на нее, и дрочится с ней. Тогда вполне реально. - Evgeny_CD(30.10.2007 12:58)
- У меня в голове вообще-то друга модель крутилась. AlexandrY(622 знак., 30.10.2007 12:39)
- А грамотнее всего принимать новую прошивку в SPI|I2C EEPROM (с криптованием), и затем при рестарте перешиваться. Там же можно хранить factory default, last known good - на случай отката. - Evgeny_CD(30.10.2007 12:04)
- Канешна можно сделать загрузчик, который по таблице будет править содержимое ячеек перед прошивкой, но это уже отдельный рисеч, к тому же довольно не малый. - Evgeny_CD(30.10.2007 12:02)
- Угу. Для этого в "нормальных" архитектурах MIPS, CF есть специальные способы генерации position independent code и position independent data. Но увы, нас забыли спросить :(( - Evgeny_CD(30.10.2007 11:59)
- По сути и помимо нее. Evgeny_CD(946 знак., 30.10.2007 11:08)
- Горячее резервирование с мажоритарностью. Фактор три минимум :) - Vladimir Ljaschko(30.10.2007 10:52)
- Что, где-то видели в промышленных контроллерах ценой до 1 тыс.$ ? - AlexandrY(30.10.2007 11:07)
- Дык...вон АВР32. Аппаратная ЖАБА-машина, ЛСД, ЕтХерНет, УСБ и прочие СДРАМ-контроллеры онборд. Всего $15. - mse(30.10.2007 10:28)
- Даже за $13. Без ЕтХерНета и ЛСД. - mse(30.10.2007 10:36)
- Только к аппаратной жаба машине еще либа софтовая нехилая нужна. А она сколько стоит? - Evgeny_CD(30.10.2007 10:38)
- Ну, если серьёзный разговор с закащиком, то это уже вторично. Всё купляется-(С)3.14жжывается. ;О) - mse(30.10.2007 10:41)
- Ага, а потом за левый софт серьезный заказчик так 3.14, что долго икать будешь! - Evgeny_CD(30.10.2007 11:11)
- Серьёзный закащщик софт тупо обплатит... - mse(30.10.2007 13:09)
- Пока у них хватает ума не спрашивать вообще про происхождение инструментов для создания софта. - Vladimir Ljaschko(30.10.2007 11:24)
- Ага, а потом за левый софт серьезный заказчик так 3.14, что долго икать будешь! - Evgeny_CD(30.10.2007 11:11)
- Ну, если серьёзный разговор с закащиком, то это уже вторично. Всё купляется-(С)3.14жжывается. ;О) - mse(30.10.2007 10:41)
- Только к аппаратной жаба машине еще либа софтовая нехилая нужна. А она сколько стоит? - Evgeny_CD(30.10.2007 10:38)
- Даже за $13. Без ЕтХерНета и ЛСД. - mse(30.10.2007 10:36)
- А еще есть куль хацкеры, глюки и баги. Они в совокупности злее. Чего он JAVA-то хочет??? как там насчет real time? Может, он просто от Вас красиво отделаться хочет? - Evgeny_CD(30.10.2007 10:13)
- Ну, JAVA напрямую не называют. Может, не знают слова :) real time не особенно критичен. Говорится про объекты, их загрузку путем кликанья мышью где-то на экране Vladimir Ljaschko(573 знак., 30.10.2007 10:43)
- У немцев такой подход широко распространен. AlexandrY(260 знак., 30.10.2007 11:18)
- Зато у этого инженера CV было правильное :) А если рассмотреть вариант DHTML и встроенного WEB сервака? - Evgeny_CD(30.10.2007 11:09)
- Само по себе не страшно. А вот организаццыя...Ну, дык, пусть учится писать докладные записьки по теме. Чем больше бумаги, чем чище ( . )...А так, вдруг получится, как медаль мона будет носить. ;О) На Фольксваген, например, утроиться. "По обмену mse(21 знак., 30.10.2007 11:02)
- Ну, JAVA напрямую не называют. Может, не знают слова :) real time не особенно критичен. Говорится про объекты, их загрузку путем кликанья мышью где-то на экране Vladimir Ljaschko(573 знак., 30.10.2007 10:43)
- У меня хуже. Клиент хочет делать апгрейд софта контроллера не останавливая его выполнение. Я в ступоре. AlexandrY(254 знак., 30.10.2007 10:49)