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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Hard fault на EXTI
pitt
сообщение Oct 18 2015, 16:47
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Использую RTX. Запрограммировал пин на внешнее прерывание(любое измемение). Обрабатываю прерывание простой посылкой сигнала основной системе и взводом прерывания. Работало долго и без проблем. Вдруг стал появляться Hard fault. Вскрытие показало, что плохой коннектор приводит к тому, что пин просто висит в воздухе как антенна. Т.е. я предполагаю, что происходит множество запросов на прерывание, до его обработки. Каким-то образом, это и приводит к Hard fault. Что не так с софтом? Что я недоучел?

Спасибо.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
smalcom
сообщение Oct 18 2015, 18:16
Сообщение #2


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

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



не все флаги может сбрасываете? происходит повторный вход и так до исчерпания памяти.
Go to the top of the page
 
+Quote Post
mantech
сообщение Oct 18 2015, 18:53
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(pitt @ Oct 18 2015, 19:47) *
Вскрытие показало, что плохой коннектор приводит к тому, что пин просто висит в воздухе как антенна.


Вообще-то за такое - 2 по схемотехнике. Нога не должна болтаться в воздухе в 3м состоянии, так и МК запалить - дело секундное.

"Т.е. я предполагаю, что происходит множество запросов на прерывание, до его обработки." - Вообще-то новый запрос прерывания выставляется только после обработки предидущего (сброса флага), а вот вызов процедуры-обработчика будет постоянно, пока флаг не сбросишь, т.е. прога зависнет на обработке прерывания и всего-то biggrin.gif
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 18 2015, 19:20
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(mantech @ Oct 18 2015, 14:53) *
Вообще-то за такое - 2 по схемотехнике. Нога не должна болтаться в воздухе в 3м состоянии, так и МК запалить - дело секундное.

"Т.е. я предполагаю, что происходит множество запросов на прерывание, до его обработки." - Вообще-то новый запрос прерывания выставляется только после обработки предидущего (сброса флага), а вот вызов процедуры-обработчика будет постоянно, пока флаг не сбросишь, т.е. прога зависнет на обработке прерывания и всего-то biggrin.gif

Работаем с тем, что имеем...
От чего-же, все-таки, может вылезти Hard fault? Кстати, это происходит не моментально, а по прошествии некоторого неопределенного времени, но, в конце концов, ВСЕГДА.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 18 2015, 20:01
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(pitt @ Oct 18 2015, 22:20) *
От чего-же, все-таки, может вылезти Hard fault?

Можно строить версии и догадки, а можно обратиться к статусным регистрам и содержимому стека. Второй вариант быстрее и надежнее.
Go to the top of the page
 
+Quote Post
smalcom
сообщение Oct 18 2015, 20:03
Сообщение #6


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

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Цитата
т.е. прога зависнет на обработке прерывания и всего-то

точно. я перепутал.
получается что возможна следующая ситуация: в обработчике прерывания сначала сбрасывается флаг, а потом выполняется какая-то работа. т.о. возможен повторный вызов обработчика.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 18 2015, 20:26
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (mantech @ Oct 18 2015, 21:53) *
Вообще-то за такое - 2 по схемотехнике. Нога не должна болтаться в воздухе в 3м состоянии, так и МК запалить - дело секундное.

Дурость написали.


QUOTE (aaarrr @ Oct 18 2015, 23:01) *
Можно строить версии и догадки, а можно обратиться к статусным регистрам и содержимому стека. Второй вариант быстрее и надежнее.

Именно так.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
mantech
сообщение Oct 18 2015, 20:34
Сообщение #8


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(zltigo @ Oct 18 2015, 23:26) *
Дурость написали.


Дурость- не дурость, а пара МК в свое время сдохла из-за этого.

Цитата(smalcom @ Oct 18 2015, 23:03) *
точно. я перепутал.
получается что возможна следующая ситуация: в обработчике прерывания сначала сбрасывается флаг, а потом выполняется какая-то работа. т.о. возможен повторный вызов обработчика.


В случае вложенных прерываний так и будет.

Сообщение отредактировал mantech - Oct 18 2015, 20:35
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 18 2015, 20:39
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(aaarrr @ Oct 18 2015, 16:01) *
Можно строить версии и догадки, а можно обратиться к статусным регистрам и содержимому стека. Второй вариант быстрее и надежнее.

Можно и даже нужно. Вот только:
- Hard fault viewer чаще всего не дает достаточно информации
- переполнения стека НЕТ и все маркеры на месте
- в пошаговом режиме(break point в обработчике) все работает как часы

