|
LPC2378 и исключительные ситуации, программа переодически сваливаеться в exception |
|
|
|
Oct 17 2008, 20:19
|
Участник

Группа: Участник
Сообщений: 18
Регистрация: 21-11-07
Пользователь №: 32 540

|
Всем привет, вопрос такой, в каких ситуациях контроллер переходит по адресам DAbt_Handler и Undef_Handler? особенно это наблюдается при использовании библиотечных фун-ций типа atof, sprintf ... ? С чем это может быть связанно? пробовал играть чутка с размером стеков, что то не помогает.
|
|
|
|
|
 |
Ответов
|
Oct 22 2008, 09:25
|
Участник

Группа: Участник
Сообщений: 18
Регистрация: 21-11-07
Пользователь №: 32 540

|
посмотрел как посоветовали многоуважаемые гуру что за команда дает сбой просто идет загрузка из памяти типа LDRB R0,[R0,R1] и после этого проц уходит на адрес обработки исключения. Мдяя, все происходит внутри библиотечных функций, соответсвенно для меня начинающего армовода разобраться сложновато. Вычитал тут http://www.arm.com/support/faqdev/1217.html что при использовании библиотечных функций необходимо дополнительно что то инициализировать связанное с расположением этих библиотек. Так ли это? Нашел такой пример который необходимо вставить с стартовый файл, но это не помогло. Example 2.1. __main and __rt_entry IMPORT __rt_entry EXPORT __main ENTRY __main B __rt_entry END ЗЫ Может кто посмотрит мой startup файл, елс есть время?
Сообщение отредактировал cyberrevenger - Oct 22 2008, 09:29
|
|
|
|
|
Oct 22 2008, 09:41
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(cyberrevenger @ Oct 22 2008, 13:25)  посмотрел как посоветовали многоуважаемые гуру что за команда дает сбой просто идет загрузка из памяти типа LDRB R0,[R0,R1] и после этого проц уходит на адрес обработки исключения. Дальше дело техники - посмотреть, что лежит в R0 и R1, и откуда оно туда приходит. Цитата(cyberrevenger @ Oct 22 2008, 13:25)  ЗЫ Может кто посмотрит мой startup файл, елс есть время? Выкладывайте, посмотрим.
|
|
|
|
|
Oct 22 2008, 09:45
|
Участник

Группа: Участник
Сообщений: 18
Регистрация: 21-11-07
Пользователь №: 32 540

