Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ARM не работает после ресета
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
123kill12
программа написана и работает на IAR. все красиво и здорово. когда код запускаю из иара он нормально работает, но когда отключаю питание в включаю то нечего нет.
начал смотреть через отладчик. жму ресет и его переносит на 0xBE00(и там цыклится) и выдает сообщение

the stack pointer for stack 'CSTACK'(carrently 0x1000BDE0) is outside the stack range (0x010002558 to 0x10002D58)

что нужно сделать чтоб он работал после сброса и отключение питания?
miv
Цитата(123kill12 @ Sep 21 2010, 17:21) *
программа написана и работает на IAR. все красиво и здорово. когда код запускаю из иара он нормально работает, но когда отключаю питание в включаю то нечего нет.
начал смотреть через отладчик. жму ресет и его переносит на 0xBE00(и там цыклится) и выдает сообщение

the stack pointer for stack 'CSTACK'(carrently 0x1000BDE0) is outside the stack range (0x010002558 to 0x10002D58)

что нужно сделать чтоб он работал после сброса и отключение питания?

Что за ядро-то ??? ARM или Cortex ?
Вообще-то в любом случае надо StartUp ковырять wink.gif
scifi
По сути вопроса не скажу, но советую всё-таки назвать марку микроконтроллера. Потому что ARMов хороших и разных - как собак нерезанных.
rezident
Цитата(123kill12 @ Sep 21 2010, 19:21) *
что нужно сделать чтоб он работал после сброса и отключение питания?
Выбрать в проекте профиль Flash Debug наверное. То бишь настроить стартап так, чтобы программа загружалась и работала из Flash, а не из ОЗУ.
123kill12
npx1768 контроллер

можно по побробнее про где это в IAR сделать. я облазил все опции проекта не как не могу найти. помогите плз.


мой стартап
Код
        
MODULE  ?cstartup

       ;; Forward declaration of sections.
        SECTION CSTACK:DATA:NOROOT(3)

        SECTION .intvec:CODE:NOROOT(2)

        EXTERN  __iar_program_start
        PUBLIC  __vector_table
        PUBLIC  __vector_table_0x1c

        DATA
__vector_table
        DCD     sfe(CSTACK)                ; Top of Stack
        DCD     __iar_program_start        ; Reset Handler
        DCD     NMI_Handler                ; NMI Handler
        DCD     HardFault_Handler          ; Hard Fault Handler
        DCD     MemManage_Handler          ; MPU Fault Handler
        DCD     BusFault_Handler           ; Bus Fault Handler
        DCD     UsageFault_Handler         ; Usage Fault Handler