Да, прерывания от подвешенной ноги возникают и обрабатываются. Я специально встроил счетчики вошел/обработал и пока нет Hard fault все как и ожидается, а потом вдруг раз и Hard fault ...
Тут-то и нужны версии и догадки...

Сообщение отредактировал pitt - Oct 18 2015, 20:42


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 18 2015, 20:49
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (mantech @ Oct 18 2015, 23:34) *
Дурость- не дурость, а пара МК в свое время сдохла из-за этого.

Смеяться или плакать предлагаете?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 18 2015, 20:55
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(pitt @ Oct 18 2015, 23:39) *
- Hard fault viewer чаще всего не дает достаточно информации

Так возьмите сами. Какая информация нужна - адрес? причина? - все доступно в регистрах и стеке.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 18 2015, 20:58
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (pitt @ Oct 18 2015, 23:39) *
- Hard fault viewer чаще всего не дает достаточно информации

Не порите чушь.
Адрес команды вылета, регистры и стек при вылете получаются вне зависимости ни от каких неведомых "вьюверов".




--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 18 2015, 21:10
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(zltigo @ Oct 18 2015, 16:58) *
Не порите чушь.
Адрес команды вылета, регистры и стек при вылете получаются вне зависимости ни от каких неведомых "вьюверов".

Г.уру, от щедрот переполняющих Вас знаний, не изволили бы Вы обучить порющих чущь Вашему великомудрому умению читать то, что к моему глубокому сожалению, не написано в известной мне документации как, например: link. Кстати, тамже Вам и предоставится шанс познакомиться с "неведомым вьювером".


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 18 2015, 21:21
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(pitt @ Oct 19 2015, 00:10) *
не написано в известной мне документации как, например: link

И что же там не написано?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 18 2015, 21:47
Сообщение #15


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



pitt, посмотрите вот эту тему.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 18 2015, 22:03
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (aaarrr @ Oct 19 2015, 00:21) *
И что же там не написано?

Присоединяюсь к вопросу. По сылке все разжевано буквально. Картинки, правда зачем-то еще напиханы. Видимо в этих-то картинках чего-то Автор и не нашел, а читать буквы и думать не стал sad.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 18 2015, 22:34
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(AHTOXA @ Oct 18 2015, 17:47) *
pitt, посмотрите вот эту тему.

Спасибо, AHTOXA, обязательно. Завтра попытаюсь сделать скриншот с Hard fault viewer.
Меня огорчает отсутствие идеи отчего может вылететь... Я не один Hard fault разрешил и, в основном, были проблемы с управлением памятью. Тут не в памяти дело...

Попытался просимулировать дома, без RTX : прерываний тьма, Hard fault не происходит. Специально задерживал обработку - фиксировал вход с необработанным прерыванием. НЕТ проблем.

Сообщение отредактировал pitt - Oct 18 2015, 23:59


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 19 2015, 04:53
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(pitt @ Oct 19 2015, 03:10) *
Г.уру, от щедрот переполняющих Вас знаний, не изволили бы Вы обучить порющих чущь Вашему великомудрому умению читать то, что к моему глубокому сожалению, не написано в известной мне документации как, например: link. Кстати, тамже Вам и предоставится шанс познакомиться с "неведомым вьювером".

Открываем Cortex-M3 Technical Reference Manual либо юзер-мануал на какой-либо МК с ядром Cortex-M, ищем "Hard Fault Status Register", "Configurable Fault Status Registers", "Mem Manage Address Register", "Bus Fault Address Register", "Auxiliary Fault Status Register" и пр. И внимательно читаем.
Далее - пишем ISR HardFault, в котором применяем полученные пунктом выше знания.
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 19 2015, 15:25
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672







--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 19 2015, 15:38
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Вижу, документ свой Вы так и не прочитали.
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 19 2015, 15:39
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672






--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 19 2015, 15:41
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Ну а смысл в этой картинке, если MMARVALID=0?
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 19 2015, 15:50
Сообщение #23


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(aaarrr @ Oct 19 2015, 11:41) *
Ну а смысл в этой картинке, если MMARVALID=0?

So what is the fault reason then?


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 19 2015, 15:53
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(pitt @ Oct 19 2015, 18:50) *
So what is the fault reason then?

The processor has attempted to execute an instruction that makes illegal use of the EPSR.
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 19 2015, 15:57
Сообщение #25


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(aaarrr @ Oct 19 2015, 11:53) *
The processor has attempted to execute an instruction that makes illegal use of the EPSR.

