kan35 7 26 ноября, 2010 Опубликовано 26 ноября, 2010 · Жалоба В общем, может быть кто то собрал рабочий шаблон на 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 В общем... куда копать - не понимаю пока... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 26 ноября, 2010 Опубликовано 26 ноября, 2010 · Жалоба ну вроде замигали светодиоды.. Если нужен шаблон проекта - обращайтесь. А вот теперь такой вопрос: Разработчики определили стек как 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к - мне шиковать нечем... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 26 ноября, 2010 Опубликовано 26 ноября, 2010 · Жалоба В общем точно - минимум 128 32-битных слов (512 байт) для задачи по-умолчанию.. Почему так много, как проконтроллировать заполнение стека?.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 30 ноября, 2010 Опубликовано 30 ноября, 2010 · Жалоба В общем точно - минимум 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 второй - функция позволяющая смотреть верхнюю планку использования стека, позволяет полсе прогона всех ситуация оценить сколько максимум стека требуется задаче. третье - обработчик ситуации при которой задача вылезла из своего стека , в этом месте можно увидеть кто глюканул и как это произошло, по результатам анализа принять решения что делать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex300176 0 11 декабря, 2010 Опубликовано 11 декабря, 2010 · Жалоба ну вроде замигали светодиоды.. Если нужен шаблон проекта - обращайтесь. Столкнулся с такой же проблемой. У меня тоже после запуска шедулера вылетает в HardFault. Подскажите, пожалуйста, как удалось решить проблему. Шаблон был бы весьма кстати. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 16 декабря, 2010 Опубликовано 16 декабря, 2010 · Жалоба Столкнулся с такой же проблемой. У меня тоже после запуска шедулера вылетает в HardFault. Подскажите, пожалуйста, как удалось решить проблему. Шаблон был бы весьма кстати. FREERTOS_STM32F100_EXAMPLE_IAR552.rar В этом проекте немного есть моего кода, будет понятно как его убрать, а мне - лень. Проект компилится как на С так и на С++, что меня очень радует:-). В общем, проблема была в основном с корректной установкой прерываний. Асемблерные вставки это и есть прерывания, а я их вызывал из стандартных обработчиков, это по непониманию я делал... Для поддержки С++ надо еще кое какие переопределения было сделать и обработчики прерываний объявить как <<extern "C">> иначе они не монтировались в С++ компиляции. Если найдете ошибку или какую проблему - прошу сообщить :smile3046: сюда 2 klen к сожалению, потерял пароль к ftp. Устойчиво помню, что мне давали доступ, но было это года 4 назад и активно я им не пользовался. Как восстановить пароль? Спасибо за ответ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться