реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32F4+FreeRTOS+Keil=HardFault
Marto
сообщение Jun 9 2013, 18:04
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 103
Регистрация: 17-05-09
Из: Ижевск
Пользователь №: 49 190



Здравствуйте, имею следующую проблему
на stm32f4-discovery пытаюсь запустить FreeRTOS, компилятор - keil.

Если шедулер пустой - все работает.

Если создаю какой-либо таск - проц улетает в HardFault.
Например вот так:
Код
#include "stm32f4xx.h"
#include "FreeRTOS.h"
#include "task.h"

void vInitGPIO(void *pvParameters);
int main()
{
  xTaskCreate(vInitGPIO,(signed char*)"LED1",configMINIMAL_STACK_SIZE,NULL,2,(xTaskHandle*)NULL);
  vTaskStartScheduler();
  for(;;){}
  return 1;
}
void vInitGPIO(void *pvParameters)
{
  GPIO_InitTypeDef gpio_init;
  RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOD, ENABLE);
  gpio_init.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14| GPIO_Pin_15;
  gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
  gpio_init.GPIO_Mode = GPIO_Mode_OUT;
  gpio_init.GPIO_PuPd = GPIO_PuPd_DOWN;
  GPIO_Init(GPIOD, &gpio_init);
}

размер стека задачи
Код
#define configMINIMAL_STACK_SIZE        ( ( unsigned short ) 130 )

размер стека контроллера
Код
Stack_Size      EQU     0x00000200


Ходил отладчиком по диспетчеру - вывалится может в любом месте.
Кто сталкивался?
на 100-ой серии FreeRTOS юзаю без проблем. а здесь какое-то попадалово, может есть какие либо нюансы, о которых следует знать?


--------------------
Шизоидный холерик
Go to the top of the page
 
+Quote Post
Xeon
сообщение Jun 9 2013, 18:09
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 140
Регистрация: 21-04-11
Пользователь №: 64 524



Сразу сказать не могу, скинь проект гляну, если хочешь могу скинуть тебе свой проект под эту платку там все работает.
Go to the top of the page
 
+Quote Post
Marto
сообщение Jun 9 2013, 18:42
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 103
Регистрация: 17-05-09
Из: Ижевск
Пользователь №: 49 190




Если Вас не затруднит, скиньте пожалуйста шаблон проекта. Постараюсь "найти 10 отличий".[code][/code]


--------------------
Шизоидный холерик
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 9 2013, 20:20
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



А в чём задаётся стек? Если в байтах, то его маловато. Там вместе с плавучими регистрами 200 байт только контекста набегает.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Marto
сообщение Jun 10 2013, 03:58
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 103
Регистрация: 17-05-09
Из: Ижевск
Пользователь №: 49 190



В байтах. Пробовал делать 0x0000A00. Результат тотже.
А как получается 200? 16 в ядре, 64 в fpu?, 4 системных, итого 84...


--------------------
Шизоидный холерик
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 10 2013, 06:06
Сообщение #6


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



16 регистров общего назначения
+ 32 плавучих регистра
+ EXC_RETURN
+ FPSCR
-----
итого: 50 регистров, каждый по 4 байта = 200 байтов.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Marto
сообщение Jun 10 2013, 07:15
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 103
Регистрация: 17-05-09
Из: Ижевск
Пользователь №: 49 190



точноsm.gif хех, стереотипыsm.gif


--------------------
Шизоидный холерик
Go to the top of the page
 
+Quote Post
DASM
сообщение Jun 10 2013, 07:37
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Floating Point сопроцессор включили аппаратно ?
Go to the top of the page
 
+Quote Post
Marto
сообщение Jun 10 2013, 07:42
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 103
Регистрация: 17-05-09
Из: Ижевск
Пользователь №: 49 190



Эмммм... нет. Это обязательно? Даже если я с ним работать не собираюсь пока.


--------------------
Шизоидный холерик
Go to the top of the page
 
+Quote Post
DASM
сообщение Jun 10 2013, 07:49
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Ну как только проц встретит первую попавшуюся команду для сопроцессора он вывалится в фалт. Вам чего - сложно один битик в регистре поставить ? Я на Дискавери с таким фалтом в первые же пять минут после включения примера попал. Вы то работать с ним не собираетесь, а вот компилятор - может и собраться
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 10 2013, 07:53
Сообщение #11


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Или же можно компилить под M4 просто (без F), тогда плавучих инструкций не будет.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 10 2013, 09:47
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Еще можно обратить внимание на регистры NVIC->IP, NVIC->IPR.
Они отвечают за приоритет прерываний.
Go to the top of the page
 
+Quote Post
_NB
сообщение Jun 10 2013, 14:37
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 92
Регистрация: 22-06-05
Из: Украина, г.Боярка
Пользователь №: 6 238



[quote name='Marto' date='Jun 9 2013, 21:04' post='1168586']
Код
...
  xTaskCreate(vInitGPIO,(signed char*)"LED1",configMINIMAL_STACK_SIZE,NULL,2,(xTaskHandle*)NULL);
  vTaskStartScheduler();


Задача должна быть "зациклена"

Код
void vInitGPIO(void *pvParameters)
{
  GPIO_InitTypeDef gpio_init;

while(1) {
//------------------------------------------------
  RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOD, ENABLE);
  gpio_init.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14| GPIO_Pin_15;
  gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
  gpio_init.GPIO_Mode = GPIO_Mode_OUT;
  gpio_init.GPIO_PuPd = GPIO_PuPd_DOWN;
  GPIO_Init(GPIOD, &gpio_init);
//------------------------------------------------
}
}

Go to the top of the page
 
+Quote Post
Marto
сообщение Jun 12 2013, 13:19
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 103
Регистрация: 17-05-09
Из: Ижевск
Пользователь №: 49 190



Благодарю всех за помощь. В частности ув. DASM, проблема действительно была в выключенном FPU микроконтроллера.
зы. FreeRTOS под STM32F4 юзает команды для работы с сопроцессором. без поддержки FPU в компиляторе, проект просто не соберется.


--------------------
Шизоидный холерик
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.0212 секунд с 7
ELECTRONIX ©2004-2016