Перейти к содержанию
    

А кто нибудь для 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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Разработчики определили стек как 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к - мне шиковать нечем...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем точно - минимум 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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

FREERTOS_STM32F100_EXAMPLE_IAR552.rar

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

 

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

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

 

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

 

 

2 klen

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...