Jump to content

    
Sign in to follow this  
slavox

KEIL RTX после бутлоадера

Recommended Posts

Здравствуйте, прошу помощи!

Процессор 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 запускается.

В чем проблема мб проблема ?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this