nomove 发表于 2019-4-11 11:00:15

如何在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代码实例?

nomove 发表于 2019-4-11 11:01:08

第一行格式没问题,是我贴的时候不小心删了空格。
页: [1]
查看完整版本: 如何在EWARM环境下使用汇编给STM32