|
Технология динамической загрузки модулей для 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( '!' ); } .... Вот как объяснить линкеру, что нужно подставить только адреса функций, передать и принять аргументы. Кроме, как в заголовочнике задать адреса этих функций (точно также, как мы делаем это в одном проекте "по месту") у меня идей нет... Вопрос, как сделать это красиво?
--------------------
Выбор.
|
|
|
|
Сообщений в этой теме
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 Цитата(haker_fox @ Jan 19 2013, 09:36) ..... Jan 20 2013, 01:28    AlexandrY Цитата(kolobok0 @ Jan 20 2013, 03:28) под... Jan 20 2013, 10:29     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     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
|
|
|