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

 
 
> stm32f4discovery виснет раз в неделю
сарматъ
сообщение Sep 10 2013, 11:28
Сообщение #1


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

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



добрый день собственно макетка зависает раз в неделю да так что кнопочка ресет не помогает, как думаете в чем может быть проблема?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
сарматъ
сообщение Sep 25 2013, 13:33
Сообщение #2


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

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



счетчик в стеке спрятан по адресу sp-24
а лпц это кто?
можете сюда эти макросы кинуть?

Сообщение отредактировал сарматъ - Sep 25 2013, 13:35
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 25 2013, 15:32
Сообщение #3


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(сарматъ @ Sep 25 2013, 17:33) *
а лпц это кто?

LPC микроконтроллеры ARM от NXP (lpc). Golikov A., возможно, имел ввиду файл core_cmFunc.h из CMSIS от NXP.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 25 2013, 17:30
Сообщение #4


Гуру
******

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



Цитата(mdmitry @ Sep 25 2013, 19:32) *
LPC микроконтроллеры ARM от NXP (lpc). Golikov A., возможно, имел ввиду файл core_cmFunc.h из CMSIS от NXP.


Да, думаю этот файл я и имел ввиду.

А еще помниться то-ли ИАР то-ли Кеил давал как-то к спец регистрам обращаться по спец зарезервированным словам, но может я путаю с другими процессорами.



Цитата(сарматъ @ Sep 25 2013, 20:36) *
ясно

то есть надо в самом начале обработчика сохранить на асемблере все регистры в какое нибудь укромное место памяти, а потом в цикле эту память слать по уарту?


похоже на правду.
Go to the top of the page
 
+Quote Post
сарматъ
сообщение Sep 26 2013, 08:05
Сообщение #5


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

Группа: Участник
Сообщений: 153
Регистрация: 19-11-12
Пользователь №: 74 463



можно ли делать инлайн вставками вот так

