尝试IAR下创建stm32新工程及bootloader

本文讲述了作者在IAR环境下创建STM32新工程的过程,包括使用startup.s文件、ICF配置、理解异常向量表和__vector_table,以及遇到的__iar_program_start未定义问题。文章探讨了是否可以在不使用汇编的情况下编写CM3 Bootloader,并讨论了全局变量初始化和__iar_data_init3的相关问题。

之前在iar下开发都是在官方例程或网络中下载的例程,开发时IAR直接跳入main中执行c代码,最近想创建个新的stm32工程来写一些汇编文件了解下CM3汇编指令,于是痛苦摸索了很多天。

起初创建了IAR新工程,使用的stm32f103x,加入了官方提供的iar工程文件:startup.s,原本想将keil下的startup文件直接copy过来,然而现实是keil和iar使用的一些汇编伪指令差别很大,一个百行的startup.s就有一万个错误,直接爆炸。不过官方分别提供了keil iar gcc对应的工程及启动文件,可以按需求使用。

startup.s文件中最重要的自然是__vector_table,一个异常向量表,表中记录了所有异常的入口地址

除第一个外,其它都是入口地址。CM3将第一个视为芯片复位后MSP的值,这里我一直有个猜测但还没有实验,CM3的MSP不需要手动配置,而是复位后默认去flash的0x80000000地址去取 (我的stm32f103 flash首地址从0x80000000开始,似乎也会被映射位0x0,两个地址都可用,但相对的都是flash的0地址。也就是说工程生成的bin文件前四个字节就是MSP的复位值),这样的话是不是CM3的bootloader不一定非要使用汇编来写,直接跑c也是可以的?如果说汇编能够使用16位指令来节省空间,那么c在编译时不会生成16位指令吗?

加入启动文件还要根据芯片选择官方提供的.ICF文件,ICF文件主要用来告诉编译器芯片的RAM ROM地址范围以及程序中的不同段在存储器中的存放位置。

IAR中有一些段的内部关键字如CSTACK,HEAP等

使用的ICF中将向量表放在flash的首地址

place at address mem:0x80000000 {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值