Здравствуйте, прошу помощи!
Процессор sam7x512.
Есть бутлоадер, стартует с адреса 0x100000, затем передает управление на адрес основной программы 0х140000.
Запуск основной программы осуществляется в привелегированном режиме
void __swi(8) StartApplication (void);
void __SWI_8 (void)
{
AppEntry();
}
В бутлоадере используется файл
;/*****************************************************************************/
;/* SWI.S: SWI Handler */
;/*****************************************************************************/
;/* This file is part of the uVision/ARM development tools. */
;/* Copyright © 2005-2006 Keil Software. All rights reserved. */
;/* This software may only be used under the terms of a valid, current, */
;/* end user licence from KEIL for a compatible version of KEIL software */
;/* development tools. Nothing else gives you the right to use this software. */
;/*****************************************************************************/
T_Bit EQU 0x20
PRESERVE8 ; 8-Byte aligned Stack
AREA SWI_Area, CODE, READONLY
ARM
EXPORT SWI_Handler
SWI_Handler
STMFD SP!, {R12, LR} ; Store R12, LR
MRS R12, SPSR ; Get SPSR
STMFD SP!, {R8, R12} ; Store R8, SPSR
TST R12, #T_Bit ; Check Thumb Bit
LDRNEH R12, [LR,#-2] ; Thumb: Load Halfword
BICNE R12, R12, #0xFF00 ; Extract SWI Number
LDREQ R12, [LR,#-4] ; ARM: Load Word
BICEQ R12, R12, #0xFF000000 ; Extract SWI Number
LDR R8, SWI_Count
CMP R12, R8
BHS SWI_Dead ; Overflow
ADR R8, SWI_Table
LDR R12, [R8,R12,LSL #2] ; Load SWI Function Address
MOV LR, PC ; Return Address
BX R12 ; Call SWI Function
LDMFD SP!, {R8, R12} ; Load R8, SPSR
MSR SPSR_cxsf, R12 ; Set SPSR
LDMFD SP!, {R12, PC}^ ; Restore R12 and Return
SWI_Dead B SWI_Dead ; None Existing SWI
SWI_Cnt EQU (SWI_End-SWI_Table)/4
SWI_Count DCD SWI_Cnt
; Import user SWI functions here.
; IMPORT __SWI_0
; IMPORT __SWI_1
; IMPORT __SWI_2
; ...
IMPORT __SWI_8
SWI_Table
; Insert user SWI functions here
DCD 0
DCD 0
DCD 0
DCD 0
DCD 0
DCD 0
DCD 0
DCD 0
DCD __SWI_8 ; SWI 8 Function Entry
SWI_End
END
Система с бутлоадером работает прекрасно, если основная программа не использует Keil КTX, иначе вылетает после запуска RTOS на команде os_sys_init (...), отладчика нет.
Если вместо бутлоадера прошить основную программу с RTX, сменив стартовый адрес флеш, то все работает отлично, RTX запускается.
В чем проблема мб проблема ?