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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> HardFault на операциях с double
dimka76
сообщение Sep 22 2010, 04:30
Сообщение #16


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(klen @ Sep 21 2010, 15:38) *
глубина стека потребная для вызова вашей функции - 20 байтов, прогнал на всех значениях для входного параметра, у меня все работает.


Вы на каком контроллере пробовали ? В железе или в симуляторе?


Цитата(GetSmart @ Sep 22 2010, 08:28) *
Разве под отладчиком нельзя найти место "сваливания"?


Нету у меня отладчика crying.gif

Да и как я писал выше, тот же проект собранный в IAR замечательно работает.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
klen
сообщение Sep 22 2010, 10:03
Сообщение #17


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(dimka76 @ Sep 22 2010, 08:30) *
Вы на каком контроллере пробовали ? В железе или в симуляторе?

проверял на stm32f103
от контроллера целевой код независит - ядро одно и библиотеки одни, разница только в инициализации микросхемы
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 22 2010, 10:57
Сообщение #18


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(klen @ Sep 22 2010, 14:03) *
проверял на stm32f103
от контроллера целевой код независит - ядро одно и библиотеки одни, разница только в инициализации микросхемы


А можно на ваш пример посмотреть?
Особенно интересуют startup, скрипт линкера и makefile.

можно на почту dimka76<собака>rambler.ru


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 24 2010, 09:56
Сообщение #19


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Удалось решить проблему.

Собрал свой проектик в Keil, настроил Keil на GCC компилятор. Скомпилировал и все заработало.
Посмотрел какие ключи компилятора и линкера генерит Keil.
Вставил их в свой makefile и порядок.

Вот исходный фрагмент моего makefile
Код
OPTIMIZATION = -Os
CFLAGS = -mcpu=cortex-m3 -mthumb -Wall -g $(OPTIMIZATION) $(INCLUDES) -DSTM32F10X_MD
LDFLAGS = -Wl,--gc-sections,-Map=$@.map,-cref,-u,Reset_Handler -T STM32.ld


а вот с исправлениями из Keil

Код
CFLAGS = -c -mcpu=cortex-m3 -mthumb -Wall -gdwarf-2 -Os -mapcs-frame
CFLAGS += $(INCLUDES)
CFLAGS += -Wall

LDFLAGS = -T link.ld -mcpu=cortex-m3 -mthumb -nostartfiles -Wl,-Map=.map -lm


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 24 2010, 11:39
Сообщение #20


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(dimka76 @ Sep 24 2010, 13:56) *
Код
LDFLAGS = ... -nostartfiles... -lm

1.У Вас что, стартап собственный?
2. lm - линкует математику, при чем тут плавучка? smile3046.gif
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 24 2010, 12:01
Сообщение #21


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(_Pasha @ Sep 24 2010, 15:39) *
1.У Вас что, стартап собственный?
2. lm - линкует математику, при чем тут плавучка? smile3046.gif


Да, собственный StartUp.

А плавучка разве не математика.
Это целые для регистров могут быть использованы, а плавучка исключительно для математики.

Может тут еще сыграло роль указание для линкера -mcpu=cortex-m3 -mthumb

Я больше с ключами не игрался, заработало и хорошо )))


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
klen
сообщение Sep 24 2010, 12:45
Сообщение #22


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



-mcpu=cortex-m3 -mthumb

это никак не могло сыграть, во первых эти ключи одинаковые и там и там, во вторых если убрать -mthumb вы вообще кода не полуцчите - компиллер скажет что М3 не поддерживает арм32 интсрукции только тумб.


а вот -nostartfiles должен быть в обязательном порядке, для каждого ядра нада настраивать crt код индивидуельно, еще символы в скрипте линкера коррелируют этим кодом. а если подлинковать непонятно что в качестве crt кода - это то что лежит в пакете по умолчанию то получиш ЧТОТО. если не добавлять -nostartfiles то прилинкуется crt0.o вместо Вашего кода

както мы это незаметили. попробуйте убрать -nostartfiles, должно получится глюк как прежде. даю прогноз 56% smile.gif

PS: компиллер как обычно - не виноват
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 24 2010, 12:52
Сообщение #23


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(klen @ Sep 24 2010, 16:45) *
а вот -nostartfiles должен быть в обязательном порядке, для каждого ядра нада настраивать crt код индивидуельно, еще символы в скрипте линкера коррелируют этим кодом. а если подлинковать непонятно что в качестве crt кода - это то что лежит в пакете по умолчанию то получиш ЧТОТО. если не добавлять -nostartfiles то прилинкуется crt0.o вместо Вашего кода

както мы это незаметили. попробуйте убрать -nostartfiles, должно получится глюк как прежде. даю прогноз 56% smile.gif

PS: компиллер как обычно - не виноват


Возможно. Но до того как я добавил этот ключ и не использовал double все работало и прерывания и глубина вызовов была в несколько функций с аргументами, т.е. я хочу сказать, что стек не рушился. А как появились double, то начались Exaption.

Как нибудь еще попробую поиграться с -nostartfiles и -lm.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Sep 24 2010, 13:41
Сообщение #24


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(dimka76 @ Sep 24 2010, 16:01) *
А плавучка разве не математика.
Это целые для регистров могут быть использованы, а плавучка исключительно для математики.

плавучка сама по себе, а математика - это синусы-логарифмы и дробные степени


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 25 2010, 03:47
Сообщение #25


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Поэкспериментировав с ключиками линкера выяснил, что определяющими являются ключи -mcpu=cortex-m3 -mthumb.
Без них на операциях с double попадает в HardFault.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
klen
сообщение Sep 25 2010, 06:39
Сообщение #26


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(dimka76 @ Sep 25 2010, 07:47) *
Поэкспериментировав с ключиками линкера выяснил, что определяющими являются ключи -mcpu=cortex-m3 -mthumb.
Без них на операциях с double попадает в HardFault.


бред какойто, я лично никакой прямой связи между выбором набора инстркций CPU и библиотечными функцийями арифметики не вижу. ошибка в другом. если вы скомпилируете код без -mcpu=cortex-m3 -mthumb то кортекс-м3 вы этот код вообще не можете использовать - он в вылетит в эксепшен потому что не сможет исполнить первую инструкцию не Tumb2. но я такой случай даже не расматривал - это тривиально: козлу капусту кормим а не телячие маслы для волка.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 25 2010, 06:47
Сообщение #27


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(klen @ Sep 25 2010, 10:39) *
бред какойто, .....


Может и бред, но у меня так получилось.

Если вам интересно докопаться до истины, то можете взглянуть на мой изначальный проект, в котором у меня все кроме double работало и который я выкладывал здесь


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post

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

 


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


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