Keil 启动文件详解

1. 启动文件详解

1.1 启动文件的主要任务

启动文件会完成以下五件事:

  1. 初始化堆栈指针 SP=__initial_sp
  2. 初始化PC指针 PC=Reset_Handler
  3. 初始化中断向量表
  4. 配置系统时钟
  5. 调用C库函数__main()初始化用户堆栈,从而最终调用main函数

1.2 启动文件中的汇编指令

在这里插入图片描述

1.3 启动代码讲解

1.3.1 栈的初始化

在这里插入图片描述
先进行栈的初始化,先定义Stack_Size 的大小为0x00000400(1024bit),不初始化,可读可写,8字节对齐,分配内存空间。栈的作用用于局部变量,函数调用,函数形参等的开销。
_initial_sp表示栈的结束,即栈的指针。

1.3.2 堆的初始化

在这里插入图片描述
类似栈的初始化,堆是用来动态内存的分配。

1.3.3 向量表初始化

在这里插入图片描述
先定义数据段:RESET,只读,并声明 _Vectros _Vectros_End _Vectros_Size
当内核响应一个异常,对应的异常服务例程会执行ISR,找到ISR的入口地址,内核使用向量表查表机制,通过NVIC的一个重定位寄存器指向向量表的地址。在复位后,该寄存器的值为0。

1.3.4 复位程序

在这里插入图片描述
先定义一个 |.test|的代码段,可读,再调用SystemInit函数初始化系统时钟,然后调用C函数库_main.

1.4 系统启动流程

  1. 系统上电
  2. 从0x00000000处取出MSP
  3. 从0x00000004处取出PC的初始值,这个值就是复位向量Reset_Handler,LSB必须是1
  4. 跳转到复位向量,执行Reset_Handler函数
  5. 执行C库的__main()函数
  6. 跳转到我们定义的main函数
    在这里插入图片描述
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
keil是一款用于嵌入式系统开发的集成开发环境(IDE),它提供了许多功能和工具来进行嵌入式软件的开发和调试。在一些特定的情况下,我们可能需要更换keil启动文件,例如要使用不同的启动文件来加载程序的时候。 要更换keil启动文件,我们可以按照以下步骤进行操作: 1. 打开keil软件,并载入需要更换启动文件的项目。 2. 在工程窗口中,找到并选中原始的启动文件(通常是以.s或者.asm结尾的汇编文件)。 3. 右键单击选中的启动文件,选择“Remove”(删除)来移除原始的启动文件。 4. 在新的启动文件所在的文件夹中,右键单击空白处,选择“Add Files to Group”(将文件添加到组中)。 5. 在弹出的对话框中,选择并添加新的启动文件。 6. 在上一步中添加的新的启动文件出现在工程窗口中,右键单击该文件,选择“Options for File”(文件选项)。 7. 在弹出的对话框中,选择“Assemble”(汇编)或者“Compile”(编译),然后点击“OK”按钮保存更改。 8. 现在,keil会使用新的启动文件来进行编译和链接。 通过以上步骤,我们可以成功更换keil启动文件。这样做可以允许我们使用不同的启动文件,从而加载不同的程序。需要注意的是,在更换启动文件之后,有可能需要进行其他适应性调整,如更新链接脚本等,以确保程序正常运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伽男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值