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

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

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

Сообщение blindman » 26 июн 2010, 16:44

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

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

Есть у кого-нибудь мысли по этому поводу?
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение Michael_K » 26 июн 2010, 17:01

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

Прямо в хеадере указать конкретные адреса.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение blindman » 26 июн 2010, 17:07

Не, это не по-джедайски :) - во-первых. А во-вторых, есть еще и глобальные переменные в либе. Запись в эти переменные будет портить переменные основной программы, и наоборот
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение Michael_K » 26 июн 2010, 17:10

Ну, тогда в одельную секцию выделить указатели и вручную их разместить...
Хотя я бы все таки воспользовался статичными указателями в флэшке...
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение blindman » 26 июн 2010, 17:20

Все "ручное" не канает.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение Michael_K » 26 июн 2010, 17:22

?
вы же секцию бутлоадера точно так же вручную размещаете. Какая разница?
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение blindman » 26 июн 2010, 17:29

Но при этом мне абсолютно пофигу конкретные адреса, по которым компилятор разместит функции и глобальные переменные. Мне же нужно, чтобы в обоих программах определенный набор глобальных переменных был по одинаковым адресам.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение Michael_K » 26 июн 2010, 17:57

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

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

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

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

Добавлено спустя 2 минуты 10 секунд:
Про какой "набор глобальных переменных" вы говорите, я не понял...
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение blindman » 26 июн 2010, 18:01

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

Добавлено спустя 3 минуты 18 секунд:
В либе есть глобальные переменные - вот про них и говорю
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение Michael_K » 26 июн 2010, 18:02

Много?
Нельзя ли их разместить в регистрах, например?
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение blindman » 26 июн 2010, 18:05

Нет. Это полноценная либа для работы с файловой системой, это не одна-две переменные. Да и нужно решение для общего случая.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение =DeaD= » 26 июн 2010, 18:49

Наверное это уже сам находил?
http://www.avrfreaks.net/index.php?name ... ic&t=72303
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение blindman » 26 июн 2010, 20:34

Там не про то

Добавлено спустя 1 час 39 минут 6 секунд:
Пока не придумал ничего лучшего, чем поместить все глобальные переменные бутлоадера в одну секцию, разместить ее с нулевого адреса, а .data разместить с адреса, равного размеру глобальных переменных бутлоадера.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение Michael_K » 26 июн 2010, 20:53

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

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

Я писал бутлоадер, который работал через ethernet и при этом использовал только 4 регистра и одну ногу... Инструменты должны выбираться под задачу, а не наоборот.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение blindman » 27 июн 2010, 05:22

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

Либу переписал без использования глобальных переменных, указатели на функции засуну в конец флэша.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18