二、IAR for ARM中STM32项目创建及其启动文件分析

IAR for ARM

STM32F10X官方固件库:

链接: https://pan.baidu.com/s/1U6vfGqp9IhhkvVuDXcxTtQ
提取码: 9mcx

IAR for ARM项目文件

下面是我自己写整理创建的IAR for ARM项目文件
链接: https://pan.baidu.com/s/189WZVhEDhhO98BA3I2Jfeg
提取码: m5fu

启动文件及一些重要标准库的分析

启动文件

在按照网上的教程创建IAR的STM32项目时,网上的教程都要求在项目文件中放入启动文件startup_stm32f10x_xx.s,可我在编译时发现,即使把启动文件去掉,IAR还是可以正常编译并下载Hex到芯片中并调试,所以我猜测这个启动文件应该是由IAR自动集成到Hex中的,在IAR主界面,右键左边的项目名称 -> Options... -> General Options -> Target -> Device - > 选择ST STM32F103RC,IAR大概会根据你选择的不同的Device,写入不同的启动文件汇编代码。


2019-6-6更新

最新发现,官方库的启动文件虽然不能加断点,但却包含中断服务的声明,如果没有包含官方库的启动文件,中断服务将不会启用,所以最终我还是将startup_stm32f10x_hd.s文件加入到startup目录中,这样就可以写中断服务了


接下来解析的启动文件,在固件库的【/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/iar/】路径中
因为不能给启动文件加断点,以下解析都是基于自己的理解和网上相关教程的解析:
启动文件的引导地址可以自己定义,如果使用默认的配置,IAR在编译时,将会使用IAR自己的系统库作为引导
310931-20190523201342594-356135057.png

__iar_program_start 这个入口函数就是IAR内部提供的入口函数,这个函数不能加断点,似乎只能通过反汇编的形式来分析,我在IAR程序目录搜索了一边,真的有很多cstartup.s文件,IAR提供了很多系列芯片的cstartup.s文件


;******************** (C) COPYRIGHT 2011 STMicroelectronics ********************
;* 文件名:     :  startup_stm32f10x_md.s
;* 作者            :  MCD Application Team
;* 版本            :  V3.5.0
;* 日期            :  2011年3月11日
;* 描述            :  STM32F10x是EWARM工具链中的中等容量像量表
;*                    :  这个模块执行了
;*                    :  - 设置初始化SP(堆栈寄存器)
;*                    :  - 配置时钟系统
;*                    :  - 设置IAR程序的入口函数
;*                    :  - 设置异常中断服务像量表的入口地址
;*
;*                      After Reset the Cortex-M3 processor is in Thread mode,
;*                      priority is Privileged, and the Stack is set to Main.
;********************************************************************************
;* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
;* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
;* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
;* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
;* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
;* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
;*******************************************************************************
;
; The modules in this file are included in the libraries, and may be replaced
; by any user-defined modules that define the PUBLIC symbol _program_start or
; a user defined start symbol.
; To override the cstartup defined in the library, simply add your modified
; version to the workbench project.
;
; The vector table is normally located at address 0.
; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
; The name "__vector_table" has special meaning for C-SPY:
; it is where the SP start value is found, and the NVIC vector
; table register (VTOR) is initialized to this address if != 0.
;
; Cortex-M version
;

        MODULE  ?cstartup        ; // 定义模块名称

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

        SECTION .intvec:CODE:NOROOT(2)

        EXTERN  __iar_program_start  ; // IAR程序暴露的入口地址名称
        EX
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值