如何在EWARM环境下使用汇编给STM32
本问题受到如下限制:1、开发环境不能变,必须是IAR的EWARM;
2、开发语言不能变,必须使用纯汇编,不可使用C/C++;
3、目标是cortex-m3,目前选的stm32f103c8;
劝我换环境的退散,问为啥不能换的退散。
未连接开发板,仅在本地软件调试。
因为找不到能用的汇编代码实例,
所以用IAR8.32.1建立了一个汇编的工程想在上边修改后编译运行调试,
IDE提供了一套默认的代码:
PUBLIC__iar_program_start
PUBLIC__vector_table
SECTION .text:CODE:REORDER(1)
;; Keep vector table even if it's not referenced
REQUIRE __vector_table
THUMB
__iar_program_start
main LDR R0, =0x1
NOP
NOP
B main
;; Forward declaration of sections.
SECTION CSTACK:DATA:NOROOT(3)
SECTION .intvec:CODE:NOROOT(2)
DATA
__vector_table
DCD sfe(CSTACK)
DCD __iar_program_start
DCD NMI_Handler
DCD HardFault_Handler
DCD MemManage_Handler
DCD BusFault_Handler
DCD UsageFault_Handler
DCD 0
DCD 0
DCD 0
DCD 0
DCD SVC_Handler
DCD DebugMon_Handler
DCD 0
DCD PendSV_Handler
DCD SysTick_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
SECTION .text:CODE:REORDER:NOROOT(1)
THUMB
NMI_Handler
HardFault_Handler
MemManage_Handler
BusFault_Handler
UsageFault_Handler
SVC_Handler
DebugMon_Handler
PendSV_Handler
SysTick_Handler
Default_Handler
__default_handler
CALL_GRAPH_ROOT __default_handler, "interrupt"
NOCALL __default_handler
B __default_handler
END我查了一下,这个是IAR自带的asm.s程序,在IDE文件夹里分为for arm和for m3。
分别在:C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.2\arm\config\template\project\asm\asm (ARM)
和C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.2\arm\config\template\project\asm\asm (Cortex-M)
其中for ARM的是可以直接编译运行调试的。
但是for m3的可以编译,但是运行时提示
User error: Stack pointer is setup to incorrect alignment.Stack addr = 0xCDCDCDCD
目测是个运行时错误;
问题是:
对for m3的代码如何修改才能开始调试?
或者
哪里能找到IAR下边纯汇编的m3代码实例?
第一行格式没问题,是我贴的时候不小心删了空格。
页:
[1]