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

 
 
 
Reply to this topicStart new topic
MaxEngee
сообщение Dec 20 2008, 13:23
Сообщение #1


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

Группа: Свой
Сообщений: 120
Регистрация: 17-03-07
Из: Беларусь, Минск
Пользователь №: 26 249



Пытаюсь работать с библиотекой Speex.
Она использует calloc.
Проект компилируеться но при попытке отладить дело не даходит даже до main.

Проблема:
если в main используеться хоть одна библитечная функция после выполнения
; Enter the C code

IMPORT __main
LDR R0, =__main
BX R0

все вылетает в swi_handler

Если из main исключить все функции speex --> все OK

Я подозреваю что все дело в calloc. Только не пойму как что связанно.
Go to the top of the page
 
+Quote Post
ssergy
сообщение Dec 20 2008, 17:51
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 29-01-06
Пользователь №: 13 730



Скорее всего HEAP отсутствует или малого размера (см. Startup.s)
Go to the top of the page
 
+Quote Post
MaxEngee
сообщение Dec 22 2008, 07:24
Сообщение #3


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

Группа: Свой
Сообщений: 120
Регистрация: 17-03-07
Из: Беларусь, Минск
Пользователь №: 26 249



Цитата(ssergy @ Dec 20 2008, 21:51) *
Скорее всего HEAP отсутствует или малого размера (см. Startup.s)


Куча достаточного размера и вылет в SWI происходит до входа в main
Go to the top of the page
 
+Quote Post
MaxEngee
сообщение Dec 22 2008, 10:33
Сообщение #4


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

Группа: Свой
Сообщений: 120
Регистрация: 17-03-07
Из: Беларусь, Минск
Пользователь №: 26 249



Ну кто то же должен был сталкиваться с такой проблемой.

Если в майне закоментировать все вызовы функций библотеки Speex --> все ок, отладчик заходит до мэйн.
Если хоть одну функцию вызвать отладчик вылетает в SWI_handler.

Пытался отслеживать что происходит по дисасемблеру:
после:
IMPORT __main
LDR R0, =__main
BX R0

отладчик переходит на инициализацию стэка:
__scatterload_zeroinit

крутит команды:
0x0000019C E2522010 SUBS R2,R2,#0x00000010
0x000001A0 28A10078 STMCSIA R1!,{R3-R6}
0x000001A4 8AFFFFFC BHI 0x0000019C

Далее инициализация кучи
__rt_stackheap_init:

потом долго бегает по коду и в разделе _memset_w:
доходит до команды

0x0000F3F4 DFAB SWI 0xAB <<<------------------------ тоесть сам вызывает софт прерывание
0x0000F3F6 B003 ADD SP,#0x000C
0x0000F3F8 BC08 POP {R3}
0x0000F3FA 4718 BX R3
_sys_close:

и какова спрашиваеться хр--на в стартапе идет вызов софт прерывания??? как будто операционка прикручена

Еще пробегает мимо секции типа - _mutex_init maniac.gif

Что то мне подсказало подключить retarget.c и ....
все заработало

Дааа чего то я не доганяю

Сообщение отредактировал MaxEngee - Dec 22 2008, 10:08
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 23 2008, 07:47
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



В форуме Keil было на эту тему:

http://www.keil.com/forum/docs/thread13855.asp

Советую посмотреть пост товарища Franc Urbanc внизу, там он объясняет подоплёку данного феномена.
Go to the top of the page
 
+Quote Post

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

 


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


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