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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Настройка GCC компилятора для CortexM4, Какой ключ указать, чтобы использовать DSP инструкции
demiurg_spb
сообщение Dec 18 2013, 09:44
Сообщение #16


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(sidy @ Dec 18 2013, 11:32) *
Что нужно сделать чтобы данные функции вызывались нормально.
правильно подключить библиотеку CMSIS.
Например, для stm32f10x это делается подключение заголовочного файла
Код
stm32f10x.h
, который подтягивает за собой всё необходимое, а вы, видимо, напрямую подключаете
Код
core_cmInstr.h
, что идеологически неверно...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sidy
сообщение Dec 18 2013, 09:55
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Цитата(demiurg_spb @ Dec 18 2013, 13:44) *
правильно подключить библиотеку CMSIS.
Например, для stm32f10x это делается подключение заголовочного файла

Спасибо, помогло.
Go to the top of the page
 
+Quote Post
ig_z
сообщение Dec 18 2013, 10:13
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551



QUOTE (sidy @ Dec 18 2013, 09:32) *
И как теперь мне определить адрес из которого попали в HardFault?


В местной файлохранилке есть книга из которой выдран пример вашего фаулт обработчика. Там всего несколько страниц очень понятного объяснения. Настоятельно рекомендую прочесть. Здесь на форуме давали ссылку на пример использования фаулт обработчика для поиска места сбоя. В качестве подопытного примера использовалось деление на ноль.
В вашем случае нужно смотреть окрестности 0x0000A74A.
Go to the top of the page
 
+Quote Post
sidy
сообщение Dec 24 2013, 12:32
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Еще один вопрос: использую компилятор gcc, смотрю дизассемблер и вижу следующую строку:
08002a56: ; <UNDEFINED> instruction: 0x47c3
Т.е. получается какая-то инструкция не определена? И что это значит?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 24 2013, 13:37
Сообщение #20


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(sidy @ Dec 24 2013, 16:32) *
В этом месте могут быть данные, а не инструкции.
Также, возможно, что это глюк дизассемблера.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sidy
сообщение Dec 25 2013, 05:17
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Поймал HardFault еще раз с помощью функции __get_MSP() взял адрес, 0x200098B0 посмотрел map файл, с 0x200019b0 по 0x200099b0 у меня находится стек длиной 8k слов. Адрес взятый при попадании в HardFault находится в стеке, значит получается у меня проблемы со стеком? Возможно нужно увеличить его размер?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 25 2013, 08:33
Сообщение #22


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(sidy @ Dec 25 2013, 09:17) *
Странные рассуждения...
Из стека у вас вряд ли выполнялась программа. Т.к. на стеке в нормальной ситуации могут быть лишь локальные данные.
Сдаётся мне, что вы неверно раскрутили эту ситуацию.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sidy
сообщение Dec 25 2013, 09:50
Сообщение #23


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Цитата(demiurg_spb @ Dec 25 2013, 12:33) *

Функция get_MSP вернула мне такой адрес. А данный адрес попадает в диапазон адресов стека.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 25 2013, 09:56
Сообщение #24


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(sidy @ Dec 25 2013, 13:50) *
Функция get_MSP вернула мне такой адрес. А данный адрес попадает в диапазон адресов стека.
А теперь подумайте. Это хорошо или плохо.
А когда созреете дайте развёрнутый ответ.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sidy
сообщение Dec 27 2013, 06:15
Сообщение #25


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Цитата(demiurg_spb @ Dec 25 2013, 13:56) *
А теперь подумайте. Это хорошо или плохо.
А когда созреете дайте развёрнутый ответ.

В том то и дело, что непонятно хорошо или плохо - я не знаю что с этим делать и нигде не могу найти информацию по этому поводу. Допустим когда использую функцию get_MSP в основной программе то получаю содержимое r2, но никак не адрес из диапазона адресов стека.
P.S. вот тут нашел похожее:
http://electronix.ru/forum/lofiversion/index.php/t72471.html
В той теме в последнем сообщении говорится, что стек пересчитывается, мне не совсем понятно как.

Сообщение отредактировал sidy - Dec 27 2013, 06:40
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 27 2013, 07:26
Сообщение #26


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(sidy @ Dec 27 2013, 10:15) *

http://infocenter.arm.com/help/index.jsp?t...403c/index.html


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sidy
сообщение Dec 27 2013, 11:09
Сообщение #27


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Спасибо, руководство я уже скачал изучаю.
Вроде бы начало что-то получаться: сейчас записал в обработчике HardFault регистр PC, в нем содержится адрес 0х08001ас0. Но по этому адресу я криминала не вижу:
Прикрепленное изображение

Еще я посмотрел регистр SCB->CFSR, в нем установлены биты PRECISERR и BFARVALID, а в регистре BFAR содержится адрес 0x268dfb8, который как следует из руководства должен показывать место откуда произошел BUSFAULT. Но пока непонятно как можно связать 0х08001ас0 и 0x268dfb8.
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Dec 27 2013, 13:36
Сообщение #28


Профессионал
*****

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



Он будет указывать не на место, где произошло падение, а немного вперед, т.к. конвеер. На сколько именно - надо смотреть в мануале. Скорее всего падает на push'е.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
sidy
сообщение Jan 11 2014, 05:55
Сообщение #29


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Тестирую свою программу дальше и заметил, что при HardFault в регистре BFAR содержится почти всегда разные адреса, потом я сопоставил когда это возникло, и вспомнил что у меня DMA обслуживает передачу данных из АЦП в память, и после добавления трех каналов в АЦП и соответственно трех элементов в массив, куда идет пересылка с помощью DMA стал появляться HardFault. Может это быть как-то взаимосвязано, и может кто-нибудь уже сталкивался с таким явлением?
Go to the top of the page
 
+Quote Post
sidy
сообщение Jan 17 2014, 05:42
Сообщение #30


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Поймал еще несколько раз Hard Fault. В регистре PC обычно содержатся разные адреса последний раз при hard fault там был адрес 0х080046EC:
Прикрепленное изображение

В регистре SCB->CFSR, всегда устанавливаются биты PRECISERR и BFARVALID.
В регистре BFAR который содержится адрес откуда произошел BUSFAULT тоже разные значений последний раз там было значение 0х4B404288.
Куда мне смотреть дальше?
Go to the top of the page
 
+Quote Post

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

 


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


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