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

 
 
> BootLoader для LPC1766, Как правильно вызывать прикладную программу.
Vitaliy_ARM
сообщение Jan 28 2010, 15:37
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Был у меня загрузчик для LPC2378 и прочих.
Теперь стала задача переписать его под LPC1766.

Все переписалось без особых проблем, однако камнем предкновения оказалось сделать вызов прикладной программы.

Прикладная программа заливается вместе с векторами начиная с адреса 0x1 0000 (16-я страница). Т.е. в ней находятся сначала вектора, а потом все остальное.

Код вызова программы:

Код
#define FIRST_PAGE_ADDR 0x10000
#define NVIC_VectTab_FLASH           (0x00000000)

// код вызова приложения

volatile unsigned long    *p = (volatile unsigned long*)NVIC_VECT_TABLE;
*p = NVIC_VectTab_FLASH | (USER_FLASH_START & 0x1FFFFF80);

void (*App)() =  (void(*)())(FIRST_PAGE_ADDR + 1);
App();            // уходим в прикладную программу


Код вызова брал по аналогии из LPC1700 USB Bootloader.

Сделал прикладную программу, которая настраивает порт светодиода на плате и зажигает его.
Прикладная программа вызывается неправильно. В ассемблерном коде используется BLX на адрес, 10001, хотя должен был быть 10002. И яр отображает код совсем подругому.
В приложенных файлах 001 и 002 показаны скриншоты яра при работе загрузчика и уходе в прикладную программу. На 003 - прикладная программа в отладочном режиме без загрузчика.

Как правильно вызывать?
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Jan 28 2010, 17:21
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Vitaliy_ARM @ Jan 28 2010, 19:04) *
А что может находиться по адресу 0x10000 + 0x01? На сколько мне известно при 16 битных инструкциях прыгать нужно на адреса, выровненные под 16 битное пространство (т.е. в последнем бите должен быть 0).

Младший бит адреса BLX выбирает режим работы процессора. В данном случае он должен быть равен "1", т.к. процессор может работать только в Thumb.

Цитата(Vitaliy_ARM @ Jan 28 2010, 18:37) *
В приложенных файлах 001 и 002 показаны скриншоты яра при работе загрузчика и уходе в прикладную программу. На 003 - прикладная программа в отладочном режиме без загрузчика.

Судя по скриншотам, прикладная программа просто неправильно записана.
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Jan 29 2010, 10:05
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(aaarrr @ Jan 28 2010, 20:21) *
Младший бит адреса BLX выбирает режим работы процессора. В данном случае он должен быть равен "1", т.к. процессор может работать только в Thumb.

Теперь понятно.
Цитата(aaarrr @ Jan 28 2010, 20:21) *
Судя по скриншотам, прикладная программа просто неправильно записана.

Да, действительно. smile3046.gif
Спасибо.

Рано обрадовался. Были неправильные скриншоты. После скринов будлодера я несколько изменил прошивку.
Теперь сделал все заново. Прошики совпадают.


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:46
Рейтинг@Mail.ru


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