CODE
void Default_Handler(void)
{
asm volatile (
"TST LR, #0x4;Test EXC_RETURN number in LR bit 2\n"
"ITTEE EQ;if zero (equal) then\n"
"MRSEQ R0, MSP;Main Stack was used, put MSP in R0\n"
"LDREQ R0,[R0,#24];Get stacked PC from stack.\n"
"MRSNE R0, PSP;else, Process Stack was used, put PSP in R0\n"
"LDRNE R0,[R0,#24];Get stacked PC from stack.\n"


или "asm volatile (" будет рассматриваться как вызов функции и запутает стек и обработчик Default_Handler(void) надо делать на чистом ассемблере?

Сообщение отредактировал сарматъ - Sep 26 2013, 08:08
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 26 2013, 09:51
Сообщение #6


Гуру
******

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



QUOTE (сарматъ @ Sep 26 2013, 10:05) *
можно ли делать инлайн вставками вот так
Можно, не запутает. Но надо сказать компилятору, что вы используете R0 и объявить эту функцию как naked и noreturn, чтобы компилятор не вставил в начало код резервирования стека, сохранения адреса возврата и прочее. И уже из нее можно вызывать нормальную функцию собственно обработчика, в которой компилятор может выделять стек:
CODE
__attribute__((noreturn))
void handler();

__attribute__((noreturn, naked))
void Default_Handler(void)
{
    asm volatile (
            "TST LR, #0x4           \r\n" // Test EXC_RETURN number in LR bit 2"
            "ITTEE EQ               \r\n" // if zero (equal) then
            "MRSEQ R0, MSP          \r\n" // Main Stack was used, put MSP in R0
            "LDREQ R0,[R0,#24]      \r\n" // Get stacked PC from stack
            "MRSNE R0, PSP          \r\n" // else, Process Stack was used, put PSP in R0
            "LDRNE R0,[R0,#24]      \r\n" // Get stacked PC from stack
            :
            :
            :"r0"
            );
    handler();
}

Кроме того, вы же захотите использовать полученное вами значение? Значит компилятору надо сообщить, в какой регистр вы его положили. Точнее, надо дать ему самому возможность выбрать подходящий регистр:
CODE
__attribute__((noreturn))
void handler(void * stack_frame);

__attribute__((noreturn, naked))
void Default_Handler(void)
{
    void * Return_addr;
    asm volatile (
            "TST LR, #0x4               \r\n" // Test EXC_RETURN number in LR bit 2"
            "ITE EQ                     \r\n" // if zero (equal) then
            "MRSEQ %[Reg], MSP          \r\n" // Main Stack was used, put MSP in R0
            "MRSNE %[Reg], PSP          \r\n" // else, Process Stack was used, put PSP in R0
            "LDR   %[Reg],[%[Reg],#24]  \r\n" // Get stacked PC from stack
            :[Reg]"=r"(Return_addr)
            :
            :
            );
    handler(Return_addr);
}

Также вы, вероятно, захотите узнать не только точку возникновения исключения, но и содержимое остальных сложенных на стек регистров. Значит, в обработчик удобнее передавать указатель на стековый кадр:
CODE
#include    <stdint.h>
typedef struct
{
    void const * LR;
    uint32_t    PSR;
    void const * Return_address;
    uint32_t    R3;
    uint32_t    R2;
    uint32_t    R1;
    uint32_t    R0;
} stack_frame;

__attribute__((noreturn))
void handler(stack_frame const *);

__attribute__((noreturn, naked))
void Default_Handler(void)
{
    stack_frame const * pStack_frame;
    asm volatile (
            "TST LR, #0x4               \r\n" // Test EXC_RETURN number in LR bit 2"
            "ITE EQ                     \r\n" // if zero (equal) then
            "MRSEQ %[Reg], MSP          \r\n" // Main Stack was used, put MSP in R0
            "MRSNE %[Reg], PSP          \r\n" // else, Process Stack was used, put PSP in R0
            :[Reg]"=r"(pStack_frame)
            :
            :
            );
    handler(pStack_frame);
}

Как-то так (не уверен, что в последних двух примерах правильно написал IT-блок, проверьте)...


--------------------
На любой вопрос даю любой ответ
"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

Сообщений в этой теме
- сарматъ   stm32f4discovery виснет раз в неделю   Sep 10 2013, 11:28
- - Lotor   С такой постановкой вопроса ждите экстрасенсов. В ...   Sep 10 2013, 12:10
- - сарматъ   что, зависания такие что ресетом не поднять - обыч...   Sep 10 2013, 12:46
- - kolobok0   Цитата(сарматъ @ Sep 10 2013, 15:28) ..со...   Sep 10 2013, 13:49
- - сарматъ   да видимо придется вторую макетку собирать чтоб ее...   Sep 10 2013, 13:55
|- - adnega   Цитата(сарматъ @ Sep 10 2013, 17:55) да в...   Sep 10 2013, 14:05
- - сарматъ   да снимаю питание и подключаю заново   Sep 10 2013, 14:11
|- - adnega   Цитата(сарматъ @ Sep 10 2013, 18:11) да с...   Sep 10 2013, 14:25
- - сарматъ   относительно повторяемости два раза я откладывал р...   Sep 10 2013, 14:45
|- - adnega   Цитата(сарматъ @ Sep 10 2013, 18:45) отно...   Sep 10 2013, 16:45
|- - сарматъ   Цитата(adnega @ Sep 10 2013, 20:45) Обрат...   Sep 17 2013, 04:41
|- - adnega   Цитата(сарматъ @ Sep 17 2013, 08:41) а чт...   Sep 17 2013, 06:16
- - AHTOXA   Цитата(сарматъ @ Sep 10 2013, 17:28) добр...   Sep 10 2013, 18:21
- - сарматъ   аднега, спасибо буду думать, посмотрел сейчас на п...   Sep 10 2013, 18:24
|- - KnightIgor   Цитата(сарматъ @ Sep 10 2013, 19:24) адне...   Sep 11 2013, 20:07
- - hd44780   Читал-читал, так и не нашёл, от чего питается плат...   Sep 12 2013, 08:07
- - сарматъ   "питание по юсби по которому произвожу отладк...   Sep 12 2013, 09:42
- - сарматъ   в очередной раз упал зверек, но поднялся от ресета...   Sep 16 2013, 18:33
|- - vlad_new   Цитата(сарматъ @ Sep 16 2013, 22:33) в оч...   Sep 16 2013, 22:30
- - Golikov A.   протоколирование только. попадая в секцию кидает ...   Sep 16 2013, 19:26
- - DASM   Да, тут только лог.Лучше по юарт и очень простой, ...   Sep 17 2013, 04:05
- - сарматъ   пока платка тестится собрал вторую макетку подключ...   Sep 18 2013, 11:30
|- - adnega   Цитата(сарматъ @ Sep 18 2013, 15:30) кто ...   Sep 18 2013, 12:06
- - сарматъ   да tcpdump говорит что они имеют одинаковый мак 32...   Sep 18 2013, 12:29
- - Golikov A.   может быть еще путаница с кешем арп запросов. а е...   Sep 18 2013, 13:06
- - сарматъ   широковещательный вроде только всеединички?   Sep 18 2013, 13:08
- - Golikov A.   нет там вроде 1 в старшем бите старшего байта, или...   Sep 18 2013, 13:11
- - сарматъ   а механизмом xFSR регистров кто нибудь пользовался...   Sep 24 2013, 08:49
- - mad_mouse   посмотрите переполнение каких либо переменных. есл...   Sep 24 2013, 11:29
- - сарматъ   все что ни делал не помогло все равно виснет, буду...   Sep 24 2013, 18:28
|- - adnega   Попробуйте printf ("aaa\r\n");   Sep 24 2013, 19:07
- - сарматъ   о, спасибо, заработало а вы с xFSR не сталкивалис...   Sep 24 2013, 19:13
|- - adnega   Цитата(сарматъ @ Sep 24 2013, 23:13) если...   Sep 24 2013, 21:20
- - сарматъ   да как раз оттуда эти регистры откопал   Sep 24 2013, 21:26
|- - adnega   Цитата(сарматъ @ Sep 25 2013, 01:26) да к...   Sep 24 2013, 21:36
- - сарматъ   мне хотя бы место и причину найти для начала а ст...   Sep 25 2013, 05:46
- - Golikov A.   думаю 95% случаев - переполнение. остальное это об...   Sep 25 2013, 05:51
- - сарматъ   а ведь если стек рухнул printf работать не будет в...   Sep 25 2013, 10:09
- - Golikov A.   принтф - это вообще жесткая функция, она же с деко...   Sep 25 2013, 10:19
- - сарматъ   да наверное переделаю на просто уарт а кстати поче...   Sep 25 2013, 10:40
|- - Сергей Борщ   QUOTE (сарматъ @ Sep 25 2013, 12:40) разв...   Sep 25 2013, 12:08
- - сарматъ   что то мне казалось что я видел обращение к регист...   Sep 25 2013, 12:58
- - Golikov A.   в лпц есть макросы обращения к регистрам, думаю в ...   Sep 25 2013, 13:31
|- - demiurg_spb   Цитата(Сергей Борщ @ Sep 26 2013, 13:51) ...   Oct 18 2013, 11:25
|- - Сергей Борщ   QUOTE (demiurg_spb @ Oct 18 2013, 14:25) ...   Oct 18 2013, 13:41
- - Сергей Борщ   QUOTE (сарматъ @ Sep 25 2013, 14:58) а PS...   Sep 25 2013, 16:08
- - сарматъ   ясно то есть надо в самом начале обработчика сохр...   Sep 25 2013, 16:36
- - сарматъ   спасибо буду пробовать   Sep 26 2013, 09:53
- - сарматъ   наваял код на asm для обработчика __attribute__((n...   Oct 1 2013, 09:19
|- - AHTOXA   Цитата(сарматъ @ Oct 1 2013, 15:19) есть ...   Oct 1 2013, 09:50
|- - Сергей Борщ   Подключиться отладчиком "на лету" во вре...   Oct 1 2013, 11:57
|- - сарматъ   CODE/* * main.c * * Created on: 01 окт. 2013 г...   Oct 1 2013, 12:22
|- - Сергей Борщ   QUOTE (сарматъ @ Oct 1 2013, 14:22) Серге...   Oct 1 2013, 21:10
- - vlad_new   Быпа у кого то подобная проблемма. Оказалось, что ...   Oct 1 2013, 18:39
- - A. Fig Lee   Можно в бесплатном IAR цеплятся JLinkом. Там и опц...   Oct 1 2013, 20:54
- - сарматъ   спасибо, сегодня попробую пересобрать, как раз нов...   Oct 2 2013, 06:30
- - сарматъ   пропатчил, собрал, единственное конфигурировал так...   Oct 2 2013, 18:41
|- - Сергей Борщ   QUOTE (сарматъ @ Oct 2 2013, 20:41) вроде...   Oct 2 2013, 19:47
- - сарматъ   да я завтра на вторую платку просто со светодиодам...   Oct 2 2013, 19:52
|- - demiurg_spb   Цитата(сарматъ @ Oct 2 2013, 23:52) Код a...   Oct 18 2013, 12:32
|- - ig_z   Я использую такой обработчик Hard_Fault_Handler дл...   Oct 18 2013, 13:41
- - сарматъ   почти неделю работает без зависаний возможно что ...   Oct 10 2013, 05:40
|- - adnega   Цитата(сарматъ @ Oct 10 2013, 09:40) 2. к...   Oct 10 2013, 07:07
|- - сарматъ   Цитата(adnega @ Oct 10 2013, 11:07) главн...   Oct 11 2013, 05:09
- - Flexz   Цитата(сарматъ @ Oct 10 2013, 09:40) возм...   Oct 10 2013, 08:01
- - сарматъ   платка опять повисла, точнее теперь уже ясно что п...   Oct 18 2013, 08:55
- - Сергей Борщ   QUOTE (сарматъ @ Oct 18 2013, 11:55) 2 ме...   Oct 18 2013, 09:46


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

 


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


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