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

 
 
> Ещё раз о бутлоадере, Некоторые тонкости.
SasaVitebsk
сообщение Oct 4 2007, 09:17
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Задумка такая.

По старту попадаем в бут. Там считаем CRC и если Ok - выходим на саму приложение. Если не Ok то переходим на сам лодырь.

В приложении по команде переходим непосредственно на лоадырь.


То есть мне надо две точки входа. По сбросу и по команде. Хотелось бы использовать незадействованные вектора бутлоадера. Например +2. Как это сделать. Если использовать pragma location, то наверняка будет linker ругаться.

Конечно можно упростить задачу и использовать какой нибудь признак в EEPROM. Или портить CRC к примеру, но что-то мне не нравится такой подход.

А кто как делает?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Oct 9 2007, 23:55
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Сергей, всётаки по коду не уложился в 2к. Со своим WakeUp-ом. Там ещё некоторые приколы есть. У меня должно осуществляться обновление прямо в сети. Соответственно при обновлении требуется сверять серийный номер устройства. Его я не хочу записывать в лоадер, дабы лоадер унифицированный был. Поэтому при перепрошивке вытаскиваю номер перепрошиваю и сохраняю номер. smile.gif

Короче впрямую в 2к не влез. В связи с тем, что сам протокол Wake, если работать ч/з прерывания, практически не связан с лоадером - переписал его на ASM. Думаю так влезу.

Но вот возник вопрос.

там есть конструкция в лоадере если помнишь.

