|
LPC2364-KEIL-startup.s, Почему в стартапе происходид DataAbort? |
|
|
|
Jul 9 2007, 14:15
|

Частый гость
 
Группа: Validating
Сообщений: 184
Регистрация: 26-06-07
Из: Санкт-Петербург
Пользователь №: 28 714

|
Вообщем, стартап код начинается так: Reset LDR PC, ResetAddr (1*) LDR PC, UndefinedAddr LDR PC, SWI_Addr LDR PC, PrefetchAddr LDR PC, DataAbortAddr (2*) DCD 0xb9205f80 ;DCD 0xb9206e50 LDR PC, [PC, #-0x120] ; pc <- VICVectAddr using pc relative addressing (NEW) LDR PC, FIQ_Addr
ResetAddr DCD ResetInit UndefinedAddr DCD Undefined SWI_Addr DCD SWInterrupt PrefetchAddr DCD PrefetchAbort DataAbortAddr DCD DataAbort DCD 0 IRQ_Addr DCD 0 FIQ_Addr DCD FIQ_Exception
При дебагинге через JTAG процессор переходит по адресу 1* ResetAddr. В ней происходит следующее (инициализация стэков, инициализация системной периферии и вваливание в основной код):
ResetInit BL InitStack ;Initialize the stack BL TargetResetInit ;Initialize the target board B __main ;Jump to the entry point of C program
ПРОБЛЕМА: Процессор после обработки InitStack входит в режим DataAbort и переходит по метке 2* DataAbortAddr в соответствующий обработчик, где процессор ожидает вечный цикл. При этом PC успевает перейти на метку(функцию) TargetResetInit и прямо в начале этой функции проц уходит в режим DataAbort. Последнее понятно почему - скорее всего конвееризация обработки команд. Что не так с InitStack?
InitStack MOV R0, LR ;Build the SVC stack MSR CPSR_c, #SVC32Mode LDR SP, =StackSvc (размер 64*4 слов) ;Build the IRQ stack MSR CPSR_c, #IRQ32Mode LDR SP, =StackIrq (размер 256*4 слов) ;Build the FIQ stack MSR CPSR_c, #FIQ32Mode LDR SP, =StackFiq (размер 64*4 слов) ;Build the DATAABORT stack MSR CPSR_c, #ABT32Mode LDR SP, =StackAbt (размер 64*4 слов) ;Build the UDF stack MSR CPSR_c, #UDF32Mode LDR SP, =StackUnd (размер 64*4 слов) ;Build the SYS stack MSR CPSR_c, #SYS32Mode LDR SP, =StackUsr (размер 1024*4 слов) !!!!!!!!!!!!!!!! <- может слишком большой?
MOV PC, R0
|
|
|
|
|
 |
Ответов
|
Jul 11 2007, 10:17
|

Частый гость
 
Группа: Validating
Сообщений: 184
Регистрация: 26-06-07
Из: Санкт-Петербург
Пользователь №: 28 714

|
2 Andy Mozzhevilov
Помоему, действительно процу программа пытается вскормить адрес, которого нет. Вот ассемблеровка в той последовательности, которая имеет место быть в действительности (адрес, команда, аргументы):
0х00000000 LDR PC, [PC, #0x0018] идем к обработке события "резет"
->"Резет" 0x000000cc BL 0x00000094 ;переход к месту где выделяется память в ОЗУ для ;стэков...
;"функция" инициализации стэка 0x00000094 MOV R0, R14 ;Чтоб знать куда возвращаться -> строим стэк 0х000000с4 LDR R13, [PC, #0x004c] ; и выходим обратно к "Резет"
"Резет" 0х000000с8 MOV PC, R0 "Инициализация системной периферии" ;реализовано в С-функции 0x000000d0 BL 0x0000fbc4 ;идем по метке зачем-то сюда? скоооооооок!
0x0000fbc4 LDR R12, [PC] ;потом собственно в функцию. 0x0000fbc8 BX R12 0x0000fbcc DD 0x000045ef ;этож не кратно 4-м!? Может здесь проблема?
"Собственно сама функия инициализации" 0x000045ee b5f0 PUSH {R4-R7, LR} ;Переход сюда, хотя в прошлой ;команде было ;0x000045ef и все...выкидыш - аборт, если по супостатски. 0x000045f0 LDR R0, [PC, #0x0150] ; вот что должно быть далее, может проблема та, что ;описана в ерраташите?:
<any instruction> <STR, STMIA, PUSH> <---- data abort on this instruction LDR rn, [pc,#offset]
Еслибы не одно "но". Я и в ARM режиме компилил прогу (менял настройку в КЕЙЛе. Options->Target->ARM mode)
Сообщение отредактировал Цырен - Jul 11 2007, 10:34
|
|
|
|
|
Jul 11 2007, 10:55
|
Частый гость
 
Группа: Новичок
Сообщений: 84
Регистрация: 24-05-07
Пользователь №: 27 947

|
Цитата(Цырен @ Jul 11 2007, 14:17)  ... 0x0000fbc4 LDR R12, [PC] ;потом собственно в функцию. 0x0000fbc8 BX R12 0x0000fbcc DD 0x000045ef ;этож не кратно 4-м!? Может здесь проблема? Это переключение в THUMB-режим. Все корректно. Цитата(Цырен @ Jul 11 2007, 14:17)  "Собственно сама функия инициализации" 0x000045ee b5f0 PUSH {R4-R7, LR} ;Переход сюда, хотя в прошлой ;команде было ;0x000045ef и все...выкидыш - аборт, если по супостатски. Что у Вас в R13?
|
|
|
|
Сообщений в этой теме
Цырен LPC2364-KEIL-startup.s Jul 9 2007, 14:15 dmyl Посмотрите свежую еррату на чип, раздел МАМ.
Прове... Jul 9 2007, 14:30 sensor_ua Кайл 3.11 или другой? Jul 9 2007, 18:10 Цырен 2 dmyl
Ок посмотрю, спасибо. Но ведь МАМ даже не у... Jul 10 2007, 06:57 dmyl У меня после загрузки из иара МАМ ставится в 2. На... Jul 10 2007, 10:06 sensor_ua Цитата(Цырен @ Jul 10 2007, 09:57) 2 dmyl... Jul 11 2007, 15:12  Andy Mozzhevilov Цитата(Цырен @ Jul 11 2007, 16:17) 2 Andy... Jul 11 2007, 10:41   Юрий Санвальд Цитата(a3r3 @ Jul 11 2007, 14:55) Это пер... Jul 11 2007, 12:47    a3r3 Цитата(Юрий Санвальд @ Jul 11 2007, 16:47... Jul 12 2007, 10:50 Цырен Действительно, в стэк-поинтере адрес, который вооб... Jul 11 2007, 13:35 Сергей Борщ Цитата(Цырен @ Jul 11 2007, 16:35) спрошу... Jul 11 2007, 14:01 Цырен Кажецца я всосал!!!
Дело в том, что ко... Jul 12 2007, 08:02 Сергей Борщ Цитата(Цырен @ Jul 12 2007, 11:02) но инт... Jul 12 2007, 10:27
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|