|
Цитата(aaarrr @ Oct 22 2008, 13:41)  Дальше дело техники - посмотреть, что лежит в R0 и R1, и откуда оно туда приходит. мм, вот в этом то и проблема, отследить в аасемблере что откуда приходит, фу-ция то библиотечная, че они там нагородили)) Цитата(aaarrr @ Oct 22 2008, 13:41)  Выкладывайте, посмотрим. Ок, вот Код ;/***************************************************************************** ;* startup.s: startup file for NXP LPC230x Family Microprocessors ;* ;* Copyright(C) 2006, NXP Semiconductor ;* All rights reserved. ;* ;* History ;* 2006.09.01 ver 1.00 Prelimnary version, first Release ;* ;*****************************************************************************/ PRESERVE8
;/* ; * The STARTUP.S code is executed after CPU Reset. This file may be ; * translated with the following SET symbols. In uVision these SET ; * symbols are entered under Options - ASM - Define. ; * ; * REMAP: when set the startup code initializes the register MEMMAP ; * which overwrites the settings of the CPU configuration pins. The ; * startup and interrupt vectors are remapped from: ; * 0x00000000 default setting (not remapped) ; * 0x40000000 when RAM_MODE is used ; * ; * RAM_MODE: when set the device is configured for code execution ; * from on-chip RAM starting at address 0x40000000. ; */
; Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs
Mode_USR EQU 0x10 Mode_FIQ EQU 0x11 Mode_IRQ EQU 0x12 Mode_SVC EQU 0x13 Mode_ABT EQU 0x17 Mode_UND EQU 0x1B Mode_SYS EQU 0x1F
I_Bit EQU 0x80 ; when I bit is set, IRQ is disabled F_Bit EQU 0x40 ; when F bit is set, FIQ is disabled
;// <h> Stack Configuration (Stack Sizes in Bytes) ;// <o0> Undefined Mode <0x0-0xFFFFFFFF:8> ;// <o1> Supervisor Mode <0x0-0xFFFFFFFF:8> ;// <o2> Abort Mode <0x0-0xFFFFFFFF:8> ;// <o3> Fast Interrupt Mode <0x0-0xFFFFFFFF:8> ;// <o4> Interrupt Mode <0x0-0xFFFFFFFF:8> ;// <o5> User/System Mode <0x0-0xFFFFFFFF:8> ;// </h>
UND_Stack_Size EQU 0x00000000 SVC_Stack_Size EQU 0x00000100 ABT_Stack_Size EQU 0x00000000 FIQ_Stack_Size EQU 0x00000100 IRQ_Stack_Size EQU 0x00000100 USR_Stack_Size EQU 0x00000200
Stack_Size EQU (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + \ FIQ_Stack_Size + IRQ_Stack_Size + USR_Stack_Size)
AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size
Stack_Top EQU Stack_Mem + Stack_Size
;// <h> Heap Configuration ;// <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF> ;// </h>
Heap_Size EQU 0x00000300
AREA HEAP, NOINIT, READWRITE, ALIGN=3 Heap_Mem SPACE Heap_Size
; Area Definition and Entry Point ; Startup Code must be linked first at Address at which it expects to run.
AREA RESET, CODE, READONLY ARM
; Exception Vectors ; Mapped to Address 0. ; Absolute addressing mode must be used. ; Dummy Handlers are implemented as infinite loops which can be modified.
Vectors LDR PC, Reset_Addr LDR PC, Undef_Addr LDR PC, SWI_Addr LDR PC, PAbt_Addr LDR PC, DAbt_Addr NOP ; Reserved Vector ; LDR PC, IRQ_Addr LDR PC, [PC, #-0x0120] ; Vector from VicVectAddr LDR PC, FIQ_Addr
Reset_Addr DCD Reset_Handler Undef_Addr DCD Undef_Handler SWI_Addr DCD SWI_Handler PAbt_Addr DCD PAbt_Handler DAbt_Addr DCD DAbt_Handler DCD 0xB9206E28 ; Reserved Address IRQ_Addr DCD IRQ_Handler FIQ_Addr DCD FIQ_Handler
Undef_Handler B Undef_Handler SWI_Handler B SWI_Handler PAbt_Handler B PAbt_Handler DAbt_Handler B DAbt_Handler IRQ_Handler B IRQ_Handler FIQ_Handler B FIQ_Handler
; Reset Handler
EXPORT Reset_Handler Reset_Handler
; 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 MOV SP, R0 SUB SL, SP, #USR_Stack_Size IMPORT TargetResetInit BL TargetResetInit
; Enter the C code
; IMPORT __main ; LDR R0, =__main ; BX R0 IMPORT __rt_entry EXPORT __main ENTRY __main B __rt_entry
; User Initial Stack & Heap AREA |.text|, CODE, READONLY
IMPORT __use_two_region_memory EXPORT __user_initial_stackheap __user_initial_stackheap
LDR R0, = Heap_Mem LDR R1, =(Stack_Mem + USR_Stack_Size) LDR R2, = (Heap_Mem + Heap_Size) LDR R3, = Stack_Mem BX LR
END
|
|
|
|
|
Oct 22 2008, 19:18
|
Участник

Группа: Участник
Сообщений: 18
Регистрация: 21-11-07
Пользователь №: 32 540

|
Цитата(aaarrr @ Oct 22 2008, 20:57)  Со стартапом все в порядке, только переход на __main назад верните, а то у Вас потом scatter отвалится. Пока я ковыряюсь в асме, не могли бы вы привести пример использования либо atof() либо sprintf() с декларированием буфера в котором будет строка, и с вызовом функции, может я не так что то делаю. Если не сложно.
|
|
|
|
Сообщений в этой теме
cyberrevenger LPC2378 и исключительные ситуации Oct 17 2008, 20:19 aaarrr Сначала разберитесь, какая именно инструкция при к... Oct 17 2008, 20:55 scifi Цитата(aaarrr @ Oct 18 2008, 00:55) Снача... Oct 18 2008, 09:37  zltigo Цитата(scifi @ Oct 18 2008, 11:37) Я обыч... Oct 18 2008, 10:28 cyberrevenger Короче намек понял, куда нужно копать, буду исслед... Oct 20 2008, 06:44 zltigo Цитата(cyberrevenger @ Oct 22 2008, 11:25... Oct 22 2008, 09:49 aaarrr Там трудно что-то не так делать.
Кодchar str... Oct 23 2008, 07:35 cyberrevenger Странно как то, пересоздал заново проект, запихнул... Oct 23 2008, 19:37
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|