Перейти к содержанию
    

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...