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

 
 
 
Reply to this topicStart new topic
> microlib в бутлоадере -> глючит основная прога
zuy
сообщение Sep 1 2010, 22:33
Сообщение #1


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

Группа: Свой
Сообщений: 173
Регистрация: 30-11-05
Из: San Francisco
Пользователь №: 11 593



Процессор LPC2361.

При запуске проги через бутлоадер, стали появляться глюки. Выяснилось, что непонятно как портятся некоторые массивы данных.
Дальше обнаружили, что на это влияет бутлоадер. Если его вершину стека поднять вверх примерно на 200 байт т.е. сделать так, чтобы его стек не перекрывал данные основной программы, то основная прога глючить перестает.
А если отключить использование Microlib в бутлоадере, то даже не двигая стек бутлоадера, глюк исчезает.
При этом, если в бутлоадере включен Microlib, то основная прога глючит не зависимо от того используется в ней Microlib или нет.
Без бутлоадера, все работает отлично.

Что это может быть?
Каким образом настройки стека бутлоадера могут влиять на основную программу, если в стартапе все стеки заново инициализируются?
Подкиньте хоть каких-нибудь идей, как вообще то, что я делаю в бутлоадере, может влиять на основную прогу, если без него она отлично работает?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 2 2010, 06:01
Сообщение #2


Гуру
******

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



Цитата(zuy @ Sep 2 2010, 01:33) *
Каким образом настройки стека бутлоадера могут влиять на основную программу, если в стартапе все стеки заново инициализируются?
Например он может перед запуском приложения переводить ядро в User mode и стартап-код не сможет настроить стеки для остальных режимов.


--------------------
На любой вопрос даю любой ответ
"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
zuy
сообщение Sep 2 2010, 06:38
Сообщение #3


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

Группа: Свой
Сообщений: 173
Регистрация: 30-11-05
Из: San Francisco
Пользователь №: 11 593



Цитата(Сергей Борщ @ Sep 2 2010, 09:01) *
Например он может перед запуском приложения переводить ядро в User mode и стартап-код не сможет настроить стеки для остальных режимов.


Я настраиваю стеки стандартным Startup от Keil. Там вот такой код:
Код
; Setup Stack for each mode ----------------------------------------------------

                LDR     R0, =Stack_Top

;  Enter Undefined Instruction Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #UND_Stack_Size

;  Enter Abort Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #ABT_Stack_Size

;  Enter FIQ Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #FIQ_Stack_Size

;  Enter IRQ Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #IRQ_Stack_Size

;  Enter Supervisor Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #SVC_Stack_Size

;  Enter User Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_USR
                IF      :DEF:__MICROLIB

                EXPORT __initial_sp

                ELSE

                MOV     SP, R0
                SUB     SL, SP, #USR_Stack_Size

                ENDIF


Я же правильно понимаю, что этот код настроит все стеки как положенно, независимо в каком режиме в него войдет процессор ?
Go to the top of the page
 
+Quote Post
Nixon
сообщение Sep 2 2010, 06:59
Сообщение #4


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Вам Сергей правильно указал - ваш бутлоадер настраивает все стеки для себя и переходит в конце настройки в USER режим. Приложение уже не сможет перестроить стеки под свои требования, точнее сможет перестроить стек только для USER режима.
Для того чтобы не было подобных проблем в пользовательское приложение нужно уходить из режима супервизора. Обычно это делается путем вызова SWI и перехода в пользовательское приложение из обработчика SWI.


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
zuy
сообщение Sep 2 2010, 07:20
Сообщение #5


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

Группа: Свой
Сообщений: 173
Регистрация: 30-11-05
Из: San Francisco
Пользователь №: 11 593



Сергей и Nixon спасибо огромное. А то уже до красных глаз досиделся вылавливая глюк.

Один только момент остался. Бут уже прошит в большое кол-во девайсов, можно решить проблему не в буте, а в стартапе основной проги.
т.е. там перед настройкой стеков, вернуться назад в режим суперпользователя ?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 2 2010, 08:57
Сообщение #6


Гуру
******

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



Цитата(zuy @ Sep 2 2010, 10:20) *
т.е. там перед настройкой стеков, вернуться назад в режим суперпользователя ?
Как идея - сделать swi, процессор перейдет в режим супервизора, и уже из него как-то настроить стеки и вернуться в исходную точку. Сам такое не делал.


--------------------
На любой вопрос даю любой ответ
"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
defunct
сообщение Sep 3 2010, 23:21
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Сергей Борщ @ Sep 2 2010, 11:57) *
Как идея - сделать swi,

В обработчике любого исключения (DAbt / Swi / Irq ) можно переключать режимы, - и все стеки перестроить.
Go to the top of the page
 
+Quote Post

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

 


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


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