__vector_table_0x1c
        DCD     0                          ; Reserved
        DCD     0                          ; Reserved
        DCD     0                          ; Reserved
        DCD     0                          ; Reserved
        DCD     SVC_Handler                ; SVCall Handler
        DCD     DebugMon_Handler           ; Debug Monitor Handler
        DCD     0                          ; Reserved
        DCD     PendSV_Handler             ; PendSV Handler
        DCD     SysTick_Handler            ; SysTick Handler
        DCD     WDT_IRQHandler             ; Watchdog Handler
        DCD     TMR0_IRQHandler            ; TIMER0 Handler
        DCD     TMR1_IRQHandler            ; TIMER1 Handler
        DCD     TMR2_IRQHandler            ; TIMER2 Handler
        DCD     TMR3_IRQHandler            ; TIMER3 Handler
        DCD     UART0_IRQHandler           ; UART0 Handler
        DCD     UART1_IRQHandler           ; UART1 Handler
        DCD     UART2_IRQHandler           ; UART2 Handler
        DCD     UART3_IRQHandler           ; UART3 Handler
        DCD     PWM1_IRQHandler            ; PWM1 Handler
        DCD     I2C0_IRQHandler            ; I2C0 Handler
        DCD     I2C1_IRQHandler            ; I2C1 Handler
        DCD     I2C2_IRQHandler            ; I2C2 Handler
        DCD     SPI_IRQHandler             ; SPI Handler
        DCD     SSP0_IRQHandler            ; SSP0 Handler
        DCD     SSP1_IRQHandler            ; SSP1 Handler
        DCD     PLL0_IRQHandler            ; PLL0 Handler
        DCD     RTC_IRQHandler             ; RTC Handler
        DCD     EINT0_IRQHandler           ; EXT Interupt 0 Handler
        DCD     EINT1_IRQHandler           ; EXT Interupt 1 Handler
        DCD     EINT2_IRQHandler           ; EXT Interupt 2 Handler
        DCD     EINT3_IRQHandler           ; EXT Interupt 3 Handler
        DCD     ADC_IRQHandler             ; ADC Handler
        DCD     BOD_IRQHandler             ; BOD Handler
        DCD     USB_IRQHandler             ; USB Handler
        DCD     CAN_IRQHandler             ; CAN Handler
        DCD     GPDMA_IRQHandler           ; General Purpose DMA Handler
        DCD     I2S_IRQHandler             ; I2S Handler
        DCD     Ethernet_IRQHandler        ; Ethernet Handler
        DCD     RIT_IRQHandler             ; Repetitive Interrupt Timer Handler
        DCD     MotorControlPWM_IRQHandler ; Motor Control PWM Handler
        DCD     QE_IRQHandler              ; Quadrature Encoder Handler
        DCD     PLL1_IRQHandler            ; PLL1 Handler

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Default interrupt handlers.
;;

      PUBWEAK NMI_Handler      
      PUBWEAK HardFault_Handler
      PUBWEAK MemManage_Handler
      PUBWEAK BusFault_Handler  
      PUBWEAK UsageFault_Handler
      PUBWEAK SVC_Handler      
      PUBWEAK DebugMon_Handler  
      PUBWEAK PendSV_Handler    
      PUBWEAK SysTick_Handler  
      PUBWEAK WDT_IRQHandler    
      PUBWEAK TMR0_IRQHandler  
      PUBWEAK TMR1_IRQHandler  
      PUBWEAK TMR2_IRQHandler  
      PUBWEAK TMR3_IRQHandler  
      PUBWEAK UART0_IRQHandler  
      PUBWEAK UART1_IRQHandler  
      PUBWEAK UART2_IRQHandler  
      PUBWEAK UART3_IRQHandler  
      PUBWEAK PWM1_IRQHandler  
      PUBWEAK I2C0_IRQHandler  
      PUBWEAK I2C1_IRQHandler  
      PUBWEAK I2C2_IRQHandler  
      PUBWEAK SPI_IRQHandler    
      PUBWEAK SSP0_IRQHandler  
      PUBWEAK SSP1_IRQHandler  
      PUBWEAK PLL0_IRQHandler  
      PUBWEAK RTC_IRQHandler    
      PUBWEAK EINT0_IRQHandler  
      PUBWEAK EINT1_IRQHandler  
      PUBWEAK EINT2_IRQHandler  
      PUBWEAK EINT3_IRQHandler  
      PUBWEAK ADC_IRQHandler    
      PUBWEAK BOD_IRQHandler    
      PUBWEAK USB_IRQHandler    
      PUBWEAK CAN_IRQHandler    
      PUBWEAK GPDMA_IRQHandler  
      PUBWEAK I2S_IRQHandler    
      PUBWEAK Ethernet_IRQHandler        
      PUBWEAK RIT_IRQHandler              
      PUBWEAK MotorControlPWM_IRQHandler  
      PUBWEAK QE_IRQHandler              
      PUBWEAK PLL1_IRQHandler            

        SECTION .text:CODE:REORDER(1)
        THUMB
