最近測試以前的一個程序,一般都是打開以前寫的程序修改參數直接測試
但是發現以前的編譯后出現錯誤。
奇怪了,以前的出現都是調試好了的啊,一般都是沒有錯誤的,迅速找問題
跳轉到錯誤代碼行
代碼區域
1 Heap_Size EQU 0x00000000 2 3 AREA HEAP, NOINIT, READWRITE, ALIGN=3 4 __heap_base 5 Heap_Mem SPACE Heap_Size 6 __heap_limit 7 8 PRESERVE8 9 THUMB ;指定為THUMB代碼集 10 11 12 ; Vector Table Mapped to Address 0 at Reset 13 AREA RESET, DATA, READONLY ;偽指令指定一下數據將放到程序存儲區的開始。 14 EXPORT __Vectors 15 EXPORT __Vectors_End 16 EXPORT __Vectors_Size 17 18 __Vectors DCD __initial_spTop ; Top of Stack 棧首地址值(注意:CM3的棧指針是遞減的) 19 DCD Reset_Handler ; Reset Handler 復位函數的入口地址 20 DCD NMI_Handler ; NMI Handler 以下為響應的中斷函數入口地址 21 DCD HardFault_Handler ; Hard Fault Handler 22 DCD MemManage_Handler ; MPU Fault Handler 23 DCD BusFault_Handler ; Bus Fault Handler 24 DCD UsageFault_Handler ; Usage Fault Handler 25 DCD 0 ; Reserved 26 DCD 0 ; Reserved 27 DCD 0 ; Reserved 28 DCD 0 ; Reserved 29 DCD SVC_Handler ; SVCall Handler 30 DCD DebugMon_Handler ; Debug Monitor Handler 31 DCD 0 ; Reserved 32 DCD PendSV_Handler ; PendSV Handler 33 DCD SysTick_Handler ; SysTick Handler 34 35 ; External Interrupts 以下為STM32定義的中斷入口地址也是CM3定義的外部中斷(非CM3內核中斷)入口地址 36 DCD WWDG_IRQHandler ; Window Watchdog 37 DCD PVD_IRQHandler ; PVD through EXTI Line detect 38 DCD TAMPER_IRQHandler ; Tamper 39 DCD RTC_IRQHandler ; RTC 40 DCD FLASH_IRQHandler ; Flash 41 DCD RCC_IRQHandler ; RCC 42 DCD EXTI0_IRQHandler ; EXTI Line 0 43 DCD EXTI1_IRQHandler ; EXTI Line 1 44 DCD EXTI2_IRQHandler ; EXTI Line 2 45 DCD EXTI3_IRQHandler ; EXTI Line 3 46 DCD EXTI4_IRQHandler ; EXTI Line 4 47 DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 48 DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 49 DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 50 DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 51 DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 52 DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 53 DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 54 DCD ADC1_2_IRQHandler ; ADC1 & ADC2 55 DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX 56 DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 57 DCD CAN1_RX1_IRQHandler ; CAN1 RX1 58 DCD CAN1_SCE_IRQHandler ; CAN1 SCE 59 DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 60 DCD TIM1_BRK_IRQHandler ; TIM1 Break 61 DCD TIM1_UP_IRQHandler ; TIM1 Update 62 DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation 63 DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare 64 DCD TIM2_IRQHandler ; TIM2 65 DCD TIM3_IRQHandler ; TIM3 66 DCD TIM4_IRQHandler ; TIM4 67 DCD I2C1_EV_IRQHandler ; I2C1 Event 68 DCD I2C1_ER_IRQHandler ; I2C1 Error 69 DCD I2C2_EV_IRQHandler ; I2C2 Event 70 DCD I2C2_ER_IRQHandler ; I2C2 Error 71 DCD SPI1_IRQHandler ; SPI1 72 DCD SPI2_IRQHandler ; SPI2 73 DCD USART1_IRQHandler ; USART1 74 DCD USART2_IRQHandler ; USART2 75 DCD USART3_IRQHandler ; USART3 76 DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 77 DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line 78 DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend 79 DCD TIM8_BRK_IRQHandler ; TIM8 Break 80 DCD TIM8_UP_IRQHandler ; TIM8 Update 81 DCD TIM8_TRG_COM_IRQHandler ; TIM8 Trigger and Commutation 82 DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare 83 DCD ADC3_IRQHandler ; ADC3 84 DCD FSMC_IRQHandler ; FSMC 85 DCD SDIO_IRQHandler ; SDIO 86 DCD TIM5_IRQHandler ; TIM5 87 DCD SPI3_IRQHandler ; SPI3 88 DCD UART4_IRQHandler ; UART4 89 DCD UART5_IRQHandler ; UART5 90 DCD TIM6_IRQHandler ; TIM6 91 DCD TIM7_IRQHandler ; TIM7 92 DCD DMA2_Channel1_IRQHandler ; DMA2 Channel1 93 DCD DMA2_Channel2_IRQHandler ; DMA2 Channel2 94 DCD DMA2_Channel3_IRQHandler ; DMA2 Channel3 95 DCD DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5 96 __Vectors_End 97 98 __Vectors_Size EQU __Vectors_End - __Vectors 99 100 AREA |.text|, CODE, READONLY ;定義以下匯編函數將調用C函數 101 102 ; Dummy SystemInit_ExtMemCtl function 103 SystemInit_ExtMemCtl PROC 104 EXPORT SystemInit_ExtMemCtl [WEAK] 105 BX LR 106 ENDP 107 108 ; Reset handler routine 109 Reset_Handler PROC 110 EXPORT Reset_Handler [WEAK] ;這里就是復位函數了 111 IMPORT __main ;這個是定義一個外部的函數方便下邊調用。這個函數是編譯器自帶的C環境運行函數名 112 113 114 LDR R0, = SystemInit_ExtMemCtl ; initialize external memory controller 115 BLX R0 116 117 LDR R1, = __initial_sp ; restore original stack pointer 118 MSR MSP, R1 119 120 LDR R0, =__main ;跳轉上邊定義的外部函數處執行。這里需要解釋一下:這個“__main”函數不是我們在C語言中寫的“main”函數。但他在創建了C函數的運行環境后會跳轉到我們在C語言中寫的“main”函數中去。 121 BX R0 ;這個就是跳轉指令了 122 ENDP 123 124 ; Dummy Exception Handlers (infinite loops which can be modified) 以下為中斷函數的偽定義,當外部有對應的中斷函數時,這里的中斷函數不起作用。
作為一名資深碼農,還是要具備專業英文閱讀的能力.
錯誤:A1163E:未知操作指令R0,預指令或者宏錯誤.
也就是說R0未識別,記得以前看過博客好像是說
1.ARM匯編指令不支持頂格寫,否則不能識別
2. 聲明變量時不要有空格
可能是縮進造成的問題,。
就在前面加了一個空格。OK
0個錯誤,0個警告,全部重新生成。
The End!
歡迎加入C#群:160441098
嵌入式交流群:227262400