Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Микроконтроллеры других производителей

Микроконтроллеры других производителей Все, что касается микроконтроллеров и НЕ подошло в раздел Microchip.

Ответ
 
Опции темы Опции просмотра
Старый 05.04.2017, 08:07   #1
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,284
Вес репутации: 1614/62
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию STM32F7 Bootloader

Товаришь попросил запостить сюда, может тут более вменяемые люди чем на Электрониксе.
-----------------------------------------------------------------------------------
Понадобилось портировать несколько проектов, с F1 и F4 на F7, каждый проект состояит из бутлоадера (в начале памяти) и аппликации (выше).
C F7 только недавно начал разбираться, поэтому заранее прошу прощения за может детские вопросы.

С ходу портированное не пошло, и я решил просто проверить на примитивных программках.
Сделал два крохотных проектика, для быстроты на HAL-е. Внутренний клок, работает прерывание от SysTick и к 3-м ножкам прицеплены светодиоды.
Всё, больше ничего нет.

Проблема с переходом из бутлоадера в аппликацию.

Проекты очень простые, в бутлоадере:
Код:
void HAL_SYSTICK_Callback(void){  // просто помигать светодиодиком №1
  static uint32_t Cnt1s;
        if(++Cnt>500){
          Cnt=0;
          HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
        }
}
//---------
// эта функция целиком скопирована, за исключением адреса, из рабочих проектов
#define APPLICATION_ADDRESS 0x08100000
typedef  void (*pFunction)(void);
pFunction JumpToApplication;
uint32_t JumpAddress;

//--
void AppStart(void){
    
    __disable_irq();

    JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
    JumpToApplication = (pFunction) JumpAddress;
    
    __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
    JumpToApplication();
}
//--------------
int main(void){
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,1);
  HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,1);
  HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,1);
  
   AppStart();

  while (1);
}
В основной программе:
Код:
void HAL_SYSTICK_Callback(void){  // мигаем светодиодом №3
  static uint32_t Cnt1s;

        if(++Cnt1s>1000){
          Cnt1s=0;
          HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);
        }
}
//-----------------
int main(void) {  // мигаем в мейне светодиодом №2
uint32_t i,j;

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  SystemClock_Config();
  MX_GPIO_Init();

  while (1) {
    for(j=0; j<1000000;j++){ 
        for(i=0;i<10; i++){
        }
    }
    HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
  }
}
Функция void AppStart(void) - как в куче других проектов, и все работало. Но там был не Ф7.
На бутлоадер в линкере прописан стартовый адрес 0x08000000 и конец 0x080FFFFF, а на апликацию - 0x08100000 и 0x081FFFFF и таблица векторов на 0x08100000

По индикации:
- в бутлоадере в прерывании мигает светодиод №1
- в аппликации в прерывании мигает светодиод №3
- в аппликации в основном цикле мигает светодиод №2


В результате - есть прыжок из бутлоадера в апликацию, после чего мигает только светодиод №2.
Т.е. прерывания в аппликации не работают.
Вопрос - что для Ф7 еще нужно?

В system_stm32f1xx.c (f4) в Кейле я еще прописывал для аппликации:
Код:
#ifndef BOOTABLE
 #define VECT_TAB_OFFSET  0x00 //  Vector Table base offset field. 
#else
 #define VECT_TAB_OFFSET  0x0100000 // < Vector Table base offset field. 
#endif
Тут пробовал в IAR делать аналогичное в system_stm32f7xx.c, но это ровным счетом ничего не меняет!

Я с IAR еще мало знакОм, в нем в линкере тоже прописывается адрес таблицы векторов, и я пока не пойму нужно ли это делать самому в system_ ?
-------------------------------------------------------------------------------------
DimaS вне форума   Ответить с цитированием
Старый 05.04.2017, 09:53   #2
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,300
Вес репутации: 4216/116
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: STM32F7 Bootloader

Тут напрашивается товарищу ответ - хорошо бы отличникам и хорошистам из России бесплатно выслать отладочные платы с F7, а то и хотел бы попробовать, а нет F7, есть только F4.
Я так понял, что ты сначала использовал загрузчик и приложение собранные в кейле для F4, а теперь решил пересобрать загрузчик и приложение в иаре. Так?
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 05.04.2017, 10:17   #3
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 45
Сообщений: 3,484
Вес репутации: 5450/125
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: STM32F7 Bootloader

Все прерывания и их запросы надо запрещать перед прыжком .
Калокуб только добавляет проблем и никак не способствует их решению...
dosikus вне форума   Ответить с цитированием
Старый 05.04.2017, 10:28   #4
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,300
Вес репутации: 4216/116
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: STM32F7 Bootloader

Цитата:
Сообщение от dosikus Посмотреть сообщение
Все прерывания и их запросы надо запрещать перед прыжком .
Калокуб только добавляет проблем и никак не способствует их решению...
У него вроде как IDE поменялась (был кейл стал иар), потому и косяк с таблицей векторов.
И вообще не понятно, а в кейле загрузчик и приложение для F7 работает по алгоритму, аналогичному F4.

Пусть выкладывает оба проекта - загрузчик и приложение.
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 05.04.2017 в 10:35.
Pridnya вне форума   Ответить с цитированием
Старый 05.04.2017, 13:13   #5
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,284
Вес репутации: 1614/62
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: STM32F7 Bootloader

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Тут напрашивается товарищу ответ - хорошо бы отличникам и хорошистам из России бесплатно выслать отладочные платы с F7, а то и хотел бы попробовать, а нет F7, есть только F4.
Боюсь, от нас пересылка будет стоть пол цены отладочной платы.
А сама плата стоит $22 в Маузере и наверняка есть у ваших местных.

Цитата:
Я так понял, что ты сначала использовал загрузчик и приложение собранные в кейле для F4, а теперь решил пересобрать загрузчик и приложение в иаре. Так?
Да, он это и хотел, но поскольку сразу не получилось - сделал два простейших проекта в Кубе, на поиграться.
DimaS вне форума   Ответить с цитированием
Старый 05.04.2017, 13:15   #6
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,284
Вес репутации: 1614/62
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: STM32F7 Bootloader

Цитата:
Сообщение от dosikus Посмотреть сообщение
Все прерывания и их запросы надо запрещать перед прыжком .
А __disable_irq(); для этого недостаточно?
Там кроме Systick ничего нет.

Цитата:
Калокуб только добавляет проблем и никак не способствует их решению...
А исходные и были без Куба, когда он их писал, Куба еще и в проекте небыло.

Последний раз редактировалось DimaS; 05.04.2017 в 13:23.
DimaS вне форума   Ответить с цитированием
Старый 05.04.2017, 13:22   #7
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,284
Вес репутации: 1614/62
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: STM32F7 Bootloader

Цитата:
Сообщение от Pridnya Посмотреть сообщение
У него вроде как IDE поменялась (был кейл стал иар), потому и косяк с таблицей векторов.
Я не уверен что дело в Кейле.
У него Кейл старый, F7 не поддерживает, а ИАР стоял новый.
Он куда-то уехал до выходных. но гооврил что на следующей неделе поставить последний Кейл и попробует в нем.
Но мне почему-то кажется, что Кейл/ИАР тут не причем - аналогичные конструкции на F1, F4, L1, L4 работают и там и там.
Там скорее всего или какие-то осообенности F7, или что-то очень простое и смешное.

Цитата:
И вообще не понятно, а в кейле загрузчик и приложение для F7 работает по алгоритму, аналогичному F4.

Пусть выкладывает оба проекта - загрузчик и приложение.
А смысл? У тебя же нет отладочной платы
Проект сейчас попрошу, если пришлет то выложу, но все, кроме приведенного в сообщнии - автоматически сгенерировано Кубом.
DimaS вне форума   Ответить с цитированием
Старый 18.04.2017, 18:40   #8
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,284
Вес репутации: 1614/62
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: STM32F7 Bootloader

Джентельмены, а кто знает - в чем разница между
__set_PRIMASK(0);

и

_disable_irq();

?
DimaS вне форума   Ответить с цитированием
Старый 18.04.2017, 19:00   #9
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 32
Сообщений: 2,081
Вес репутации: 3340/90
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: STM32F7 Bootloader

Цитата:
Сообщение от DimaS Посмотреть сообщение
Джентельмены, а кто знает - в чем разница между
__set_PRIMASK(0);

и

_disable_irq();