NMI_Handler      
HardFault_Handler
MemManage_Handler
BusFault_Handler  
UsageFault_Handler
SVC_Handler      
DebugMon_Handler  
PendSV_Handler    
SysTick_Handler  
WDT_IRQHandler    
TMR0_IRQHandler  
TMR1_IRQHandler  
TMR2_IRQHandler  
TMR3_IRQHandler  
UART0_IRQHandler  
UART1_IRQHandler  
UART2_IRQHandler  
UART3_IRQHandler  
PWM1_IRQHandler  
I2C0_IRQHandler  
I2C1_IRQHandler  
I2C2_IRQHandler  
SPI_IRQHandler    
SSP0_IRQHandler  
SSP1_IRQHandler  
PLL0_IRQHandler  
RTC_IRQHandler    
EINT0_IRQHandler  
EINT1_IRQHandler  
EINT2_IRQHandler  
EINT3_IRQHandler  
ADC_IRQHandler    
BOD_IRQHandler    
USB_IRQHandler    
CAN_IRQHandler    
GPDMA_IRQHandler  
I2S_IRQHandler    
Ethernet_IRQHandler        
RIT_IRQHandler              
MotorControlPWM_IRQHandler  
QE_IRQHandler              
PLL1_IRQHandler            
Default_Handler          
        B Default_Handler
        END



еще вопрос. если я запускаю программу через J-Link то программа может быть в озу JTAGа а не во влеше контроллера?
если это так то скажите как залить во флеш.
zuy
Цитата(123kill12 @ Sep 21 2010, 19:08) *
скажите как залить во флеш.

FlashMagic + RS232
sysel
1) убедиться, что программа попала во Flash в настройках линкера:
ROM start address = 0x00000100

2) убедиться, что в настройках линкера правильно указана область RAM
RAM start address = 0x10000000, End address = 0x10007FFF

3) Учтите, что у LPC17xx ОЗУ разбита на 2 блока с начальными адресами
0x10000000
и
0x20000000 (подключен к шине AHB, использовать для DMA)
см. стр 12 из юзерь мануала

4) Убедиться, что таблица векторов прерываний не перенесена в область ОЗУ. (Если работаете в IAR, посмотреть чтоб не было никаких макросов в на закладке Setup страницы Debugger).

5) Убедиться, что Вы вообще программируете флеш (В IAR должна стоять галочка Use flash loader(s) на закладке Download страницы Debugger).

Если не использовать Code Read Protection то все операции с МК можно делать без всяких FlashMagic-ов.
rezident
Нужно править icf-файл. Можно средствами самой IDE IAR. А в дебаггере указать, что использовать flash loader. Извиняюсь, что скриншоты прикладываю, но знаю, что для новичков в картинках обычно понятнее smile.gif Для пояснения я загрузил пример проекта из папки IAR examples, выбрав проект с настройками для работы из Flash.
123kill12
спс всем.
завтра попробую.
123kill12
2sysel

первый пункт сделал

второй пункт сделал

третий я не понял как сделать. поясните плз.
у меня есть два файла icf
LPC1768_RAM.icf
Код
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x00000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x00000100;
define symbol __ICFEDIT_region_ROM_end__   = 0x00007FFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x10000000;
define symbol __ICFEDIT_region_RAM_end__   = 0x10007FFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x800;
define symbol __ICFEDIT_size_heap__   = 0x400;
/**** End of ICF editor section. ###ICF###*/

define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];

define symbol _AHB_RAM_start__  = 0x2007C000;
define symbol _AHB_RAM_end__    = 0x20083FFF;
define region AHB_RAM_region = mem:[from _AHB_RAM_start__ to _AHB_RAM_end__];


define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
place in RAM_region   { readonly };
place in RAM_region   { readwrite,
                        block CSTACK, block HEAP };
place in AHB_RAM_region
                      { readwrite data section AHB_RAM_MEMORY  };

