Easyelectronics.ru

Электроника для всех
Текущее время: 29 окт 2020, 22:38

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: STM32F102C8T6 + DFU проблема с FreeRTOS (решена)
СообщениеДобавлено: 11 апр 2012, 22:57 
Старожил
Аватара пользователя

Зарегистрирован: 26 фев 2010, 00:18
Сообщения: 252
Откуда: Зеленоград
Добрый день!

1) Адаптировал проект DFU из примера библиотеки работы USB к своей плате.
2) В примере выкинул всё, не относящееся к конкретному микроконтроллеру серии STM32Fxxxx.
3) Признак желания прошиваться сделал постоянным (функция нажатия на кнопку тупо возвращает 1 всегда).
4) При этом код DFU анализирует первые 4 байта по адресу 0x08003000, если они по маске 0x2FFE0000 равны 0x20000000, то он
a) делает вершину стека равной значению типа uint32_t из адреса 0x08003000 и
b) начинает исполнение с адреса 0x08003000 + 4, т.е. со следующих 4 байтов.

У меня возникла следующая проблема.
Если целевая прошивка, залитая либо с помощью DFU, либо GDB load-ом, представляет собой что-нибудь типа мигалки или вывода на дисплей, то всё нормально.

А если это любая даже сколь угодно простая реализация, использующая FreeRTOS, и делающая то же самое, но в задаче, то рушится в одном и том же месте. Не зависимо от того, чем она запущена - DFU-ой или GDB-ой.

Рушится в одном и том же месте. Вот в этом:
Show


GDB при попытке посмотреть, что произошло, сообщает:
Код:
Can not find bounds of current function.


Может я целевую прошивку неправильно собираю? Я в скрипте линкера начало флеш памяти сделал вместо 0x08000000 0x08003000 и всё по сравнению со случаем работы без DFU. (Если начало флеш памяти возвращаю на место, то прошивка работает нормально. При этом DFU прошиватель, естественно, убивается.)

Что такое смертельно важное я упускаю?

_________________
SHA1 = F435E0071548A35CDC5BEBE24BC8EBA1C4F0AAD6


Последний раз редактировалось dr_livsey 12 апр 2012, 23:16, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F102C8T6 + DFU проблема с FreeRTOS.
СообщениеДобавлено: 12 апр 2012, 14:39 
Только пришел

Зарегистрирован: 29 сен 2011, 19:37
Сообщения: 21
Как реализовано у меня в загрузчике
Код:
void jumpToUser (unsigned int usrAddr) {
deinit_can();
typedef void (*funcPtr)(void);
unsigned int jumpAddr = *(unsigned int*) (usrAddr + 0x04); /* reset ptr in vector table */
funcPtr usrMain = (funcPtr) jumpAddr;
__set_MSP(*(vu32*) usrAddr); /* set the users stack ptr */
usrMain(); /* go! */
}

В скрипте линкера исполняемой прошивки
Код:
  FLASH (rx)  : ORIGIN = 0x08002000, LENGTH = 54K

В исполняемой прошивке первая строчка main
Код:
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x2000);

Работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F102C8T6 + DFU проблема с FreeRTOS.
СообщениеДобавлено: 12 апр 2012, 18:16 
Старожил
Аватара пользователя

Зарегистрирован: 26 фев 2010, 00:18
Сообщения: 252
Откуда: Зеленоград
Думаю, это
Markusha писал(а):
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x2000);
всё объясняет :) Спасибо Большое! Вечером проверю и сообщу о результате.

_________________
SHA1 = F435E0071548A35CDC5BEBE24BC8EBA1C4F0AAD6


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F102C8T6 + DFU проблема с FreeRTOS.
СообщениеДобавлено: 12 апр 2012, 23:15 
Старожил
Аватара пользователя

Зарегистрирован: 26 фев 2010, 00:18
Сообщения: 252
Откуда: Зеленоград
Да, NVIC_SetVectorTable() решает проблему!

_________________
SHA1 = F435E0071548A35CDC5BEBE24BC8EBA1C4F0AAD6


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 


Часовой пояс: UTC + 5 часов


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB