Jump to content

    
Sign in to follow this  
Aleksandr Baranov

STM32 bootloader и FreeRtos

Recommended Posts

Здравствуйте.

У меня evaluation kit с процессором STM32F103 с FreeRtos. Среда - IAR541.

FreeRtos устойчиво работает, если ее загрузить с адреса 0x8003000 и запустить. Если с адреса 0x8000000 загрузить лоудер, который ничего не делает кроме перехода на FreeRtos - FreeRtos доходит до vTaskStartScheduler(); и попадает в HardFaultException. Если вместо FreeRtos записать простую программу мигания светодиодом - все прекрасно работает.

Вот код функции перехода:

static bool jump_to( unsigned char* dest )
{
   void (*prog_start)(void);

   if (( *(unsigned long*)dest & 0x3FFF8000 ) == 0x20000000 )  // looks like a stack pointer?
   {
       __disable_interrupt();
	SysTick->CTRL &= 0;
	prog_start = (void(*)(void))*(unsigned long*)(dest + 4);      // load program start address
       __MSR_MSP( *(unsigned long*)dest );             // load user stack
       prog_start();                                   // now jump
   }
   return ( false );
}

 

Значение dest - 0x8003000.

 

Функцию я е написал на основе примера из библиотеки STM32.

Что я упустил?

Edited by Aleksandr Baranov

Share this post


Link to post
Share on other sites
Уже получилось. __disable_interrupt() не надо было делать.

Да это не должно влиять вообще - у вас же происходит переход на адрес старта кода, в котором все собственно заново инициализируется.

 

У меня предположение, что не были переназначены местоположения векторов NVIC...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this