LPC1768_flash.icf
Код
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x00000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__   = 0x00000100;
define symbol __ICFEDIT_region_ROM_end__     = 0x0007FFFF;
define symbol __ICFEDIT_region_RAM_start__   = 0x10000000;
define symbol __ICFEDIT_region_RAM_end__     = 0x10007FFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__   = 0x800;
define symbol __ICFEDIT_size_heap__     = 0x400;
/**** End of ICF editor section. ###ICF###*/

define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];

define symbol _AHB_RAM_start__  = 0x2007C000;
define symbol _AHB_RAM_end__    = 0x20083FFF;
define region AHB_RAM_region = mem:[from _AHB_RAM_start__ to _AHB_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
do not initialize  { section .noinit };
do not initialize  { section USB_DMA_RAM };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
place in ROM_region   { readonly };
place in RAM_region   { readwrite,
                        block CSTACK, block HEAP };
place in AHB_RAM_region
                      { readwrite data section AHB_RAM_MEMORY, section USB_DMA_RAM,  section EMAC_DMA_RAM};

в этих вайлах вижу AHB но не могу найти в програматоре

четвертый сделал(был один макрос с ram
содержимое этого макроса
Код
execUserReset()
{
    __writeMemory32(0x10000000, 0xE000ED08, "Memory"); //Vector table remap at 0x10000000
}

execUserPreload()
{
    __writeMemory32(0x10000000, 0xE000ED08, "Memory"); //Vector table remap at 0x10000000
}


пятый пукт сделал.



пишет что "writing outside flash memory at address 0x10000000"

The debugging sesion could not be started.
either the debugger initilization falied? or else the file "D:\.....\RAM Debug\Exe\uart.out" was corrupt or of an unsupported format.
There might be more information in the Debug Log window


log
Wed Sep 22 10:41:01 2010: Loaded macro file: C:\Program Files\IAR Systems\Embedded Workbench 5.4\arm\config\flashloader\NXP\LPC17xx.mac
Wed Sep 22 10:41:01 2010: ------- Prepare for flashloader -------
Wed Sep 22 10:41:02 2010: 1224 bytes downloaded and verified (0.26 Kbytes/sec)
Wed Sep 22 10:41:02 2010: Loaded debugee: C:\Program Files\IAR Systems\Embedded Workbench 5.4\arm\config\flashloader\NXP\FlashLayout1RAM32K_Cortex.out
Wed Sep 22 10:41:02 2010: Target reset
Wed Sep 22 10:41:02 2010: Writing outside flash memory at address 0x10000000




еще вопрос. когда я просто в отладчике при выполнении программы нажимаю ресет она снова заходит в маин но потом вылетает в
Default_Handler
B Default_Handler
END

причем начал по шагам и натыкаюсь на то что код меняется в строчке до ресета все нормально после ресета какая то белеберда именно в в одной сточке.
рисунки приведены ниже




воообще все просто оказалось!!!!!!
miv
Цитата(sysel @ Sep 21 2010, 21:03) *
1) убедиться, что программа попала во Flash в настройках линкера:
ROM start address = 0x00000100

2) убедиться, что в настройках линкера правильно указана область RAM
RAM start address = 0x10000000, End address = 0x10007FFF

3) Учтите, что у LPC17xx ОЗУ разбита на 2 блока с начальными адресами
0x10000000
и
0x20000000 (подключен к шине AHB, использовать для DMA)
см. стр 12 из юзерь мануала

4) Убедиться, что таблица векторов прерываний не перенесена в область ОЗУ. (Если работаете в IAR, посмотреть чтоб не было никаких макросов в на закладке Setup страницы Debugger).

5) Убедиться, что Вы вообще программируете флеш (В IAR должна стоять галочка Use flash loader(s) на закладке Download страницы Debugger).

Если не использовать Code Read Protection то все операции с МК можно делать без всяких FlashMagic-ов.



DMA у LPC17xx к любому RAM и кроме того ко всей FLASH не считая переферии. А вот Ether и USB по DMA могут юзать тольк верхнюю RAM c адреса 0x20000000 ( вроде так )
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.