|
Технология динамической загрузки модулей для RTOS, Какие есть методы и инструменты. |
|
|
|
 |
Ответов
|
Jan 13 2013, 07:56
|
Частый гость
 
Группа: Свой
Сообщений: 113
Регистрация: 25-10-07
Из: Краснодар
Пользователь №: 31 725

|
Контики от А. Дункельса и компании поддерживает загрузку модулей через elf для AVR, MSP430, x86 и др. Ознакомиться с исходниками можно в contiki-2.6\core\loader\. Сайт проекта http://www.contiki-os.org/
|
|
|
|
|
Jan 18 2013, 19:30
|
Местный
  
Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197

|
Цитата(desh @ Jan 13 2013, 11:56)  Контики от А. Дункельса и компании поддерживает загрузку модулей через elf для AVR, MSP430, x86 и др. Ознакомиться с исходниками можно в contiki-2.6\core\loader\. Сайт проекта http://www.contiki-os.org/для AVR он немного "испортил" эльф и сделал его 16-и битным Цитата(neiver @ Jan 16 2013, 19:01)  Насчёт взаимодействия загружаемого модуля и ядра, моногие ARM-ы, например, имеют команду SVC - Supervisor Call, которая вызывает соответствующий ..... Вот этот пример показывает разницу между ABI и API ибо в первом случае чётко определены параметры вызовов и поэтому любая "прикладная задача" в ОС может воспользоваться функциями. Вопрос только в с ледующем а как же быть если есть задача и библиотека, и сначала грузиться библиотека а потом задача? и функции библиотеки не определены в SVC. И на последок: Координальное на мой взгляд решение в ембеддед мире -- специально готовить исполняемый прикладной файл с учётом того, что уже есть на плате. То есть линкер должен знать какое состояние флеши в контроллере и готовить очередной "прикладной процесс" (понятно что прикладной в смысле не ОС которая УЖЕ в МК) с учётом того что уже есть на плате. То есть ну вот есть функция TimeDelay() по адресу А так и не зачем пихать ещё одну а делаем вызов по адресу A. Или если совсем просто, то пусть линкер линкует старые и новые объектные файлы только старые размещает по старому с нулевого адреса а новые далее. В этом случае загрузчику остаётся только сначала сделать memcmp, а уж потом оставшийся новый код догрузить во FLASH.
--------------------
|
|
|
|
|
Jan 19 2013, 05:36
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
QUOTE (SyncLair @ Jan 19 2013, 04:30)  То есть ну вот есть функция TimeDelay() по адресу А так и не зачем пихать ещё одну а делаем вызов по адресу A. Это правильно, но как этого добиться от линкера? Он-то о существовании оси не знает. Допустим, у нас есть API для уже загруженной в МК операционки: CODE namespace OSAPI { void sleep( msec ); ... ... ... TPrio getSelfPrio(); ... ... ... void sendchar( char a ); } Совершенно разные функции, которые уже есть в оси, на которые уже все заточено (прерывания, периферия, ядро). Допустим, мы решили воспользоваться одной из функций в нашем прикладном коде (драйвер, подгружаемая библиотека, просто программа): CODE .... int main( void ) { .... while( 1 ) { OSAPI::sleep( 100 ); OSAPI::sendchar( '!' ); } .... Вот как объяснить линкеру, что нужно подставить только адреса функций, передать и принять аргументы. Кроме, как в заголовочнике задать адреса этих функций (точно также, как мы делаем это в одном проекте "по месту") у меня идей нет... Вопрос, как сделать это красиво?
--------------------
Выбор.
|
|
|
|
|
Jan 20 2013, 10:29
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(kolobok0 @ Jan 20 2013, 03:28)  под stm32 сейчас делаю более навороченную модель - там собственно уже всё динамически вяжется. и собственно в загрузчике почти ничего уже и нет  А вот интересно , какой смысл у такой организации софта. Вижу три варианта: для себя, для коллег в своей организации, для сторонних разработчиков. Чтобы делать это для себя тут я вижу оправдание только в некоей эстетике, не относящейся к объективной необходимости. Чтобы делать для коллег, то наверно это вызвано технологическими особенностями процесса разработки, а не потребностью приложения как такового. Для сторонних разработчиков такой подход вызовет потребность создания огромного объема документации, проблемы с тех поддержкой. Для самих сторонних разработчиков вызовет проблемы с отладкой. А где положительные стороны такого подхода? Я не могу увидеть.
|
|
|
|
|
Jan 22 2013, 14:30
|
Местный
  
Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197

|
Цитата(AlexandrY @ Jan 20 2013, 14:29)  Для сторонних разработчиков такой подход вызовет потребность создания огромного объема документации, проблемы с тех поддержкой. Для самих сторонних разработчиков вызовет проблемы с отладкой. Если вы предоставляете систему сборки и бинарый файл ОСи то ничего он не создаёт! Цитата(haker_fox @ Jan 21 2013, 04:58)  Хотя нет. У меня есть один проектик, который работает круглые сутки, и управляет неким процессом. У меня тоже есть пример когда. "Обновление ПО контроллера без остановки контроллера." В этом случае мне бы как раз помогло обновлять только то что хочу. Ну например: загрузил вверсию 2 а работает версия 1, далее перезапустил процесс на новую версию. Цитата(kolobok0 @ Jan 21 2013, 12:47)  как бы Вы поспешили я так понимаешь. мегабайты через какой-нить вяложующий протокол и вся ваша прыть с крутым камнем идёт лесом. Поддерживаю аргумент -- вот Дункельс и пляшет с обновлением по всяким там Mesh сетям.
--------------------
|
|
|
|
|
Jan 22 2013, 18:05
|
Местный
  
Группа: Свой
Сообщений: 209
Регистрация: 6-01-12
Пользователь №: 69 197

|
Цитата(AlexandrY @ Jan 22 2013, 19:10)  Что такое "система сборки" и как она заменяет документацию?
Приведите хотя бы маленький реалистичный примерчик сценария обновления только какого то фрагмента кода, и реалистичную причину зачем это надо было делать. Система сборки -- на входе ваши бинарники + исходники клента -- на выходе исполняемый файл -- ну makefile например и куча куча всяких служебных скриптов и файлов или плагин к Eclipse-у. Никак не заменяет, просто уменшает ОГРОМНЫЙ размер документации если клиенту иногда надо пином подёргать и вывести на екран что-нибудь, в то время как ваши внутренние модули могут быть впринципе не продокументированы хорошо. В случае проблем со сборкой и даже наоборот требует на себя ЕЩЁ документацию в самом плохом случае  но если вы просто дали вашему клиенту инструмент по сборке -- он же студия разработки, то у вас до поры до времени нет проблем (а рано или поздно клиенту что-то экзотическое потребуется по закону мерфи). Ну и конечно ваша базовая часть, естественно, должна быть продокументирована НО только интерфейсы, а внутренности вшей базовой части конечно можно не документировать. часть 1 -- ОС(с загрузчиком) + часть2 -- управление каким-нибудь технологическим процессом часть1 -- с 0 по ххх адрес часть2.0 --- с ххх адреса по ууууу адрес часть2.1 --- с уууу адреса по зззззз адрес изменяя адрес начальной загрузки 2 части создаём образ части№2 и по меееееедленому каналу загружаем часть2 во флеш ПАРАЛЕЛЬНО с работающей системой Далее TaskDelete(2.0) + TaskCreate(2.1)
--------------------
|
|
|
|
Сообщений в этой теме
AlexandrY Технология динамической загрузки модулей для RTOS Dec 29 2012, 21:48 a9d Для начала
ЦитатаОперационная система (Operating ... Dec 29 2012, 22:03 AlexandrY Цитата(a9d @ Dec 30 2012, 00:03) Как видн... Dec 30 2012, 13:41 haker_fox QUOTE (AlexandrY @ Dec 30 2012, 06:48) И ... Dec 30 2012, 13:09 a9d Насколько я помню в винде адреса API функций прогр... Dec 30 2012, 14:31 AlexandrY Цитата(a9d @ Dec 30 2012, 16:31) Наскольк... Dec 31 2012, 12:09 haker_fox Гм... чувствую благовейный ветерок) Как когда-то д... Dec 31 2012, 06:04 a9d А как планируете решать проблему с MMU ? Также как... Dec 31 2012, 14:59 AlexandrY Цитата(a9d @ Dec 31 2012, 16:59) А как пл... Dec 31 2012, 15:31 a9d Вот об отсутствии и идет речь.
Вот простой пример... Dec 31 2012, 15:37 AlexandrY Цитата(a9d @ Dec 31 2012, 17:37) Вот об о... Dec 31 2012, 16:50  haker_fox QUOTE (AlexandrY @ Jan 1 2013, 01:50) Сущ... Jan 2 2013, 09:39 vshemm ЦитатаКак-то тут проскочила мысль, что настоящая о... Jan 2 2013, 20:42 AlexandrY Цитата(vshemm @ Jan 2 2013, 22:42) Про за... Jan 3 2013, 07:51  vshemm Цитата(AlexandrY @ Jan 3 2013, 11:51) Нас... Jan 8 2013, 16:07   AlexandrY Цитата(vshemm @ Jan 8 2013, 18:07) Боюсь,... Jan 16 2013, 12:07   AlexandrY Цитата(haker_fox @ Jan 19 2013, 07:36) Эт... Jan 19 2013, 11:08    haker_fox QUOTE (AlexandrY @ Jan 19 2013, 20:08) Вы... Jan 20 2013, 08:54     kolobok0 Цитата(AlexandrY @ Jan 20 2013, 14:29) ..... Jan 20 2013, 16:25      AlexandrY Цитата(kolobok0 @ Jan 20 2013, 18:25) вос... Jan 20 2013, 19:24       haker_fox QUOTE (AlexandrY @ Jan 21 2013, 03:24) Т.... Jan 21 2013, 00:58       kolobok0 Цитата(AlexandrY @ Jan 20 2013, 23:24) ..... Jan 21 2013, 08:47 neiver Насчёт взаимодействия загружаемого модуля и ядра, ... Jan 16 2013, 15:01 _Pasha Цитата(neiver @ Jan 16 2013, 19:01) SVC -... Jan 16 2013, 15:07
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|