реклама на сайте
подробности

 
 
> Таблица вызова функций. Как?, Реализация "BIOS"
EXeGLuMATOR
сообщение Sep 7 2011, 08:54
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305



День добрый.
Имеется желание и необходимость сделать что-то типа BIOS для LPC23хх. Мысль в следующем - загружается что-то типа лоадера, который управляет камнем, также в нем есть базовый код для работы с периферией. Он един для всех проектов. Софт верхнего уровня делается отдельно и грузится выше адресами. Как сделать, чтобы из него можно было обращаться к базовым функциям?
Мысль одна - сделать табличку с адресами соотв. функций и буферов и верхним софтом ее юзать. Только как ее заполнять? Поскольку после каждой компиляции может меняться и размер и, как следствие, "раскладка" функций в памяти.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
e-serg
сообщение Sep 8 2011, 06:22
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 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?

например одни и те же функции обработки данных в загрузчике и приложении.
тоже шифрование, зачем по два экземпляра кода.
Go to the top of the page
 
+Quote Post
EXeGLuMATOR
сообщение Sep 8 2011, 08:17
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305



Цитата(e-serg @ Sep 8 2011, 10:22) *
например одни и те же функции обработки данных в загрузчике и приложении.
тоже шифрование, зачем по два экземпляра кода.

Именно для мелких камней это и применимо. Тот-же ЮСБ и в загрузчике и в приложении - нет лишнего кода в приложении. Просто заполнил буфер, скомандовал на передачу. В этом и идея - все железо живет своей жизнью. Если оно нужно - его стартуем пользовательским софтом, если нет - то нет.

Спасибо. Вроде осознал по таблице. Т.е. как заполнить более или менее ясно, будем пробовать.
Теперь следующий вопрос, по этой же теме.
Лоадер работает, функции известны, периферия запущена (предполагается операционка, от Кейла). Т.е. лоадер - программа сама в себе. Верхнее приложение лежит во флэш с какого-то фиксированного адреса.
Стартовая функция (задача) приложения лежит по известному адресу и стартовать его не проблема. Каким образом компилировать пользовательскую программу, чтобы избежать появления лишнего кода? Т.е. чтобы был голый код приложения, после запуска которого он живет своей жизнью? Ну, насколько ему дает лоадер.
Тут скорее наоборот - лоадер выполняет функции ядра операционки, грубо говоря. А основной код может быть загружен в принципе любой, заточенный под такое применение, естественно. Т.е., например, идет обмен по ЮСБ - его сначала ловит лоадер и, если то что там ходит не относится к его работе (например обновление пользовательского софта и т.п.) - то пакет передается в пользовательское приложение. Как-то так.
Опять-же вопрос отладки. Ладно, лоадер и пользовательский софт во время отладки можно компилить как единое целое, а нужное потом как-то вырезать. Опять-же, как?
Go to the top of the page
 
+Quote Post
scifi
сообщение Sep 8 2011, 08:35
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Похоже на изобретение велосипеда а-ля полновесная ось с запуском приложений.
Откладываем в сторону большой вопрос "нафиг?" и вообще вопрос о целесообразности такого подхода в микроконтроллерных приложениях.
Ось надо сначала спроектировать, в потом уже реализовывать. Надо описать ABI, под которым будет исполняться пользовательское приложение. Надо расписать функциональность и сферы ответственности ядра и приложения. И т.д. А вы занимаете свою голову второстепенными вопросами типа "Каким образом компилировать пользовательскую программу, чтобы избежать появления лишнего кода?"
Go to the top of the page
 
+Quote Post
EXeGLuMATOR
сообщение Sep 8 2011, 08:54
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305



Цитата(scifi @ Sep 8 2011, 12:35) *
Похоже на изобретение велосипеда а-ля полновесная ось с запуском приложений.
Откладываем в сторону большой вопрос "нафиг?" и вообще вопрос о целесообразности такого подхода в микроконтроллерных приложениях.
Ось надо сначала спроектировать, в потом уже реализовывать. Надо описать ABI, под которым будет исполняться пользовательское приложение. Надо расписать функциональность и сферы ответственности ядра и приложения. И т.д. А вы занимаете свою голову второстепенными вопросами типа "Каким образом компилировать пользовательскую программу, чтобы избежать появления лишнего кода?"


В чем-то может и велосипед. А смысл прост. Есть устройство, нужно обеспечить запуск этих самых приложений. Ресурсы ограничены. Т.е. код лоадера + еще точно такой-же код в основном приложении - как-то расточительно, хоть и просто в реализации. И просто не лезет в камень. Еще очень большой блок данных во флэш лежит. Лоадер не меняется, только алгоритм обработки этих данных в зависимости от внешних воздействий. Вот и хочется максимальной скорости и простоты смены этого алгоритма пользователем на установленном изделии.
Go to the top of the page
 
+Quote Post
scifi
сообщение Sep 8 2011, 09:00
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(EXeGLuMATOR @ Sep 8 2011, 12:54) *
Лоадер не меняется, только алгоритм обработки этих данных в зависимости от внешних воздействий. Вот и хочется максимальной скорости и простоты смены этого алгоритма пользователем на установленном изделии.

Возможно, подойдёт подход с интерпретатором скриптового языка. Он как раз обеспечивает простоту загрузки нового скрипта. Но если нужно быстродействие, то интерпретатор может не подойти.
Я использовал Pawn. Отличная вещь.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 18:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.0144 секунд с 7
ELECTRONIX ©2004-2016