MDK + STM 32 펌웨어 라 이브 러 리 시작 파일 startupstm32f10x_hd. s 기능 및 주석

원본 주소:http://blog.csdn.net/guozhongwei1/article/details/44491271
전주
  • 프로세서: STM32F10X 기
  • 펌웨어 라 이브 러 리 버 전: V 3.5
  • 디 렉 터 리 위치:... \ \ STM32F10xStdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\startup_stm32f10x_hd.s
  • 링크 컴 파일 도구: MDK
  • 파일 소개: MDK - ARM 툴 체인 용 STM32F10x 고밀도 장치 벡터 테이블 - STM32F10x 대 용량 장치 벡터 테이블 (중단), MDK - ARM 링크 도구;
  • 모듈 완성 내용:. 초기 SP 설정 – 초기 스 택 포인터 설정 (SP). 초기 PC 설정 = = ResetHandler - 초기 화 프로그램 카운터 (PC) 설정 = = 인 터 럽 트 서비스 프로그램 주 소 를 복원 합 니 다. 인 터 럽 트 벡터 테이블 에 있 는 구성원 에 게 실제 인 터 럽 트 서비스 서브루틴 주 소 를 부여 합 니 다. 시스템 시 계 를 설정 하고 STM3210E - EVAL 개발 판 에 있 는 외부 SRAM 을 설정 하여 데이터 내 저장 (사용자 선택 가능) 으로 사 용 됩 니 다. Branches tomain in the C library - - C 라 이브 러 리 로 갈 라 진main (최종 호출 main (). CortexM 3 프로세서 가 리 셋 된 후 스 레 드 모드 에 들 어가 특수 우선 순위 (특권 등급) 를 누 립 니 다. 스 택 은 MSP 메 인 스 택
  • 으로 설정 되 어 있 습 니 다.
  • < < Use Configuration Wizard in Context Menu > >: MDK 에서 원본 파일 첫 줄 에서 "/ / < < Use Configuration Wizard in Context Menu > > >" 키 가 감지 되면 Configuration Wizard 옵션 이 나타 납 니 다.
  • 비고: CMSIS: Cortex 마이크로 컨트롤 러 소프트웨어 인터페이스 표준 - ARM Cortex™ 마이크로 컨트롤 러 소프트웨어 인터페이스 표준 CM3: Cortex - M3
  • 격정
    1. 스 택 및 더미 초기 화
    ; Amount of memory (in bytes) allocated for Stack  
    ; Tailor this value to your application needs  
    ;  Stack Configuration  
    ;    Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>  
    ;   
    
    Stack_Size      EQU     0x00000400      ;    Stack_Size--- ,    0x00000400 ,1K --EQU    #define  
    
                    AREA    STACK, NOINIT, READWRITE, ALIGN=3 ;     STACK  ,      0,   ,       8      
    Stack_Mem       SPACE   Stack_Size  ;       Stack_Size        ;Stack_Mem:         ;  unsigned char Stack_Mem[Stack_Size];  
    __initial_sp    ;  __initial_sp,        。  
    
    ;  Heap Configuration  
    ;     Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>  
    ;   
    
    Heap_Size       EQU     0x00000200     ;  
    
                    AREA    HEAP, NOINIT, READWRITE, ALIGN=3 ;  
    __heap_base                             ;  __heap_base,         。  
    Heap_Mem        SPACE   Heap_Size       ;       Heap_Size          
    __heap_limit                            ;  __heap_limit,         。  

    위 더미 와 스 택 의 구체 적 인 주 소 는 프로젝트 컴 파일 후 발생 하 는 * map 파일 에서 볼 수 있 습 니 다.
    2. 인 터 럽 트 벡터 테이블 정의
                    PRESERVE8                ;      8    。  
                    THUMB                    ;       THUMB   。  
    
    
    ; Vector Table Mapped to Address 0 at Reset  
                    AREA    RESET, DATA, READONLY    ;  RESET   ,      
                    EXPORT  __Vectors                ;      __Vectors,              
                    EXPORT  __Vectors_End            ;  
                    EXPORT  __Vectors_Size           ;  
    /*       ,__Vectors          */  
    __Vectors       DCD     __initial_sp   ; Top of Stack       ,         ,FLASH 0  ,             
                    DCD     Reset_Handler              ; 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  
                    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  
    
                    ; External Interrupts   ;            
                    DCD     WWDG_IRQHandler            ; Window Watchdog  
                    DCD     PVD_IRQHandler             ; PVD through EXTI Line detect  
                    DCD     TAMPER_IRQHandler          ; Tamper  
                    DCD     RTC_IRQHandler             ; RTC  
                    DCD     FLASH_IRQHandler           ; Flash  
                    DCD     RCC_IRQHandler             ; RCC  
                    DCD     EXTI0_IRQHandler           ; EXTI Line 0  
                    DCD     EXTI1_IRQHandler           ; EXTI Line 1  
                    DCD     EXTI2_IRQHandler           ; EXTI Line 2  
                    DCD     EXTI3_IRQHandler           ; EXTI Line 3  
                    DCD     EXTI4_IRQHandler           ; EXTI Line 4  
                    DCD     DMA1_Channel1_IRQHandler   ; DMA1 Channel 1  
                    DCD     DMA1_Channel2_IRQHandler   ; DMA1 Channel 2  
                    DCD     DMA1_Channel3_IRQHandler   ; DMA1 Channel 3  
                    DCD     DMA1_Channel4_IRQHandler   ; DMA1 Channel 4  
                    DCD     DMA1_Channel5_IRQHandler   ; DMA1 Channel 5  
                    DCD     DMA1_Channel6_IRQHandler   ; DMA1 Channel 6  
                    DCD     DMA1_Channel7_IRQHandler   ; DMA1 Channel 7  
                    DCD     ADC1_2_IRQHandler          ; ADC1 & ADC2  
                    DCD     USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX  
                    DCD     USB_LP_CAN1_RX0_IRQHandler ; USB Low  Priority or CAN1 RX0  
                    DCD     CAN1_RX1_IRQHandler        ; CAN1 RX1  
                    DCD     CAN1_SCE_IRQHandler        ; CAN1 SCE  
                    DCD     EXTI9_5_IRQHandler         ; EXTI Line 9..5  
                    DCD     TIM1_BRK_IRQHandler        ; TIM1 Break  
                    DCD     TIM1_UP_IRQHandler         ; TIM1 Update  
                    DCD     TIM1_TRG_COM_IRQHandler    ; TIM1 Trigger and Commutation  
                    DCD     TIM1_CC_IRQHandler         ; TIM1 Capture Compare  
                    DCD     TIM2_IRQHandler            ; TIM2  
                    DCD     TIM3_IRQHandler            ; TIM3  
                    DCD     TIM4_IRQHandler            ; TIM4  
                    DCD     I2C1_EV_IRQHandler         ; I2C1 Event  
                    DCD     I2C1_ER_IRQHandler         ; I2C1 Error  
                    DCD     I2C2_EV_IRQHandler         ; I2C2 Event  
                    DCD     I2C2_ER_IRQHandler         ; I2C2 Error  
                    DCD     SPI1_IRQHandler            ; SPI1  
                    DCD     SPI2_IRQHandler            ; SPI2  
                    DCD     USART1_IRQHandler          ; USART1  
                    DCD     USART2_IRQHandler          ; USART2  
                    DCD     USART3_IRQHandler          ; USART3  
                    DCD     EXTI15_10_IRQHandler       ; EXTI Line 15..10  
                    DCD     RTCAlarm_IRQHandler        ; RTC Alarm through EXTI Line  
                    DCD     USBWakeUp_IRQHandler       ; USB Wakeup from suspend  
                    DCD     TIM8_BRK_IRQHandler        ; TIM8 Break  
                    DCD     TIM8_UP_IRQHandler         ; TIM8 Update  
                    DCD     TIM8_TRG_COM_IRQHandler    ; TIM8 Trigger and Commutation  
                    DCD     TIM8_CC_IRQHandler         ; TIM8 Capture Compare  
                    DCD     ADC3_IRQHandler            ; ADC3  
                    DCD     FSMC_IRQHandler            ; FSMC  
                    DCD     SDIO_IRQHandler            ; SDIO  
                    DCD     TIM5_IRQHandler            ; TIM5  
                    DCD     SPI3_IRQHandler            ; SPI3  
                    DCD     UART4_IRQHandler           ; UART4  
                    DCD     UART5_IRQHandler           ; UART5  
                    DCD     TIM6_IRQHandler            ; TIM6  
                    DCD     TIM7_IRQHandler            ; TIM7  
                    DCD     DMA2_Channel1_IRQHandler   ; DMA2 Channel1  
                    DCD     DMA2_Channel2_IRQHandler   ; DMA2 Channel2  
                    DCD     DMA2_Channel3_IRQHandler   ; DMA2 Channel3  
                    DCD     DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5  
    __Vectors_End   ;         
    
    __Vectors_Size  EQU  __Vectors_End - __Vectors    ;  __Vectors_Size  ,          :   -      
    
                    AREA    |.text|, CODE, READONLY    ;        .text,      

    3. 리 셋 핸들 러 호출
    ; Reset handler  
    Reset_Handler   PROC      ;        ,PROC…ENDP            。  
                    EXPORT  Reset_Handler             [WEAK]   ;        Reset_Handler  ,             
                    IMPORT  __main  ;      __main( __main C_Library    , main())  
                    IMPORT  SystemInit   ;              SystemInit, SystemInit             
                    LDR     R0, =SystemInit  ;//  C    SystemInit      
                    BLX     R0    ;   SystemInit                   
                    LDR     R0, =__main    
                    BX      R0  
                    ENDP  
    

    설명: 안내 프로그램 진입main (이 main 은 C Library 의 함수 이 며 main () 이 아 닙 니 다)
    4. 인 터 럽 트 벡터 표 구성원 할당 및 인 터 럽 트 서비스 프로그램 정의 (빈 함수)
    ; Dummy Exception Handlers (infinite loops which can be modified) Dummy      (       )  
    
    NMI_Handler     PROC  
                    EXPORT  NMI_Handler                [WEAK]  
                    B       .                   ;//    
                    ENDP  
    HardFault_Handler\  
                    PROC  
                    EXPORT  HardFault_Handler          [WEAK]  
                    B       .  
                    ENDP  
    MemManage_Handler\  
                    PROC  
                    EXPORT  MemManage_Handler          [WEAK]  
                    B       .  
                    ENDP  
    BusFault_Handler\  
                    PROC  
                    EXPORT  BusFault_Handler           [WEAK]  
                    B       .  
                    ENDP  
    UsageFault_Handler\  
                    PROC  
                    EXPORT  UsageFault_Handler         [WEAK]  
                    B       .  
                    ENDP  
    SVC_Handler     PROC  
                    EXPORT  SVC_Handler                [WEAK]  
                    B       .  
                    ENDP  
    DebugMon_Handler\  
                    PROC  
                    EXPORT  DebugMon_Handler           [WEAK]  
                    B       .  
                    ENDP  
    PendSV_Handler  PROC  
                    EXPORT  PendSV_Handler             [WEAK]  
                    B       .  
                    ENDP  
    SysTick_Handler PROC  
                    EXPORT  SysTick_Handler            [WEAK]  
                    B       .  
                    ENDP  
    
    Default_Handler PROC  ;         ,             ,  
    
                    EXPORT  WWDG_IRQHandler            [WEAK]  
                    EXPORT  PVD_IRQHandler             [WEAK]  
                    EXPORT  TAMPER_IRQHandler          [WEAK]  
                    EXPORT  RTC_IRQHandler             [WEAK]  
                    EXPORT  FLASH_IRQHandler           [WEAK]  
                    EXPORT  RCC_IRQHandler             [WEAK]  
                    EXPORT  EXTI0_IRQHandler           [WEAK]  
                    EXPORT  EXTI1_IRQHandler           [WEAK]  
                    EXPORT  EXTI2_IRQHandler           [WEAK]  
                    EXPORT  EXTI3_IRQHandler           [WEAK]  
                    EXPORT  EXTI4_IRQHandler           [WEAK]  
                    EXPORT  DMA1_Channel1_IRQHandler   [WEAK]  
                    EXPORT  DMA1_Channel2_IRQHandler   [WEAK]  
                    EXPORT  DMA1_Channel3_IRQHandler   [WEAK]  
                    EXPORT  DMA1_Channel4_IRQHandler   [WEAK]  
                    EXPORT  DMA1_Channel5_IRQHandler   [WEAK]  
                    EXPORT  DMA1_Channel6_IRQHandler   [WEAK]  
                    EXPORT  DMA1_Channel7_IRQHandler   [WEAK]  
                    EXPORT  ADC1_2_IRQHandler          [WEAK]  
                    EXPORT  USB_HP_CAN1_TX_IRQHandler  [WEAK]  
                    EXPORT  USB_LP_CAN1_RX0_IRQHandler [WEAK]  
                    EXPORT  CAN1_RX1_IRQHandler        [WEAK]  
                    EXPORT  CAN1_SCE_IRQHandler        [WEAK]  
                    EXPORT  EXTI9_5_IRQHandler         [WEAK]  
                    EXPORT  TIM1_BRK_IRQHandler        [WEAK]  
                    EXPORT  TIM1_UP_IRQHandler         [WEAK]  
                    EXPORT  TIM1_TRG_COM_IRQHandler    [WEAK]  
                    EXPORT  TIM1_CC_IRQHandler         [WEAK]  
                    EXPORT  TIM2_IRQHandler            [WEAK]  
                    EXPORT  TIM3_IRQHandler            [WEAK]  
                    EXPORT  TIM4_IRQHandler            [WEAK]  
                    EXPORT  I2C1_EV_IRQHandler         [WEAK]  
                    EXPORT  I2C1_ER_IRQHandler         [WEAK]  
                    EXPORT  I2C2_EV_IRQHandler         [WEAK]  
                    EXPORT  I2C2_ER_IRQHandler         [WEAK]  
                    EXPORT  SPI1_IRQHandler            [WEAK]  
                    EXPORT  SPI2_IRQHandler            [WEAK]  
                    EXPORT  USART1_IRQHandler          [WEAK]  
                    EXPORT  USART2_IRQHandler          [WEAK]  
                    EXPORT  USART3_IRQHandler          [WEAK]  
                    EXPORT  EXTI15_10_IRQHandler       [WEAK]  
                    EXPORT  RTCAlarm_IRQHandler        [WEAK]  
                    EXPORT  USBWakeUp_IRQHandler       [WEAK]  
                    EXPORT  TIM8_BRK_IRQHandler        [WEAK]  
                    EXPORT  TIM8_UP_IRQHandler         [WEAK]  
                    EXPORT  TIM8_TRG_COM_IRQHandler    [WEAK]  
                    EXPORT  TIM8_CC_IRQHandler         [WEAK]  
                    EXPORT  ADC3_IRQHandler            [WEAK]  
                    EXPORT  FSMC_IRQHandler            [WEAK]  
                    EXPORT  SDIO_IRQHandler            [WEAK]  
                    EXPORT  TIM5_IRQHandler            [WEAK]  
                    EXPORT  SPI3_IRQHandler            [WEAK]  
                    EXPORT  UART4_IRQHandler           [WEAK]  
                    EXPORT  UART5_IRQHandler           [WEAK]  
                    EXPORT  TIM6_IRQHandler            [WEAK]  
                    EXPORT  TIM7_IRQHandler            [WEAK]  
                    EXPORT  DMA2_Channel1_IRQHandler   [WEAK]  
                    EXPORT  DMA2_Channel2_IRQHandler   [WEAK]  
                    EXPORT  DMA2_Channel3_IRQHandler   [WEAK]  
                    EXPORT  DMA2_Channel4_5_IRQHandler [WEAK]  
    ;           
    WWDG_IRQHandler  
    PVD_IRQHandler  
    TAMPER_IRQHandler  
    RTC_IRQHandler  
    FLASH_IRQHandler  
    RCC_IRQHandler  
    EXTI0_IRQHandler  
    EXTI1_IRQHandler  
    EXTI2_IRQHandler  
    EXTI3_IRQHandler  
    EXTI4_IRQHandler  
    DMA1_Channel1_IRQHandler  
    DMA1_Channel2_IRQHandler  
    DMA1_Channel3_IRQHandler  
    DMA1_Channel4_IRQHandler  
    DMA1_Channel5_IRQHandler  
    DMA1_Channel6_IRQHandler  
    DMA1_Channel7_IRQHandler  
    ADC1_2_IRQHandler  
    USB_HP_CAN1_TX_IRQHandler  
    USB_LP_CAN1_RX0_IRQHandler  
    CAN1_RX1_IRQHandler  
    CAN1_SCE_IRQHandler  
    EXTI9_5_IRQHandler  
    TIM1_BRK_IRQHandler  
    TIM1_UP_IRQHandler  
    TIM1_TRG_COM_IRQHandler  
    TIM1_CC_IRQHandler  
    TIM2_IRQHandler  
    TIM3_IRQHandler  
    TIM4_IRQHandler  
    I2C1_EV_IRQHandler  
    I2C1_ER_IRQHandler  
    I2C2_EV_IRQHandler  
    I2C2_ER_IRQHandler  
    SPI1_IRQHandler  
    SPI2_IRQHandler  
    USART1_IRQHandler  
    USART2_IRQHandler  
    USART3_IRQHandler  
    EXTI15_10_IRQHandler  
    RTCAlarm_IRQHandler  
    USBWakeUp_IRQHandler  
    TIM8_BRK_IRQHandler  
    TIM8_UP_IRQHandler  
    TIM8_TRG_COM_IRQHandler  
    TIM8_CC_IRQHandler  
    ADC3_IRQHandler  
    FSMC_IRQHandler  
    SDIO_IRQHandler  
    TIM5_IRQHandler  
    SPI3_IRQHandler  
    UART4_IRQHandler  
    UART5_IRQHandler  
    TIM6_IRQHandler  
    TIM7_IRQHandler  
    DMA2_Channel1_IRQHandler  
    DMA2_Channel2_IRQHandler  
    DMA2_Channel3_IRQHandler  
    DMA2_Channel4_5_IRQHandler  
                    B       .  
    
                    ENDP  
    
                    ALIGN    ;                 
    

    5. 스 택 및 스 택 초기 화 행위
    ;*******************************************************************************  
    ; User Stack and Heap initialization--         
    ;*******************************************************************************  
                     IF      :DEF:__MICROLIB  ;       __MICROLIB  
    
                     EXPORT  __initial_sp  
                     EXPORT  __heap_base  
                     EXPORT  __heap_limit  
    
                     ELSE  
    
                     IMPORT  __use_two_region_memory  ;      --      ,             
                     EXPORT  __user_initial_stackheap  
    
    __user_initial_stackheap ;      --             ,         ,  
                                                        ;         ,           ,      。    
                     LDR     R0, =  Heap_Mem      
                     LDR     R1, =(Stack_Mem + Stack_Size)  
                     LDR     R2, = (Heap_Mem +  Heap_Size)  
                     LDR     R3, = Stack_Mem  
                     BX      LR  
    
                     ALIGN  
    
                     ENDIF  
    
                     END  ;END  ,         

    6. ARM m3 C 는 startup 을 어떻게 호출 합 니까?stm32f10x_hd. s 파일 의?
      startup_stm32f10x_hd. s 의 대부분 내용 은 C 에서 호출 된 것 이 아니 라 C 프로그램 전에 실 행 된 것 입 니 다.m3 에 전 화 를 걸 면 0 주소 에서 MSP 를 읽 은 다음 0x4 주소 에서 리 셋 벡터 를 읽 고 리 셋 이상 서비스 프로그램 Reset 으로 이동 합 니 다.Handler.MDK 를 사용 하면 프로젝트 설정 Debug 아래 run to main () 에서 지우 고 디 버 깅 에 들 어가 면 첫 번 째 문장 이 Reset 인 것 을 알 수 있 습 니 다.핸들 러 의 첫 마디.  Reset_Handler 는 startupstm32f10x_hd. s 에서 정의 하 는 것 은 시스템 을 초기 화하 고 main 함수 에 들 어 갑 니 다.벡터 표 도 startup. s 에서 정 의 된 것 입 니 다. 왜 프로그램 이 컴 파일 된 후에 벡터 표 가 0 주소 에 있 는 지 에 대해 서 는 벡터 표 앞 에 AREA RESET, CODE, READOnly 와 유사 한 성명 이 있 기 때 문 입 니 다.MDK 에서 생 성 된 분산 로드 파일 에서 RESET 는 플래시 의 0 주소 에 설정 되 어 벡터 시트 의 주 소 를 규정 합 니 다.
    막 을 내리다
    지령
    AREA 의사 명령: AREA 의사 명령 은 코드 세그먼트 나 데이터 세그먼트 이름 을 정의 하 는 데 사 용 됩 니 다.ARM 어 셈 블 리 프로 그래 밍 은 세그먼트 식 디자인 을 사용 하고 하나의 ARM 소스 프로그램 은 적어도 하나의 코드 세그먼트 가 필요 하 며 큰 프로그램 은 몇 개의 코드 세그먼트 와 데이터 세그먼트 를 포함 할 수 있 습 니까?의사 명령 형식: AREA sectionname (, attr 곶 {, attr}... 상용 속성: CODE 속성: 코드 세그먼트 정의 에 사용 되 며, 기본 값 은 READOnly 입 니 다.DATA 속성: 데이터 세그먼트 를 정의 하 는 데 사 용 됩 니 다. 기본 값 은 READWRITE 입 니 다.READOnly 속성: 이 단락 을 제도 로 지정 하고 코드 단락 은 기본적으로 READOnlY 입 니 다.REATWRITE 속성: 읽 고 쓸 수 있 는 이 단락 을 지정 합 니 다. 데이터 세그먼트 의 기본 속성 은 REATWRITE 입 니 다.ALIGN 속성: 정렬 방식 을 지정 합 니 다.ALIGN n 명령 의 정렬 값 은 n 또는 2 ^ n 두 가지 방안 이 있 습 니 다. 여 기 는 두 번 째 방안 으로 뒤의 명령 8 바이트 정렬 을 지정 합 니 다.NOINIT 속성: 이 데이터 세그먼트 는 메모리 셀 만 유지 하고 각 시작 값 을 메모리 셀 에 기록 하지 않 았 습 니 다. 즉, 메모리 셀 값 을 0 으로 초기 화 하 는 것 입 니 다.e.g:AREA STACK, NOINIT, READWRITE, ALIGN=3 ;STACK 세그먼트 를 정의 합 니 다. 메모리 가 0 으로 초기 화 되 고 읽 기와 쓰기 가 가능 하 며 뒤쪽 명령 어 8 바이트 정렬 을 지정 합 니 다.
    SPACE: SPACE 는 메모리 셀 을 할당 하고 0 으로 초기 화 합 니 다.unsigned char DataBuf [100] 로 이해 할 수 있 습 니 다.의사 명령 형식: {label} SPACE expr 중: label 메모리 블록 시작 주소 레이 블.expr 가 할당 할 메모리 바이트 수 입 니 다.의사 명령 어 응용 예 는 다음 과 같다. AREA DataRA, DATA, READWROTE;DataRAM DataBuf SPACE 1000 이라는 데이터 세그먼트 를 설명 합 니 다.1000 바이트 공간 할당 e. g: StackMem SPACE Stack_Size;한 단락 의 크기 를 Stack 로 개척 하 다Size 의 메모리 공간 을 창고 로 사용 하기;Stack_Mem: 메모리 블록 시작 주소 표시;서명 되 지 않 은 char DataBuf [100] 와 유사 합 니 다.
    IMPORT 와 EXTERN: IMPORT 위조 명령 지시 컴 파일 러 의 현재 기 호 는 원본 파일 에서 정 의 된 것 이 아니 라 다른 원본 파일 에서 정 의 된 것 입 니 다. 원본 파일 에서 이 기 호 를 참조 할 수 있 습 니 다.EXTERN 은 마찬가지 입 니 다.알림 컴 파 일 러 이 레이 블 은 다른 파일 에서 정의 되 지만 이 파일 에서 사용 해 야 합 니 다. 비교적 자주 사용 하 는 방법 은 어 셈 블 리 언어 에서 C 함 수 를 호출 할 때..... 명령 형식: IMPORT symbol {[WEAK]} EXTERN symbol {[WEAK]} 입 니 다. 그 중에서 symbol 은 설명 할 기호 이름 입 니 다.[WEAK] 이 옵션 을 지정 하면 symbol 이 모든 원본 프로그램 에서 정의 되 지 않 으 면 컴 파 일 러 도 오류 가 발생 하지 않 습 니 다. 또한 컴 파 일 러 는 현재 INCLUDE 가 들 어 오지 않 은 라 이브 러 리 에서 이 레이 블 을 찾 지 않 습 니 다.EXPORT 함수 가 WEAK 로 고 를 가지 고 있 고 다른 소스 코드 가 동명 함 수 를 정의 하지 않 았 다 면 연결 할 때 이 함수 입 니 다.그렇지 않 으 면 다른 동명 함수 입 니 다.이 메커니즘 은 클래스 의 계승 과 약간 비슷 하 다. 모두 하나의 함수 가 다른 함 수 를 가 렸 다.다른 것 은 WEAK 의 이 가 려 진 것 은 철저히 다른 함 수 를 사라 지게 하 는 것 이다.e.g:EXPORT Reset_Handler [WEAK] ;외부 에서 Reset 을 정의 하면Handler, 외부 정의 우선 실행, 그렇지 않 으 면 이 파일 의 함수 정의. IMPORTmain
    DCD: DCD 는 문자 메모리 셀 을 할당 하고 의사 명령 의 expr 로 초기 화 합 니 다.DCD 의사 명령 이 분 배 된 메모 리 는 글자 정렬 이 필요 합 니 다. 일반적으로 데이터 시트 나 다른 상 수 를 정의 할 수 있 습 니 다.의사 명령 형식: {label} DCD expr {, expr} {, expr}... 그 중: label 메모리 블록 시작 주소 표시.expr 상수 표현 식 이나 프로그램의 레이 블 입 니 다.메모리 할당 바이트 수 는 expr 개수 에 의 해 결 정 됩 니 다.
    LDR: 변수의 주 소 를 가 져 와 유 니 버 설 레지스터 (예 를 들 어 R1) 에 넣 습 니 다 – 참조: arm 어 셈 블 리 - ldr 로드 명령, ldr 의사 명령 - 그 글 의 해석 이 약간 어 리 석 습 니 다. COUNT EQU 0x 40003100;COUNT 주 소 는 0x 40003100???????e.g:IMPORT SystemInit    LDR R0, =SystemInit ;C 파일 의 SystemInit 함수 주소 가 져 오기
    BLX: 되 돌아 오고 상태 전환 명령 을 가 져 옵 니 다.BX: 상태 전환 이 있 는 점프 명령.B: 지정 한 주소 로 이동 합 니 다.
    기타
    Top of Stack: 스 택 상단 포인터, 벡터 시트 의 시작 에 놓 여 있 습 니 다. FLASH 의 0 주소, 리 셋 후 스 택 상단 지침 을 먼저 불 러 옵 니 다.Reset Handler: 리 셋 이상, 스 택 지붕 을 불 러 온 후 첫 번 째 로 실 행 된 것 이 며 되 돌아 오지 않 습 니 다.Usage Fault Handler: 용법 오류 가 중단 되 었 습 니 다. 일반적으로 사전 추출 값 이나 위치 명령, 데이터 처리 등 오류 가 있 습 니 다.SVCAL Handler: 시스템 호출 이상 은 주로 운영 체제 커 널 서 비 스 를 호출 하기 위 한 것 입 니 다.PendSV Handler: 이상 이 걸 려 있 습 니 다. uCOS - II 로 사용 되 는 컨 텍스트 전환 이상 을 볼 수 있 습 니 다. 이 는 권장 되 는 것 입 니 다. Cortex - M3 는 이상 이 발생 했 을 때 R0 - R3, R12, R13 (스 택 포인터 SP), R14 (링크 주소, 반환 주소 LR 이 라 고도 함, 이상 이 되 돌 아 왔 을 때 사용), R15 (프로그램 카운터 PC, 현재 프로그램 + 4) 를 자동 으로 저장 하기 때 문 입 니 다.중단 완료 시 자동 으로 복 구 됩 니 다. R4 - R11 만 저장 하면 중단 응답 과 컨 텍스트 전환 시간 을 크게 줄 일 수 있 습 니 다.설명: 이 곳 은 인 터 럽 트 레지스터 저장 문제 와 관련 이 있 습 니 다. 모든 실행 모드 에서 그룹 레지스터 가 같은 물리 적 레지스터 를 가리 키 지 않 기 때문에 시스템 에서 특별한 용도 로 사용 되 지 않 습 니 다. 따라서 인 터 럽 트 나 이상 처리 로 모드 전환 을 할 때 서로 다른 모드 (여 기 는 '스 레 드' 와 '특권') 가 같은 물리 적 레지스터 를 사용 합 니 다.레지스터 의 데이터 가 파 괴 될 수 있 습 니 다.이것 도 흔히 말 하 는 '관건 적 인 코드 세그먼트' 와 'l 임계 구역' 이 보호 하 는 원인 이다.SysTick Handler: 타이머, 운영 체제 커 널 시계.

    좋은 웹페이지 즐겨찾기