?
А заглянуть в ассемблерный код?
Romantic вне форума   Ответить с цитированием
Старый 18.04.2017, 21:59   #10
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,284
Вес репутации: 1614/62
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: STM32F7 Bootloader

Да я-то заглядывал, я по сути не очень пойму - и то и другое запрещает прерывания.
Просто Алекс со своим F7 еще в командировке, а я столкнулся с очень похожей проблемой на L1, причем проблему удалось локализовать: основную программу записал вверху памяти а сам вожусь с бутлоадером.
Для начала, просто через ST Link Utility записал в начале памяти, где таблица веткторов бутлоадера - первый 8 байта такие-же, как в таблице основной программы.
Т.е. стек и ресет-вектор.
После этого при вклчени питания основная программа прекрасно работала, и можно было приступить к бутлоадеру.
Сделал самый просто, вообще без ничего, т.е.
Код:
int main (void){
    __disable_irq();
    SCB->VTOR = APP_ADDRESS;
    
    JumpAddress = *(__IO uint32_t*)(APP_ADDRESS + 4);
    JumpToApplication = (pFunction)JumpAddress;
    // Initialize user application's Stack Pointer 
    __set_MSP(*(__IO uint32_t*)APP_ADDRESS);
    JumpToApplication();
}
И - не работает.
Убираю _disable_irq() - работает.
Но прерывания и так не разрешены!
А если ставлю __set_PRIMASK(0) - работает.
Добавил перед "прыжком" прерывания - все равно работает.
DimaS вне форума   Ответить с цитированием
Старый 19.04.2017, 09:12   #11
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,284
Вес репутации: 1614/62
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: STM32F7 Bootloader

Не, я помнаю, что ответ типа - "RTFM" тоже имеет право на существование, но бывает что оно не очень помогает.
DimaS вне форума   Ответить с цитированием
Старый 19.04.2017, 10:50   #12
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 45
Сообщений: 3,484
Вес репутации: 5450/125
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: STM32F7 Bootloader

https://github.com/PX4/Bootloader/blob/master/bl.c
dosikus вне форума   Ответить с цитированием
Старый 19.04.2017, 10:59   #13
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,284
Вес репутации: 1614/62
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: STM32F7 Bootloader

Там только прерывание от SysTick дизейблится, а если были еще включены - выключать все по очереди?

Но главный вопрос не в этом, интереснее всего - почему даже при выключенных прерываниях, с _disable_irq() не работает?
Эта функция присутствует практически во всех примерах, что мне попадались.

И почему с __set_PRIMASK(0) - работает.
На L1.
DimaS вне форума   Ответить с цитированием
Старый 20.04.2017, 09:59   #14
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,284
Вес репутации: 1614/62
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: STM32F7 Bootloader

Неужели, даже dosikus не знает?!
DimaS вне форума   Ответить с цитированием
Старый 20.04.2017, 13:26   #15
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 32
Сообщений: 2,081
Вес репутации: 3340/90
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: STM32F7 Bootloader

Цитата:
Сообщение от DimaS Посмотреть сообщение
Неужели, даже dosikus не знает?!
Ну, если это Вас так интересует, посмотрите на реализацию указанных макросов! И установите разницу между ними. Хотя бы код приведите! Иначе мы должны лезть по докам и кодить в своих проектах, чтобы ответить Вам. Кому это больше надо?

И, в конце концов, если Вам лень вникать, просто используйте as is рабочий вариант.
Romantic вне форума   Ответить с цитированием
Старый 20.04.2017, 14:07   #16
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 45
Сообщений: 3,484
Вес репутации: 5450/125
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: STM32F7 Bootloader

Код:
__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void)
{
  __ASM volatile ("cpsid i" : : : "memory");
}
Код:
__attribute__( ( always_inline ) ) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask)
{
  __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
}


С бутами пока мало занимался, так поверностно. F7 и L1 к сожалению не имею, а гадать не хочется.

Цитата:
PRIMASK The exception mask register, a 1-bit register. Setting PRIMASK to 1 raises the execution
priority to 0.

• PRIMASK is set to 1 by the execution of the instruction CPSID i
• PRIMASK is cleared to 0 by the execution of the instruction CPSIE i .
Цитата:
B5.2.1 CPS
Change Processor State changes one or more of the special-purpose register PRIMASK and FAULTMASK
values.

