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

 
 
> LPC4337, свой загрузчик. Инициализация SDRAM, мешает работе приложения
haker_fox
сообщение May 22 2018, 07:05
Сообщение #1


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Добрый день!
Задаю вопрос по просьбе своего коллеги. Они изготовил бутлоадер, который принимает приложение по каналу связи, и записывает его во внутреннюю флеш микроконтроллера. Само приложение 100% работает. Но вот нюанс. И приложение, и бутлоадер инициализируют внешнюю SDRAM, которую каждый использует для себя. И вот на старте инициализации SDRAM приложением проц то-ли улетает куда-то, то-ли зависает. Вопрос: почему такое может происходить. Ведь при повторной инициализации EMC приложением, данных, используемых кем-либо, нет. Это какая-то особенность контроллера памяти?


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Arlleex
сообщение May 24 2018, 04:58
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Цитата(jcxz @ May 24 2018, 02:20) *
Какой из указателей? rolleyes.gif Про переключение режима CPU конечно забыли?
И про сброс периферии тоже. laughing.gif

А при чем тут указатели стека и режим CPU? Загрузчик обязан обеспечить обновление ПО и (если необходимо) переход на приложение. Приложение не должно знать о существовании загрузчика, поэтому компилируется ровно так же, как и без загрузчика (только поправить ld-скрипт и вначале приложения сместить таблицу векторов. Ну или перед переходом на приложение в загрузчике ее сместить). При старте МК с загрузчиком:
1. Проверяется тип сброса - если программный, то (в моем случае) это только означает, что был запрос обновления ПО из приложения, если нет - JumpToApplicatioin().
2. Инициализируется периферия, необходимая для приема прошивки.
3. Принимается прошивка, сравниваются соответствующие контрольные суммы и т.д.
4. Деинициализируется периферия в случае успешного обновления ПО.
5. JumpToApplication().

Код
void HW_JumpToApplication(void)
{
unsigned int pFunction = *((volatile unsigned int *)(APPLICATION_BASE_ADDRESS + 4));
void (*UserApplication)(void) = (void (*)())pFunction;
__set_MSP(*(volatile unsigned int *)APPLICATION_BASE_ADDRESS);
UserApplication();
    
return;
}

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

Внутри целевого прилоежния первым делом сдвигается таблица векторов прерываний (если это не сделал загрузчик) и поехали.
Или Вы о чем?

Сообщение отредактировал Arlleex - May 24 2018, 05:08
Go to the top of the page
 
+Quote Post
scifi
сообщение May 24 2018, 07:01
Сообщение #3


Гуру
******

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



Цитата(Arlleex @ May 24 2018, 07:58) *
Код
void HW_JumpToApplication(void)
{
unsigned int pFunction = *((volatile unsigned int *)(APPLICATION_BASE_ADDRESS + 4));
void (*UserApplication)(void) = (void (*)())pFunction;
__set_MSP(*(volatile unsigned int *)APPLICATION_BASE_ADDRESS);
UserApplication();
    
return;
}

Мне больше нравится вот так:
Код
void jump_to_app(void)
{
    static const uint16_t code[] = {
       0x1d01, // adds r1, r0, #4
       0x6800, // ldr r0, [r0, #0]
       0x4685, // mov sp, r0
       0x6809, // ldr r1, [r1, #0]
       0x4708  // bx r1
    };
    ((void (*)(int))code)(APP_BASE);
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- haker_fox   LPC4337, свой загрузчик. Инициализация SDRAM   May 22 2018, 07:05
- - scifi   Переход из загрузчика в приложение надо делать так...   May 22 2018, 08:01
|- - jcxz   Цитата(scifi @ May 22 2018, 11:01) Перехо...   May 22 2018, 08:30
|- - scifi   Цитата(jcxz @ May 22 2018, 11:30) Не совс...   May 22 2018, 08:45
|- - haker_fox   QUOTE (scifi @ May 22 2018, 16:45) В конц...   May 22 2018, 10:28
- - Kabdim   У меня логика бута нацелена на исключение возможны...   May 22 2018, 08:03
- - haker_fox   Спасибо, господа!!! Передам эти рекоме...   May 22 2018, 08:17
- - haker_fox   При сбросе EMC модуля через RGU возникает hardfaul...   May 23 2018, 01:46
|- - jcxz   Цитата(haker_fox @ May 23 2018, 04:46) Пр...   May 23 2018, 18:30
- - Arlleex   Хм. А я не использую никаких зарезервированных мет...   May 23 2018, 05:01
- - VladislavS   Мне кажется, правильнее всего "добить" к...   May 23 2018, 06:04
- - Arlleex   ЦитатаЧто мешает делать после приёма прошивки рест...   May 23 2018, 20:00
|- - jcxz   Цитата(Arlleex @ May 23 2018, 23:00) Ниче...   May 23 2018, 22:20
|- - jcxz   Цитата(Arlleex @ May 24 2018, 07:58) 1. П...   May 24 2018, 06:09
|- - jcxz   Цитата(scifi @ May 24 2018, 10:01) Мне бо...   May 24 2018, 08:04
|- - Arlleex   Цитата(jcxz @ May 24 2018, 12:04) .asm: К...   May 24 2018, 08:13
||- - jcxz   Цитата(Arlleex @ May 24 2018, 11:13) Ну в...   May 24 2018, 10:55
|- - scifi   Цитата(jcxz @ May 24 2018, 11:04) Код ...   May 24 2018, 08:36
|- - scifi   Цитата(scifi @ May 24 2018, 11:36) Точно...   May 28 2018, 12:05
|- - Arlleex   Цитата(scifi @ May 28 2018, 15:05) Поправ...   May 28 2018, 12:22
|- - scifi   Цитата(Arlleex @ May 28 2018, 15:22) ИМХО...   May 28 2018, 12:46
|- - Arlleex   Цитата(scifi @ May 28 2018, 15:46) Не лиш...   May 28 2018, 12:52
|- - scifi   Цитата(Arlleex @ May 28 2018, 15:52) Пард...   May 28 2018, 13:02
- - Arlleex   ЦитатаЕсли после приёма прошивки (и записи её во ф...   May 24 2018, 06:39
- - Arlleex   ЦитатаМне больше нравится вот так: А какие плюшки ...   May 24 2018, 07:20
|- - scifi   Цитата(Arlleex @ May 24 2018, 10:20) А ка...   May 24 2018, 07:29
- - Arlleex   Да нет, не запутался. Говорю же что ошибся насчёт ...   May 28 2018, 14:42


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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 04:14
Рейтинг@Mail.ru


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