Thank you, but could you please not just quote Keil web site and give me some more useful clues.
ARM

Сообщение отредактировал pitt - Oct 19 2015, 16:03


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 19 2015, 16:01
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (pitt @ Oct 19 2015, 18:50) *
So what is the fault reason then?

The UFSR has bit 1 set reporting an attempt to switch to an invalid state. The HFSR has bit 30 set indicating that the Usage Fault was escalated to a Hard Fault. This is consistent with the debugger source window that shows the PC at the Hard Fault handler address.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 19 2015, 16:06
Сообщение #27


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(zltigo @ Oct 19 2015, 12:01) *
The UFSR has bit 1 set reporting an attempt to switch to an invalid state. The HFSR has bit 30 set indicating that the Usage Fault was escalated to a Hard Fault. This is consistent with the debugger source window that shows the PC at the Hard Fault handler address.

Thank you.
What could be causing this to happened? As I stated before, I wasn't able to simulate such condition at home without RTX.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 19 2015, 16:10
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (pitt @ Oct 19 2015, 19:06) *
What could be causing this to happened?

An attempt to switch to an invalid state.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 19 2015, 17:02
Сообщение #29


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(zltigo @ Oct 19 2015, 12:10) *
An attempt to switch to an invalid state.

Obscurum per obscurius


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 19 2015, 17:11
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Прочитайте наконец свой же документ со стр. 12 и ниже.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 19 2015, 17:13
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (pitt @ Oct 19 2015, 20:02) *
Obscurum per obscurius

Oculos habebat et not videbat sad.gif



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 19 2015, 17:38
Сообщение #32


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(zltigo @ Oct 19 2015, 13:13) *
Oculos habebat et not videbat sad.gif

Aliena vitia in oculis habemus, a tergo nostra sunt.
Docendo discimus

