stm32一个简单的启动文件的编写

要注意的两个事:所有指令都不能顶格写

                            所有标号必须顶格写


 

;*****************************申请一个栈空间*****************************
Stack_size EQU 0x200   ;定义一个堆栈的大小,相当于宏定义
	AREA STACK ,NOINIT,READWRITE,ALIGN=3 
		            ;AREA 申请一段内存 
		            ;duizhan 这一段内存的名字
		            ;NOINIT 不要初始化
		            ;READWRITE 表示这一段内存空间可读可写
		            ;ALIGN=3 设置2^3对齐 即8字节对齐 原因有浮点数和long long数据运算	SPACE Stack_size    ;SPACE x 含义是指定一段内存空间的大小		
                            ;这条伪指令的意思是开辟一块x字节的区域用来作为主堆栈
_init_msp 
	;__init_msp是一个标号 即标记主堆栈的地址 
	;因为STM32是 满递减堆栈 所以在内存段申请后定义标号
;************************************************************************
 
;*******************************全局设置*********************************
	IMPORT main  ;引入符号,函数名也是一个标号,这句话说明函数源自于其他文件
	PRESERVE8    ;设置堆栈8字节对齐
	THUMB 		;指定编译器为thumb指令集
;***********************************************************************
		
;*************************定义一个RESRT段********************************
;RESET段是keil默认最先链接的段

	AREA RESET,DATA,READONLY
	    ;Cotex4 M4 中段向量表,其实就是一个数组,这个数组中的第一个元素存储主堆栈的地址
	    ; _Vectors[0] = __init_msp
	    ; _Vectors[1] = start 即标记RESET的起始地址
_Vectore
	DCD _init_msp ;中断向量表第0个元素存储主堆栈地址
	DCD _start    ;中断向量表的第二个存储 代码段的地址 start的含义是第一个开始执行的位置
	SPACE 0x400  ;每一个中断都需要一个对应的地址,要预留其他中断号的地址
;*************************************************************************
		
;******************************定义一个代码段******************************
	AREA |.text|,CODE,READONLY
	    ;定义一个代码段 名字为 .text 权限为只读	
_start PROC ;将这一段在调用时作为过程调用,
;仿真时更详细代码内容在这里编写
	BL main
	ENDP
        END

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值