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

 
 
 
Reply to this topicStart new topic
> Stm32F4Discovery+STM32F10xxx Speex library
Alex_Vas
сообщение Mar 20 2014, 10:47
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 20-03-14
Пользователь №: 81 009



Пытаюсь «соединить» Stm32F4Discovery и STM32F10xxx Speex library (AN2812) в Coocox, взяв за основу проект из http://habrahabr.ru/post/146501/(Распознавание речи на STM32F4-Discovery – создан в IAR).

«Затык» происходит на стадии инициализации энкодера – при вызове функции

enc_state = speex_encoder_init(&speex_nb_mode);

точнее - в speex_alloc_scratch(…) при выполнении

calloc(size,1); где size=3000 – это SPEEXENC_SCRATCH_STACK_SIZE.

Подскажите, где искать причину. Быть может не указаны какие-либо параметры компилятора?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 20 2014, 10:57
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



В чем выражается "затык"?

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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Mar 20 2014, 15:46
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Я запускал этот кодек. Там точно кучу надо увеличивать и прилично. Что то около 30 килобайт надо.
Go to the top of the page
 
+Quote Post
Alex_Vas
сообщение Mar 21 2014, 14:31
Сообщение #4





Группа: Новичок
Сообщений: 3
Регистрация: 20-03-14
Пользователь №: 81 009



В результате экспериментов обнаружил, что функция calloc(size,1) на STM32F4-Discovery при size=2000 еще работает, а при size=3000 - уже нет ( вылетает в Default_Handler() - более детально пока не разбирался.
Заменил на malloc() - вроде заработало. Правда, пришлось подправить код, т. к. она не обнуляет данные в выделенной памяти, а Speex library этого требует.
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Mar 22 2014, 09:00
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Надо было просто в файле startup_stm32f40xx.s увеличить Heap_size.
Go to the top of the page
 
+Quote Post
Alex_Vas
сообщение Mar 23 2014, 08:58
Сообщение #6





Группа: Новичок
Сообщений: 3
Регистрация: 20-03-14
Пользователь №: 81 009



Цитата(vlad_new @ Mar 22 2014, 12:00) *
Надо было просто в файле startup_stm32f40xx.s увеличить Heap_size.


Спасибо за подсказку.
Прошу прощения за безграмотность (STM32 - в стадии освоения). Проект сделан в Coocox - е и с использованием CMSIS_BOOT, Там startup_stm32f40xx.С, где нет возможности поменять Heap_size (или я просто не нашел?). Однако, увеличение размера стека (STACK_SIZE) возимело положительное действо - Speex вроде бы заработал...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:51
Рейтинг@Mail.ru


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