|
Технология динамической загрузки модулей для 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 20 2013, 16:25
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(AlexandrY @ Jan 20 2013, 14:29)  ..какой смысл у такой организации софта.... востребованность из практики. плюсы очевидны: - меньше времени на загрузку. - апдэйт софта без спец. режимов, кнопок и на ран-тайме. - повышение надёжности. т.к. ошибки могут быть везде и в канал связи и в осях и в библиотеках.
|
|
|
|
|
Jan 20 2013, 19:24
|

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

|
Цитата(kolobok0 @ Jan 20 2013, 18:25)  востребованность из практики. плюсы очевидны: - меньше времени на загрузку. - апдэйт софта без спец. режимов, кнопок и на ран-тайме. - повышение надёжности. т.к. ошибки могут быть везде и в канал связи и в осях и в библиотеках. Тут вы видимо ведете речь о чем-то другом, мало относящемся к загрузке сторонних приложений. В малых встраиваемых системах время загрузки вообще ничтожно. Килобайт или мегабайт вы грузите никто не заметит. Разница будет в долях секунды. Некоторая периферия гораздо дольше инициализируется. Апдейт софта проще сделать когда апдейтится все. Иначе головная боль с совместимостью версий софта платформы и загружаемого приложения. Проще после загрузки вытеснить весь старый софт новым, либо старый софт оставить в качестве начального загрузчика не используя его для приложения. Повышению надежности тоже неоткуда взяться, хотя бы из-за того что разработчик стороннего приложения обладает меньшей информацией о платформе и минимальными возможностями по отладке. Т.е. я как бы совсем не понял ваших аргументов.
|
|
|
|
|
Jan 21 2013, 08:47
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(AlexandrY @ Jan 20 2013, 23:24)  ...мало относящемся к загрузке сторонних приложений. именно так. для сторонних приложений нужно озабачиваться бОльшей секьюрностью, которую по идее надо поддерживать на уровне железа. либо "условно сторонних" Цитата(AlexandrY @ Jan 20 2013, 23:24)  ...или мегабайт вы грузите никто не заметит. Разница будет в долях секунды... как бы Вы поспешили я так понимаешь. мегабайты через какой-нить вяложующий протокол и вся ваша прыть с крутым камнем идёт лесом. Цитата(AlexandrY @ Jan 20 2013, 23:24)  ...Апдейт софта проще сделать... я Вам больше скажу - просче вообще ничего не делать. я так понимаю это уже выход за техническую плоскость... Цитата(AlexandrY @ Jan 20 2013, 23:24)  ..Иначе головная боль с совместимостью версий софта... для меня - это пройденный этап. с точки зрения исполнения - пара-тройка экранов на сях... Цитата(AlexandrY @ Jan 20 2013, 23:24)  ...я как бы совсем не понял ваших аргументов. и вас вылечим  я собственно не спорю. скорее всего я не прав. человек спрашивал я ответил... тащить кого то в колхоз - честно слово времени нет вообще...
|
|
|
|
Сообщений в этой теме
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       haker_fox QUOTE (AlexandrY @ Jan 21 2013, 03:24) Т.... Jan 21 2013, 00:58     SyncLair Цитата(AlexandrY @ Jan 20 2013, 14:29) Дл... Jan 22 2013, 14:30      AlexandrY Цитата(SyncLair @ Jan 22 2013, 16:30) Есл... Jan 22 2013, 15:10       SyncLair Цитата(AlexandrY @ Jan 22 2013, 19:10) Чт... Jan 22 2013, 18:05 neiver Насчёт взаимодействия загружаемого модуля и ядра, ... Jan 16 2013, 15:01 _Pasha Цитата(neiver @ Jan 16 2013, 19:01) SVC -... Jan 16 2013, 15:07
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|