roboforum.ru

Технический форум по робототехнике.

Доступ к коду бутлоадера AVR из главной программы

Доступ к коду бутлоадера AVR из главной программы

blindman » 26 июн 2010, 16:44

Есть МК с подключенной картой SD. С карты играются звуковые файлы, туда пишутся логи и прочее. Хочу сделать возможность обновления прошивки через файл на карте. Размещать отдельные копии библиотеки для работы с файловой системой в основной программе и бутлоадере не хочется. Возможно ли как-то сделать, чтобы основная программа как-то "знала" по каким адресам в бутлоадере находятся определенные функции? Компилятор - avr-gcc.

Пока вижу 2 варианта:
1. в бутлоадер зашивать сильно усеченную либу для работы с файловой системой, а в основную программу - полноценную. Но как я уже говорил, это нежелательно
2. В бутлоадер зашить полноценную либу, а основную программу с этой либой не линковать. Сделать набор указателей на функции в секции .noinit. Бутлоадер при старте инициализирует эти переменные, и при переходе в основную программу уже имеем готовые указатели. Проблема - не знаю, как сделать, чтобы и в основной программе, и в бутлоадере эти переменные были по одному адресу.

Есть у кого-нибудь мысли по этому поводу?

Re: Доступ к коду бутлоадера AVR из главной программы

Michael_K » 26 июн 2010, 17:01

blindman писал(а):Возможно ли как-то сделать, чтобы основная программа как-то "знала" по каким адресам в бутлоадере находятся определенные функции?

Прямо в хеадере указать конкретные адреса.

Re: Доступ к коду бутлоадера AVR из главной программы

blindman » 26 июн 2010, 17:07

Не, это не по-джедайски :) - во-первых. А во-вторых, есть еще и глобальные переменные в либе. Запись в эти переменные будет портить переменные основной программы, и наоборот

Re: Доступ к коду бутлоадера AVR из главной программы

Michael_K » 26 июн 2010, 17:10

Ну, тогда в одельную секцию выделить указатели и вручную их разместить...
Хотя я бы все таки воспользовался статичными указателями в флэшке...

Re: Доступ к коду бутлоадера AVR из главной программы

blindman » 26 июн 2010, 17:20

Все "ручное" не канает.

Re: Доступ к коду бутлоадера AVR из главной программы

Michael_K » 26 июн 2010, 17:22

?
вы же секцию бутлоадера точно так же вручную размещаете. Какая разница?

Re: Доступ к коду бутлоадера AVR из главной программы

blindman » 26 июн 2010, 17:29

Но при этом мне абсолютно пофигу конкретные адреса, по которым компилятор разместит функции и глобальные переменные. Мне же нужно, чтобы в обоих программах определенный набор глобальных переменных был по одинаковым адресам.

Re: Доступ к коду бутлоадера AVR из главной программы

Michael_K » 26 июн 2010, 17:57

Что-то, то ли лыжи не едут...

Еще раз - В флэшке создаете отдельную секцию, размещаете в ней массив с указателями на функции бутлоадера. Линкером размещаете эту секцию по абсолютному адресу (где-то рядом с бутом, например, или внутри него выкроить). Зашиваете бутлоадер вместе с этой таблицей.

Эту же секцию линкером цепляете к программе по тем же абсолютным адресам.

Получается, что вы отдельно можете компилять программу. И отдельно компилять бутлоадер.
И только таблица "точек входа" у вас сидит по абсолютному адресу один раз вписанному в линкер.
Ну навроде таблицы векторов прерываний.

Добавлено спустя 2 минуты 10 секунд:
Про какой "набор глобальных переменных" вы говорите, я не понял...

Re: Доступ к коду бутлоадера AVR из главной программы

blindman » 26 июн 2010, 18:01

Это-то понятно. А с глобальными переменными как быть?

Добавлено спустя 3 минуты 18 секунд:
В либе есть глобальные переменные - вот про них и говорю

Re: Доступ к коду бутлоадера AVR из главной программы

Michael_K » 26 июн 2010, 18:02

Много?
Нельзя ли их разместить в регистрах, например?

Re: Доступ к коду бутлоадера AVR из главной программы

blindman » 26 июн 2010, 18:05

Нет. Это полноценная либа для работы с файловой системой, это не одна-две переменные. Да и нужно решение для общего случая.

Re: Доступ к коду бутлоадера AVR из главной программы

=DeaD= » 26 июн 2010, 18:49

Наверное это уже сам находил?
http://www.avrfreaks.net/index.php?name ... ic&t=72303

Re: Доступ к коду бутлоадера AVR из главной программы

blindman » 26 июн 2010, 20:34

Там не про то

Добавлено спустя 1 час 39 минут 6 секунд:
Пока не придумал ничего лучшего, чем поместить все глобальные переменные бутлоадера в одну секцию, разместить ее с нулевого адреса, а .data разместить с адреса, равного размеру глобальных переменных бутлоадера.

Re: Доступ к коду бутлоадера AVR из главной программы

Michael_K » 26 июн 2010, 20:53

Да, как мне кажется, вы пытаетесь решить неподходящую задачу неподходящими инструментами...
И удивляетесь, что неудобно.

Вариантов куча - от переписать либу без глобальных переменных или с динамическим выделением, до выделить в бутлоадер самый минимум, или либу всю засунуть в отдельную секию флэша, юзать асм...
В конце концов вписать в мэйк разбор мэпа и генерацию дефайнов...

Я писал бутлоадер, который работал через ethernet и при этом использовал только 4 регистра и одну ногу... Инструменты должны выбираться под задачу, а не наоборот.

Re: Доступ к коду бутлоадера AVR из главной программы

blindman » 27 июн 2010, 05:22

Я пока еще не решаю, а всего лишь ищу способ решения.

Либу переписал без использования глобальных переменных, указатели на функции засуну в конец флэша.


Rambler\'s Top100 Mail.ru counter