Сообщение отредактировал pitt - Oct 19 2015, 17:41


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 19 2015, 18:06
Сообщение #33


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Я в обработчике HardFault нахожу адрес программы, с которого процессор улетел. Больше мне, собственно, ничего не нужно. А регистры состояния в отладчике видны, как в AN209 показано.
Код
__asm void HardFault_Handler(void)
{
  TST LR, #4
  ITE EQ
  MRSEQ R0, MSP        ; Main Stack was used, put MSP in R0
  MRSNE R0, PSP        ; Process Stack was used, put PSP in R0
  LDR R0, [R0, #24]    ; Get stacked PC from stack
  B .
}
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 19 2015, 18:22
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (ViKo @ Oct 19 2015, 21:06) *
А регистры состояния в отладчике видны, как в AN209 показано.

Чукча не читатель. Чукча писатель вопросов. Ответов, даже столь разжованных, как этом самом AN209, он не понимает sad.gif.
QUOTE (ViKo @ Oct 19 2015, 21:06) *
Я в обработчике HardFault нахожу адрес программы, с которого процессор улетел. Больше мне, собственно, ничего не нужно.

LR и стек все-же нужен - отследить вызовы, ибо далеко не всегда виноват именно код в этом месте.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 19 2015, 18:27
Сообщение #35


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(aaarrr @ Oct 19 2015, 13:11) *
Прочитайте наконец свой же документ со стр. 12 и ниже.

From my .map:

os_dly 0x20003fc8 Data 24 rt_list.o(.bss)
__initial_sp 0x200043e0 Data 0 startup_stm32f40_41xxx.o(STACK)

SP = 0x200043A0
R14= FFFFFFF1

0x200043A0 20001E94
A4 08000000
A8 0
AC 0
B0 0
B4 080064E7


Code:
0x080064E4 BLX, r1
0x080064E6 POP (r4, pc)




Does it mean that I've exhausted RTX(idle) stack?


Цитата(zltigo @ Oct 19 2015, 14:22) *
Чукча не читатель. Чукча писатель вопросов. Ответов, даже столь разжованных, как этом самом AN209, он не понимает

Est proprium stultitiae aliorum vitia cernere, oblivisci suorum
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 19 2015, 18:35
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (pitt @ Oct 19 2015, 21:27) *
Est proprium stultitiae aliorum vitia cernere, oblivisci suorum

Нang the blame on someone else sm.gif.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 19 2015, 18:38
Сообщение #37


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(zltigo @ Oct 19 2015, 14:35) *
Нang the blame on someone else sm.gif.

Injuriam facilius facias quam feras
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 19 2015, 18:57
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(pitt @ Oct 19 2015, 21:27) *
SP = 0x200043A0

0x200043B4 080064E7

Внимание, вопрос: что находится в stack frame по этому смещению?
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 19 2015, 19:17
Сообщение #39


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(aaarrr @ Oct 19 2015, 14:57) *
Внимание, вопрос: что находится в stack frame по этому смещению?

If I understood your question correctly, but I'm not sure....





Сообщение отредактировал pitt - Oct 19 2015, 19:22


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 19 2015, 19:27
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(pitt @ Oct 19 2015, 22:17) *
If I understood your question correctly, but I'm not sure....

Нет, я задавал вопрос более общего характера. Итак, что находится в stack frame по смещению 0x14?
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 19 2015, 19:31
Сообщение #41


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(aaarrr @ Oct 19 2015, 15:27) *
Нет, я задавал вопрос более общего характера. Итак, что находится в stack frame по смещению 0x14?





--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 20 2015, 02:22
Сообщение #42


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Проблему я решил.
К моему сожалению, все это копание с регистрами ни к чему не привело. Извините, не могу понять, как оно помогает другим. Справился путем комментирования кусочков кода...
К еще большему сожалению, не понял природу проблемы, которая заключалась в том, что в СТАТИЧЕСКОЙ переменной типа exti_s(структура, описывающая EXTI), портился указатель на обработчик прерывания. Причем, его портила другая и тоже СТАТИЧЕСКАЯ переменная совершенно другого типа, но из того же файла. Почему?!
Буду весьма благодарен, если квалифицированно, без раздувания ноздрей, закатывания глаз, выкатывания губ и глубокомысленных замечаний об'ясните, а иначе, пожалуйста, не утруждайте себя, используйте энергию в мирных целях.

В любом случае, большое спасибо тем, кто старался помочь.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
smalcom
сообщение Oct 20 2015, 05:41
Сообщение #43


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

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



покажите sym-файл, сразу или потом покажите исходники.


Цитата
Проблему я решил.

чот я не понял. вы исправили ошибку?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 20 2015, 06:51
Сообщение #44


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

Без кода одна статическая переменная может портить другую статическую переменную только из вредности. Это я опускаю тот факт что вообще переменная переменную испортить не может а вот программа работая с переменными может.


Я бы конечно сказал бы что виноват стэк, но для статических переменных это вроде бы не верное утверждение, так что думаю проблема лежит глубже, вы просто задавили один из симптомов, потому прошли и другие симптомы, а проблем вы не обнаружили, и как следствие не исправили... ну или похвастайтесь уже кодом...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 20 2015, 07:27
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Golikov A. @ Oct 20 2015, 09:51) *
правильнее сказать методом тыка обнаружили место куда вбить костыль чтобы ошибка перестала проявляться как раньше.

Да.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
mantech
сообщение Oct 20 2015, 07:43
Сообщение #46


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Golikov A. @ Oct 20 2015, 09:51) *
Без кода одна статическая переменная может портить другую статическую переменную только из вредности. Это я опускаю тот факт что вообще переменная переменную испортить не может а вот программа работая с переменными может.


Тут что-то явно глубже обработчика EXTI. Автору надо внимательно пересмотреть код, особенно тот, что модифицирует эти переменные, ибо копаться в регистрах в данном случае, это терять время, особенно, если "не очень" в армовском асме, ИМХО, конечно laughing.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 20 2015, 07:57
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (mantech @ Oct 20 2015, 10:43) *
ибо копаться в регистрах в данном случае, это терять время, особенно, если "не очень" в армовском асме, ИМХО, конечно laughing.gif

"копатся в регистрах" к ассемблеру имеет дело второе - результат "копания" это нахождение по адресам места в исходнике которое приводит к вылету. И абсолютно НИЧЕГО сложного в этом нет, если голова на плечах есть и возможность думать. Ну а если по принципу "а чего тут думать - трясти надо", то тогда, конечно "время терять" sad.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 20 2015, 08:11
Сообщение #48


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Ну вы как всегда категоричны.

вот вам сценарий программа на 5 секунде работы портит память, а через 4 часа обращается по указанному в этой памяти указателю. В результате улет и трам пам пам. По регистрам вы найдете где улетела, а почему улетела - нет. Опять же есть вариант долгой цепочки не фатальных пакостей которая кончается бедой, так что не всегда анализ регистров - абсолютное добро которое решит все проблемы.