typedef union
{
struct
{
uint8_t m_rxBuffer[BUFFER_SIZE]; // Receive buffer
uint8_t m_pageBuffer[PAGE_SIZE]; // Page is assembled here before
// getting programmed to flash mem
} part1;

#define rxBuffer sharedbufs.part1.m_rxBuffer

Честно говоря смысл её не всосал. Чтобы к одному и тому же участку памяти под разными именами обращаться, что ли.

Но у меня с ней проблемы на ASM. Не могу понять как на ASM указать адрес начала буфера приёмного (rxBuffer)???


Сори. smile.gif Разобрался.

Просто как-то в голове не укладывается как в ассемблере имена структур фигурируют. Понятно что потом линкер их к адресам приводит, но всё равно несколько диковато. smile.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 10 2007, 10:58
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(SasaVitebsk @ Oct 10 2007, 02:55) *
Сергей, всётаки по коду не уложился в 2к. Со своим WakeUp-ом.
Ты пытаешься засунуть в загрузчик еще какие-то команды кроме UpdateFirmware? У меня Wake-подобный протокол, я сделал так:
Код
static unsigned char busReceiveByte(void)
{
    uint8_t c = UART_getchar();
    if(c == CTL)
        c = UART_getchar() ^ 0x20;
    return c;
}
__C_task void main(void)
{
.......
    if(!dir(MANUAL_PROG))
    {
        uint8_t command[7];
        command[0] = 0xC0;          // Begin Of Frame
        uint16_t Tmp = SerialNo();
        command[1] = Tmp;
        command[2] = Tmp >> 8;
        command[3] = 0xFF;
        uint8_t *ptr = &command[1];
        Tmp = 0xFFFF;
        Tmp = CRC_XMODEM (*ptr++, Tmp);
        Tmp = CRC_XMODEM (*ptr++, Tmp);
        Tmp = CRC_XMODEM (*ptr++, Tmp);
        command[4] = ~Tmp;
        command[5] = ~(Tmp >> 8);
        command[6] = 0xC1;          // End Of Frame
        uint8_t idx = 0;
        do {
            uint8_t c = busReceiveByte();

            if(c != command[idx])
                idx = 0;
            else
                idx++;
        } while(idx < sizeof(command));        // wait for EOM
    }
    busReplyByte(ERROR_OK);
Т.е. я формирую образ всей команды и сравниваю проходящий поток с образцом. Сгенерить образец гораздо проще, чем реализовывать весь конечный автомат приема. Увы, это проходит только для одной команды.
Цитата(SasaVitebsk @ Oct 10 2007, 02:55) *
Соответственно при обновлении требуется сверять серийный номер устройства. Его я не хочу записывать в лоадер, дабы лоадер унифицированный был. Поэтому при перепрошивке вытаскиваю номер перепрошиваю и сохраняю номер. smile.gif
У меня в области загрузчика есть функция
Код
#pragma segment="GET_SERIAL"
#pragma location="GET_SERIAL"
__root uint16_t SerialNo(void) { return ~0;}
При прошивке я указываю AvRealу -c?serno2=1826,serno.txt и он автоматически при программировании подставляет в эту функцию уникальные номера. Номер хранится в загрузчике и не может быть случайно стерт с приложением. Функцию SerialNo() можно вызвать и из приложения, поэтому и приложение становится независимым от серийника. Функция занимает 6 байт, что меньше чем код для чтения 16-битной константы из флеш с помощью LPM
Цитата(SasaVitebsk @ Oct 10 2007, 02:55) *
Честно говоря смысл её не всосал. Чтобы к одному и тому же участку памяти под разными именами обращаться, что ли.
Именно так. Для улучшения читабельности. Т.е. "сейчас мы работаем с этим блоком как с буфером приема"
Цитата(SasaVitebsk @ Oct 10 2007, 02:55) *
Сори. smile.gif Разобрался.
Просто как-то в голове не укладывается как в ассемблере имена структур фигурируют. Понятно что потом линкер их к адресам приводит, но всё равно несколько диковато. smile.gif
Ну, если не на плюсах писать, то имена как и у обычных переменных. А вот к полям из ассемблера, увы, только вручную указывая смещение от начала структуры.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- SasaVitebsk   Ещё раз о бутлоадере   Oct 4 2007, 09:17
- - Сергей Борщ   Цитата(SasaVitebsk @ Oct 4 2007, 12:17) Х...   Oct 4 2007, 09:37
|- - IJAR   Цитата(Сергей Борщ @ Oct 4 2007, 13:37) Е...   Oct 9 2007, 11:40
|- - Сергей Борщ   Цитата(IJAR @ Oct 9 2007, 14:40) А какой ...   Oct 9 2007, 12:01
|- - IJAR   Цитата(Сергей Борщ @ Oct 9 2007, 16:01) Ч...   Oct 9 2007, 12:33
|- - Сергей Борщ   Цитата(IJAR @ Oct 9 2007, 15:33) Но есть ...   Oct 9 2007, 14:33
- - SasaVitebsk   Спасибо Сергей. Всё доступно объяснил. Подходят о...   Oct 4 2007, 19:14
- - arttab   а почему бы не объявить переменную в озу в загрузч...   Oct 7 2007, 14:34
|- - Сергей Борщ   Цитата(arttab @ Oct 7 2007, 17:34) В загр...   Oct 8 2007, 08:16
- - IJAR   Цитата(SasaVitebsk @ Oct 4 2007, 13:17) З...   Oct 9 2007, 07:28
|- - Сергей Борщ   Цитата(IJAR @ Oct 9 2007, 10:28) 1. Испол...   Oct 9 2007, 10:45
|- - SasaVitebsk   Цитата(Сергей Борщ @ Oct 10 2007, 13:58) ...   Oct 10 2007, 13:35
|- - Сергей Борщ   Цитата(SasaVitebsk @ Oct 10 2007, 16:35) ...   Oct 10 2007, 15:46
||- - Dog Pawlowa   Цитата(Сергей Борщ @ Oct 10 2007, 18:46) ...   Oct 10 2007, 16:42
||- - Сергей Борщ   Цитата(Dog Pawlowa @ Oct 10 2007, 19:42) ...   Oct 10 2007, 16:57
|- - singlskv   Цитата(SasaVitebsk @ Oct 10 2007, 17:35) ...   Oct 16 2007, 18:01
|- - Сергей Борщ   Цитата(singlskv @ Oct 16 2007, 21:01) Ста...   Oct 17 2007, 09:56
- - SasaVitebsk   Код 2 106 bytes of CODE memory 1 430 bytes of D...   Oct 11 2007, 09:07
- - Waso   Извиняюсь что лезу в чужую тему, но есть дилетантс...   Oct 12 2007, 08:36
|- - Сергей Борщ   Цитата(Waso @ Oct 12 2007, 11:36) Я плани...   Oct 12 2007, 11:04
- - Waso   Спасибо за совет! Нашел апноты. Изучаю. Safe ...   Oct 15 2007, 07:02
- - SasaVitebsk   Ещё один вопрос, напрямую с бутлоадером не связанн...   Oct 16 2007, 10:28
|- - Сергей Борщ   Цитата(SasaVitebsk @ Oct 16 2007, 13:28) ...   Oct 16 2007, 12:51
|- - IgorKossak   Цитата(Сергей Борщ @ Oct 16 2007, 15:51) ...   Oct 16 2007, 20:32
- - SasaVitebsk   Спасибо, но я не планирую запрещать локи на чтение...   Oct 16 2007, 16:47
- - SasaVitebsk   2 singlskv. Не планирую переходить на GCC. Работы ...   Oct 16 2007, 20:58
|- - singlskv   Цитата(SasaVitebsk @ Oct 17 2007, 00:58) ...   Oct 17 2007, 20:29
|- - zltigo   Цитата(singlskv @ Oct 17 2007, 23:29) то ...   Oct 17 2007, 20:47
||- - singlskv   Цитата(zltigo @ Oct 18 2007, 00:47) Т.е. ...   Oct 17 2007, 20:57
||- - zltigo   Цитата(singlskv @ Oct 17 2007, 23:57) Опя...   Oct 17 2007, 21:12
||- - singlskv   Цитата(zltigo @ Oct 18 2007, 01:12) Конте...   Oct 17 2007, 21:53
||- - zltigo   Цитата(singlskv @ Oct 18 2007, 00:53) Ско...   Oct 17 2007, 22:04
||- - singlskv   Цитата(zltigo @ Oct 18 2007, 02:04) Легко...   Oct 17 2007, 22:24
||- - zltigo   Цитата(singlskv @ Oct 18 2007, 01:24) а п...   Oct 17 2007, 22:35
||- - singlskv   Цитата(zltigo @ Oct 18 2007, 02:35) В aes...   Oct 17 2007, 22:55
|- - SasaVitebsk   Цитата(singlskv @ Oct 17 2007, 23:29) Ну ...   Oct 18 2007, 19:35
|- - Сергей Борщ   Цитата(SasaVitebsk @ Oct 18 2007, 22:35) ...   Oct 18 2007, 20:40
|- - zltigo   Цитата(SasaVitebsk @ Oct 18 2007, 22:35) ...   Oct 18 2007, 22:05
|- - singlskv   To zltigo и SasaVitebsk, признаю, погорячился насч...   Oct 18 2007, 22:48
|- - zltigo   Цитата(singlskv @ Oct 19 2007, 01:48) Спр...   Oct 19 2007, 07:31
|- - Непомнящий Евгений   Цитата(singlskv @ Oct 19 2007, 02:48) Ну ...   Oct 19 2007, 07:37
|- - zltigo   Цитата(Непомнящий Евгений @ Oct 19 2007, 10...   Oct 19 2007, 08:01
- - Непомнящий Евгений   Если максимальная оптимизация по размеру, то первы...   Oct 19 2007, 08:33
|- - singlskv   Цитата(Непомнящий Евгений @ Oct 19 2007, 11...   Oct 19 2007, 15:08
|- - SasaVitebsk   Цитата(singlskv @ Oct 19 2007, 18:08) А о...   Oct 20 2007, 20:07
|- - singlskv   Цитата(SasaVitebsk @ Oct 21 2007, 00:07) ...   Oct 21 2007, 17:28
|- - pvp   Цитата(singlskv @ Oct 21 2007, 21:28) __z...   Oct 22 2007, 15:24
|- - Сергей Борщ   Цитата(pvp @ Oct 22 2007, 18:24) Поясните...   Oct 22 2007, 15:33
|- - pvp   Цитата(Сергей Борщ @ Oct 22 2007, 19:33) ...   Oct 23 2007, 14:02
- - SasaVitebsk   Внимательно просмотрю. Правда я отказался на сегод...   Oct 22 2007, 10:43
|- - singlskv   Цитата(SasaVitebsk @ Oct 22 2007, 14:43) ...   Oct 22 2007, 16:43
- - SasaVitebsk   Я когда первый раз увидел результаты компилировани...   Oct 22 2007, 21:24
- - skripach   Не стал создавать новую тему, поэтому здесь. Можно...   Nov 9 2009, 14:11
- - skripach   Что никто не знает? ...или я что-то не то спросил.   Nov 12 2009, 07:30
|- - zltigo   Цитата(skripach @ Nov 12 2009, 10:30) Что...   Nov 12 2009, 09:39
- - KSN   Есть вопрос по прерываниям в bootloader и applicat...   Feb 27 2010, 09:55
- - Сергей Борщ   Цитата(KSN @ Feb 27 2010, 11:55) Может у ...   Feb 27 2010, 11:39


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

 


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


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