Assembler syntax
CPS<effect><q> <iflags>
where:
<effect> Specifies the effect required on PRIMASK and FAULTMASK. This is one of:
IE Interrupt Enable. This sets the specified bits to 0.
ID Interrupt Disable. This sets the specified bits to 1.
<q> See Standard assembler syntax fields on page A7-207. A CPS instruction must be
unconditional.
<iflags> Is a sequence of one or more of the following, specifying which masks are affected:
i PRIMASK. Raises the execution priority to 0 when set to 1. This is a 1-bit
register, that supports privileged access only.
f FAULTMASK. Raises the execution priority to -1 (the same as HardFault)
when it is set to 1. This is a 1-bit register, that can only be set to 1 by privileged
code with a lower priority than -1. The register clears to 0 on return from any
exception other than NMI.

Masks and CPS
The CPSIE and CPSID instructions are equivalent to using an MSR instruction:
• The CPSIE i instruction is equivalent to writing a 0 into PRIMASK
• The CPSID i instruction is equivalent to writing a 1 into PRIMASK
• The CPSIE f instruction is equivalent to writing a 0 into FAULTMASK
• The CPSID f instruction is equivalent to writing a 1 into FAULTMASK.

Цитата:
B5.2.3 MSR
Move to Special Register from ARM Register moves the value of a general-purpose register to the selected
special-purpose register.

__disable_irq выливается в __ASM volatile ("cpsid i" : : : "memory"); и далее The CPSID i instruction is equivalent to writing a 1 into PRIMASK

__set_PRIMASK(0) естестно пишет в PRIMASK нуль ...

Как то так.
5 минут 24 сек затрачено...

Последний раз редактировалось dosikus; 20.04.2017 в 14:24.
dosikus вне форума   Ответить с цитированием
Старый 20.04.2017, 15:19   #17
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 45
Сообщений: 3,484
Вес репутации: 5450/125
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: STM32F7 Bootloader

Цитата:
Сообщение от DimaS Посмотреть сообщение
Да я-то заглядывал, я по сути не очень пойму - и то и другое запрещает прерывания.
Дык что ни *** они не эквиваленты .

Цитата:
__enable_irq() эквивалент __set_PRIMASK(0)


__disable_irq() эквивалент __set_PRIMASK(1)
dosikus вне форума   Ответить с цитированием
Старый 21.04.2017, 00:24   #18
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,284
Вес репутации: 1614/62
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: STM32F7 Bootloader

Т.е. получается, что я не запрещал а наоборот, разрешал прерывания?
Тогда тем более непонтно, почему оно работало.
DimaS вне форума   Ответить с цитированием
Старый 21.04.2017, 00:27   #19
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,284
Вес репутации: 1614/62
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: STM32F7 Bootloader

Цитата:
Сообщение от Romantic Посмотреть сообщение
Иначе мы должны лезть по докам и кодить
Т.е. вы никогда не писали бутлоадеров?
DimaS вне форума   Ответить с цитированием
Старый 21.04.2017, 01:44   #20
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 32
Сообщений: 2,081
Вес репутации: 3340/90
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Re: STM32F7 Bootloader

Цитата:
Сообщение от DimaS Посмотреть сообщение
Т.е. вы никогда не писали бутлоадеров?
Т.е. Вы редко читаете RM...
Romantic вне форума   Ответить с цитированием
Старый 21.04.2017, 10:42   #21
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,284
Вес репутации: 1614/62
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: STM32F7 Bootloader

Цитата:
Сообщение от Romantic Посмотреть сообщение
Т.е. Вы редко читаете RM...
Там написано как делать бутлоадеры?
Может покаждете где именно, а то я не нашел.А еще лучше - работающий пример из Вашего бутлоадера, для L1.
Это было бы намного лучше, чем постоянно поливать помоями "калокуб" и иже с ним.

Ну да, я действительно перепутал агрумент у _set_PRIMASK, поскольку никогда раньше им не пользовался- всегда хватало disable_irq(), да и как-то, запрещать прерывания нулем а разрешать единицей - немного более логично, чем наоборот.

Но все это не обьясняет того, почему не работает disable_irq(), а также - почему "прыжок" в аппликацию работает, из бутлоадера с включеннымии прерываниями (а если будет включено не только от SysTick?).
DimaS вне форума   Ответить с цитированием
Старый 21.04.2017, 11:46   #22
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 45
Сообщений: 3,484
Вес репутации: 5450/125
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: STM32F7 Bootloader

Я бы посоветовал - выкосить кал на и отладить на именно простом проекте ...
dosikus вне форума   Ответить с цитированием
Старый 21.04.2017, 11:51   #23
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,284
Вес репутации: 1614/62
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: STM32F7 Bootloader

Так его ("кала") там нет!
См. #10
DimaS вне форума   Ответить с цитированием
Старый 21.04.2017, 12:15   #24
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 45
Сообщений: 3,484
Вес репутации: 5450/125
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: STM32F7 Bootloader

Неожиданно и похоже в тему-
http://forum.easyelectronics.ru/view...497390#p497390
Цитата:
Код:
   __set_MSP(*(volatile unsigned int*) (APP_FLASH_START));
   Jump_To_Application();

и долго искали, почему оно работает только в определенной комбинации компиляторов, их флагов и прочего. Легенды говорят о полугоде, с обращением в поддержку Keil, IAR и ST (сам не видел, это было до моего прихода).

А вот что видим в листинге:


Код:
LDR       R0, [R1]
MSR       MSP, R0
LDR       R0, [R2, #0x4]
POP       {R4, R5}
BX        R0

Внимание на инструкцию POP. И ведь и компилятор в своем праве.

Я это безобразие поменял на (синтаксис IAR):

Код:
  volatile uint32_t* appBegin = (volatile uint32_t*)APP_FLASH_START;
  uint32_t stackPointer = *appBegin;
  uint32_t startProgram = *(appBegin+1);

  __asm volatile(
    "msr msp, %0\n\t"     // set stack pointer
    "bx %1\n\t"           // jump to program start
    :
    : "r"(stackPointer), "r"(startProgram)
  );
И никаких чудес больше.
dosikus вне форума   Ответить с цитированием
Старый 21.04.2017, 14:00   #25
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,284
Вес репутации: 1614/62
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: STM32F7 Bootloader

Я попробую на след. неделе Ваш вариант.
Но в моем варианте никакого "РОР" небыло:
Код:
    __disable_irq();
    0x8000c94: 0xb672         CPSID     i
    SCB->VTOR = APPLICATION_ADDRESS;
    0x8000c96: 0x490c         LDR.N     R1, [PC, #0x30]         ; 0xe000ed08 (-536810232)
    0x8000c98: 0x480c         LDR.N     R0, [PC, #0x30]         ; 0x8002000 (134225920)
    0x8000c9a: 0x6008         STR       R0, [R1]
    JumpAddress = *(__IO uint32_t*)(APPLICATION_ADDRESS + 4);
    0x8000c9c: 0x490c         LDR.N     R1, [PC, #0x30]         ; JumpToApplication
    0x8000c9e: 0x6842         LDR       R2, [R0, #0x4]
    0x8000ca0: 0x604a         STR       R2, [R1, #0x4]
    JumpToApplication = (pFunction)JumpAddress;
    0x8000ca2: 0x684a         LDR       R2, [R1, #0x4]
    0x8000ca4: 0x600a         STR       R2, [R1]
    __set_MSP(*(__IO uint32_t*)APPLICATION_ADDRESS);
    0x8000ca6: 0x6800         LDR       R0, [R0]
    0x8000ca8: 0xf380 0x8808  MSR       MSP, R0
    JumpToApplication();
    0x8000cac: 0x4610         MOV       R0, R2
    0x8000cae: 0x4700         BX        R0
DimaS вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
USB HID BOOTLOADER PIC24FJ128GB106 Brainiac Продукция MICROCHIP 8 19.04.2016 09:00
HID Bootloader для PIC24F256DA210 abarmail Продукция MICROCHIP 11 14.01.2014 10:41
К готовому проекту "присоединить" bootloader vladtv Продукция MICROCHIP 2 19.02.2011 16:12
Microchip USB HID Bootloader v2.6a, зависание. Specialist Продукция MICROCHIP 23 18.10.2010 20:11
Помогите написать самому Bootloader на С! phase Продукция MICROCHIP 2 28.04.2009 12:11


Часовой пояс GMT +3, время: 18:39.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot