|
Таблица вызова функций. Как?, Реализация "BIOS" |
|
|
|
 |
Ответов
|
Sep 8 2011, 06:22
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 24-07-08
Из: Иркутск
Пользователь №: 39 180

|
Цитата(EXeGLuMATOR @ Sep 7 2011, 17:54)  Мысль одна - сделать табличку с адресами соотв. функций и буферов и верхним софтом ее юзать. Только как ее заполнять? Допустим так сделать примерно так Код uint8_t data[4096]; int flash_write(uint32_t addr, uint8_t *data, int size); //некая функция typedef struct{ uint8_t VER_ID; int (*flash_write)(uint32_t, uint8_t*, int); }FS; // в этой структуре перечислим const FS __attribute__((section(".boot_func"))) fs = {0, &flash_write}; // разместим например по адресу 0x100UL с помощью линкера const FS *fs2 = (FS *)0x100UL; // 0x100UL - адрес куда разместили структуру.
fs.flash_write(250, data, 196); // варианты вызова одной функции. fs2->flash_write(250, data, 196); flash_write(250, data, 196); Цитата(AlexandrY @ Sep 8 2011, 14:27)  Зачем в в таком примитивном микроконтроллере BIOS? например одни и те же функции обработки данных в загрузчике и приложении. тоже шифрование, зачем по два экземпляра кода.
|
|
|
|
|
Sep 8 2011, 08:17
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
Цитата(e-serg @ Sep 8 2011, 10:22)  например одни и те же функции обработки данных в загрузчике и приложении. тоже шифрование, зачем по два экземпляра кода. Именно для мелких камней это и применимо. Тот-же ЮСБ и в загрузчике и в приложении - нет лишнего кода в приложении. Просто заполнил буфер, скомандовал на передачу. В этом и идея - все железо живет своей жизнью. Если оно нужно - его стартуем пользовательским софтом, если нет - то нет. Спасибо. Вроде осознал по таблице. Т.е. как заполнить более или менее ясно, будем пробовать. Теперь следующий вопрос, по этой же теме. Лоадер работает, функции известны, периферия запущена (предполагается операционка, от Кейла). Т.е. лоадер - программа сама в себе. Верхнее приложение лежит во флэш с какого-то фиксированного адреса. Стартовая функция (задача) приложения лежит по известному адресу и стартовать его не проблема. Каким образом компилировать пользовательскую программу, чтобы избежать появления лишнего кода? Т.е. чтобы был голый код приложения, после запуска которого он живет своей жизнью? Ну, насколько ему дает лоадер. Тут скорее наоборот - лоадер выполняет функции ядра операционки, грубо говоря. А основной код может быть загружен в принципе любой, заточенный под такое применение, естественно. Т.е., например, идет обмен по ЮСБ - его сначала ловит лоадер и, если то что там ходит не относится к его работе (например обновление пользовательского софта и т.п.) - то пакет передается в пользовательское приложение. Как-то так. Опять-же вопрос отладки. Ладно, лоадер и пользовательский софт во время отладки можно компилить как единое целое, а нужное потом как-то вырезать. Опять-же, как?
|
|
|
|
|
Sep 8 2011, 08:54
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
Цитата(scifi @ Sep 8 2011, 12:35)  Похоже на изобретение велосипеда а-ля полновесная ось с запуском приложений. Откладываем в сторону большой вопрос "нафиг?" и вообще вопрос о целесообразности такого подхода в микроконтроллерных приложениях. Ось надо сначала спроектировать, в потом уже реализовывать. Надо описать ABI, под которым будет исполняться пользовательское приложение. Надо расписать функциональность и сферы ответственности ядра и приложения. И т.д. А вы занимаете свою голову второстепенными вопросами типа "Каким образом компилировать пользовательскую программу, чтобы избежать появления лишнего кода?" В чем-то может и велосипед. А смысл прост. Есть устройство, нужно обеспечить запуск этих самых приложений. Ресурсы ограничены. Т.е. код лоадера + еще точно такой-же код в основном приложении - как-то расточительно, хоть и просто в реализации. И просто не лезет в камень. Еще очень большой блок данных во флэш лежит. Лоадер не меняется, только алгоритм обработки этих данных в зависимости от внешних воздействий. Вот и хочется максимальной скорости и простоты смены этого алгоритма пользователем на установленном изделии.
|
|
|
|
Сообщений в этой теме
EXeGLuMATOR Таблица вызова функций. Как? Sep 7 2011, 08:54 scifi Цитата(EXeGLuMATOR @ Sep 7 2011, 12:54) М... Sep 7 2011, 11:24 EugenyAM Достаточно одного фиксированного адреса, по нему д... Sep 8 2011, 04:14 AlexandrY Цитата(EXeGLuMATOR @ Sep 7 2011, 11:54) И... Sep 8 2011, 05:27     EXeGLuMATOR Цитата(scifi @ Sep 8 2011, 13:00) Возможн... Sep 8 2011, 10:17    AlexandrY Цитата(EXeGLuMATOR @ Sep 8 2011, 11:54) В... Sep 8 2011, 13:20 psL Вещь полезная. Удобно при обновлении ПО, когда мен... Sep 9 2011, 16:54 Alechek Цитата(psL @ Sep 9 2011, 22:54) Вещь поле... Sep 14 2011, 07:19  EXeGLuMATOR Цитата(Alechek @ Sep 14 2011, 11:19) Бред... Sep 14 2011, 10:04  psL Цитата(Alechek @ Sep 14 2011, 11:19) Бред... Sep 15 2011, 12:02   _Pasha Цитата(psL @ Sep 15 2011, 15:02) Подобный... Sep 16 2011, 01:32    psL Цитата(_Pasha @ Sep 16 2011, 05:32) Давны... Sep 16 2011, 07:37 EXeGLuMATOR Да, видимо так. Осталось разобраться как это сдела... Sep 14 2011, 06:17 Alechek Возможно. В итоге часть BSP зашита, часть в пользо... Sep 14 2011, 11:57 EXeGLuMATOR Цитата(Alechek @ Sep 14 2011, 15:57) 2. б... Sep 14 2011, 13:14 Alechek 2 - никуда от нее не денешся. стандартная библиоте... Sep 14 2011, 13:57 EXeGLuMATOR Ну, насколько я понимаю - просто сделать табличку ... Sep 20 2011, 06:34
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|