ТС локализовал проблему порча вектора в переменной, теперь надо локализовать когда это происходит, и тщательно проанализировать почему....
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 20 2015, 08:28
Сообщение #49


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Golikov A. @ Oct 20 2015, 11:11) *
По регистрам вы найдете где улетела...

А автор не нашел, несмотря на наличие содержимого stack frame и "мурзилки" с его описанием. Чем тут можно помочь?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 20 2015, 09:39
Сообщение #50


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Golikov A. @ Oct 20 2015, 11:11) *
вот вам сценарий программа на 5 секунде работы портит память, а через 4 часа обращается по указанному в этой памяти указателю. В результате улет и трам пам пам. По регистрам вы найдете где улетела, а почему улетела - нет.

Вы же уже сами сказали - испорчена совершенно конкретная область памяти. Круг поисков ОЧЕНЬ сузился. Фактически до рассмотрения ошибок работы с соседними переменными.
QUOTE
Опять же есть вариант долгой цепочки не фатальных пакостей которая кончается бедой, так что не всегда анализ регистров - абсолютное добро которое решит все проблемы.

Вообще-то я писал и про стек. По нему видна в том числе и цепочка вызовов, посему найти виноватого в том, что какая-нибудь memecpy() вызывает вылет, совершенно реально.
Вот, например, моя типичная диагностическая распечатка в лог при вылете:
CODE
Abort:[D] PC:000000D0 Op:E4940004 CPSR:200000D3
   LR:7FFFE35F SP:40000180
SP[0]:000000D0->E4940004->200000D3->7FFFE35F->
SP[4]:40000180->7FFFE35B->400001C8->00000008
Test:AC0F9D3F
R0:7FFFE35B R1:400001C8 R2:00000008 R3:A100DA57  R4:BFB79FEA  R5:600000D3
R6:0000001F R7:1303D214 R8:67A9084B R9:104B3212 R10:D0F03A0C R11:96195E20
R12:1F496802


QUOTE
ТС локализовал проблему...

Что он там "локализовал", не понимая НИЧЕГО в собственно процессе локализации, никому не ведомо.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
pitt
сообщение Oct 20 2015, 14:25
Сообщение #51


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(Golikov A. @ Oct 20 2015, 02:51) *
правильнее сказать методом тыка обнаружили место куда вбить костыль чтобы ошибка перестала проявляться как раньше.

Без кода одна статическая переменная может портить другую статическую переменную только из вредности. Это я опускаю тот факт что вообще переменная переменную испортить не может а вот программа работая с переменными может.


Я бы конечно сказал бы что виноват стэк, но для статических переменных это вроде бы не верное утверждение, так что думаю проблема лежит глубже, вы просто задавили один из симптомов, потому прошли и другие симптомы, а проблем вы не обнаружили, и как следствие не исправили... ну или похвастайтесь уже кодом...

Absolutely not. I did find what is happening and just now figure out exactly why and what is the case. The short answer is alignment. The exti_s struct is in the one .h file used by two different .c files. One treats it as packed(expected behaviour), another is not. That is how one static variable overwrites another.


Sermo animi est imago: qualis vir, talis et oratio est

Цитата(aaarrr @ Oct 20 2015, 04:28) *
А автор не нашел, несмотря на наличие содержимого stack frame и "мурзилки" с его описанием. Чем тут можно помочь?

Help is always possible but desire and patience are required.


Сообщение отредактировал pitt - Oct 20 2015, 14:19


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
smalcom
сообщение Oct 20 2015, 14:44
Сообщение #52


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

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



да используйте уже наконец http://electronix.ru/forum/index.php?showforum=92
или DNS теперь по-умолчанию на edaboard редиректит?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 20 2015, 15:35
Сообщение #53


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Да русский он, на английском пишет для солидностиsm.gif

Вон английского мало, он латынь подключил, правда пока в основном пословицами и не всегда подходящего содержания, но в целом нормальноsm.gif солидно звучитsm.gif

Ну если вы нашли что у вас проблемы с выравниванием, кстати вдруг понял что реально не знаю что за проц используется, но думаю что кортекс м4 sm.gif , так вот если вы нашли проблемы с выравниванием, то так и надо писать что из-за выравнивания в одной функции переменные налезали и бла бла бла, а не то что она переменная портит другую....

Если вы пакованную структуру передаете в функцию, объявите в функции прием пакованных параметров на вход, и должно полегчать. А еще лучше через typdef сразу объявить пакованную структуру и как структуру и как подставляемую в функцию переменную.
Go to the top of the page
 
+Quote Post

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

 


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


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