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

 
 
> STM32F100 и проблемы с FPU, Не понятно как настроить FPU
Evgeniy Lipunov
сообщение Apr 24 2014, 04:36
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 1-07-08
Из: Челябинск
Пользователь №: 38 668



Добрый день уважаемые форумчане.

Разбираюсь с STM32F100RB, а именно с STM32VLDISCOVERY. Воспользовался портом RTOS взятым тут: https://bitbucket.org/KilleRMill/stm32f107vc_freertos_gcc
Использую Eclipse. импортировал проект, к уарту прикрутил 1-wire DS18B20, попробовал сделать несколько задач, синхронизацию между ними - все шикарно, все работает как нужно.

Как только коснулся использования float, встал и не могу третий день сдвинуться с места.
К примеру, хотел сохранить полученное значение температуры следующим образом:
Код
float temp;
uint8_t scratchpad[9];
...
temp = *(int16_t*)(scratchpad) / 16.0;
...

вроде все просто и понятно. Но при заливке и попытке отладки, программа перестает работать.

однако, если сделать так
Код
float temp,tempmul=16.0;
uint8_t scratchpad[9];
...
temp = *(int16_t*)(scratchpad) / tempmul;
...


то все работает.
Странно, подумал я, и забил на некоторое время.
Дальше больше - выяснилось, что при попытке сравнить две переменные типа float я получаю практически идентичный эффект:
Код
float f1=2.0,f2=3.0;
...
if (f1>f2) vTaskDelay(100); // либо любое другое действие, не важно
...

просто вставив это в код программы, я получаю "кирпич".
На сколько я понял, иногда перестают работать прерывания (при этом в задачах freeRTOS'a жизнь вертится), иногда все встает непонятным образом.

Перепробовал кучу комбинаций -mfpu=XXXX -msoft-float -mfloat-abi=ХХХХ без видимого эффекта.

Для меня вообще не понятная проблема. Прошу помощи.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
andrewlekar
сообщение Apr 24 2014, 09:56
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



В FreeRTOS если не ошибаюсь, стеки для задач выделялись через malloc, то есть в куче. Проверьте, используется ли у вас куча и выделена ли для неё память.
Go to the top of the page
 
+Quote Post
Evgeniy Lipunov
сообщение Apr 24 2014, 10:34
Сообщение #3





Группа: Новичок
Сообщений: 5
Регистрация: 1-07-08
Из: Челябинск
Пользователь №: 38 668



Цитата(andrewlekar @ Apr 24 2014, 12:56) *
В FreeRTOS если не ошибаюсь, стеки для задач выделялись через malloc, то есть в куче. Проверьте, используется ли у вас куча и выделена ли для неё память.


FreeRTOSConfig.h
Код
#define configMINIMAL_STACK_SIZE        ( ( unsigned short ) 64 )
#define configTOTAL_HEAP_SIZE            ( ( size_t ) ( 4 * 1024 ) )


heap_2.c
Код
/* Allocate the memory for the heap. */
static unsigned char ucHeap[ configTOTAL_HEAP_SIZE ];


Выделена. Используется heap_2 (там вроде были варианты, посмотрю в чем разница, попробую использовать другие менеджеры)

Проблема после изменения скрипта, к сожалению, не исчезла.

Попробовал ипользовать heap_1.c - никакой разницы, тот же эффект.

Вставлял
Код
if (flo1>=flo2) vTaskDelay(10);
после запуска шедулера (т.е. код никогда не будет выполнен) - тоже перестает работать. Ничего не понимаю...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th August 2025 - 01:11
Рейтинг@Mail.ru


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