Jump to content

    

А кто нибудь для STM32F100 портировал?

В общем, может быть кто то собрал рабочий шаблон на FREERTOS для STM32F10xx и крайне желательно с использованием стандартной периферийной библиотеки 3.x.x.

При запуске шедулера попадаю в HardFault_Handler, а именно после вызова SVC в

vPortStartFirstTask
    /* Use the NVIC offset register to locate the stack. */
    ldr r0, =0xE000ED08
    ldr r0, [r0]
    ldr r0, [r0]
    /* Set the msp back to the start of the stack. */
    msr msp, r0
    /* Call SVC to start the first task. */
    svc 0

В общем... куда копать - не понимаю пока...

Share this post


Link to post
Share on other sites

ну вроде замигали светодиоды..

Если нужен шаблон проекта - обращайтесь.

А вот теперь такой вопрос:

Разработчики определили стек как 128,

...
#define configMINIMAL_STACK_SIZE    ( ( unsigned short ) 128 )
...

это получается, что 128 - это в чем? для STM32 в 32 битных словах? А то что то каждая задачка отъедает кучу памяти почему-то, хотя стеки для них определены как configMINIMAL_STACK_SIZE+50 всего лишь.

 

И количество в куче определяют

...
#define configTOTAL_HEAP_SIZE        ( ( size_t ) ( 3*1024 ) )
...

кратно 1024 (зачем?)

 

У меня 4к - мне шиковать нечем...

Share this post


Link to post
Share on other sites

В общем точно - минимум 128 32-битных слов (512 байт) для задачи по-умолчанию.. Почему так много, как проконтроллировать заполнение стека?..

Share this post


Link to post
Share on other sites
В общем точно - минимум 128 32-битных слов (512 байт) для задачи по-умолчанию.. Почему так много, как проконтроллировать заполнение стека?..

 

1. на фтп сервера есть документ ''USING THE FREERTOS REAL TIME KERNEL"

2. в отношении стеков задач :

....usStackDepth....

....The value specifies the number of words the stack can hold, not the number of

bytes. For example, if the stack is 32 bits wide and usStackDepth is passed in as

100, then 400 bytes of stack space will be allocated (100 * 4bytes). The stack

depth multiplied by the stack width must not exceed the maximum value that can

be contained in a variable of type size_t......

2. uxTaskGetStackHighWaterMark()

3. vApplicationStackOverflowHook( xTaskHandle *pxTask, signed portCHAR *pcTaskName )

 

первй пункт говорит что при создании задачи указывается глубина стека в словах, в нашем случае это 4*n

второй - функция позволяющая смотреть верхнюю планку использования стека, позволяет полсе прогона всех ситуация оценить сколько максимум стека требуется задаче.

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

 

Share this post


Link to post
Share on other sites
ну вроде замигали светодиоды..

Если нужен шаблон проекта - обращайтесь.

Столкнулся с такой же проблемой. У меня тоже после запуска шедулера вылетает в HardFault. Подскажите, пожалуйста, как удалось решить проблему. Шаблон был бы весьма кстати.

Share this post


Link to post
Share on other sites
Столкнулся с такой же проблемой. У меня тоже после запуска шедулера вылетает в HardFault. Подскажите, пожалуйста, как удалось решить проблему. Шаблон был бы весьма кстати.

FREERTOS_STM32F100_EXAMPLE_IAR552.rar

В этом проекте немного есть моего кода, будет понятно как его убрать, а мне - лень. Проект компилится как на С так и на С++, что меня очень радует:-).

 

В общем, проблема была в основном с корректной установкой прерываний. Асемблерные вставки это и есть прерывания, а я их вызывал из стандартных обработчиков, это по непониманию я делал...

Для поддержки С++ надо еще кое какие переопределения было сделать и обработчики прерываний объявить как <<extern "C">> иначе они не монтировались в С++ компиляции.

 

Если найдете ошибку или какую проблему - прошу сообщить :smile3046: сюда

 

 

2 klen

к сожалению, потерял пароль к ftp. Устойчиво помню, что мне давали доступ, но было это года 4 назад и активно я им не пользовался. Как восстановить пароль?

Спасибо за ответ!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this