首页 > 其他分享 >启动文件—RISC-V通用MCU启动文件解释

启动文件—RISC-V通用MCU启动文件解释

时间:2023-09-27 15:38:08浏览次数:35  
标签:文件 函数 启动 中断 RISC 地址 跳转 data 变量

_start:是整个bin文件的起始,第一个指令是j handle_reset,跳转到下文的handle_reset处。

 

_vectop_base:是中断向量表,用于存放中断函数的入口地址

  .weak是弱声明,此处把所有的中断函数都写了死循环,1:  j 1b的意思就是死循环,如果在其它.c文件中有声明则以.c中的函数内容为准,这就是weak的作用,把.c中没有声明的函数都写为死循环。目的是防止跑飞,当设置了中断,但是没有写入口函数时,调试可以发现,触发中断后会进入这里的死循环。

  另外,VTF快速免表中断的意思,就是把中断的入口地址存放在特定地方,中断触发后直接跳转,省去了到中断向量表中查找入口地址的一步,从而加快了中断的进入速度,在追求极限速度的外设上会使用。

 

 

handle_reset:这里就是从_start跳转到的地方,设置gp、sp指针,然后把data段数据从FLASH中搬运到RAM中。

data段是存放的有数据的静态变量,如全局变量 u8 a=1;  或是在函数中声明为static u8 b=2;

data段的特点是1:静态变量,2:非0,有数据。

_data_lma是变量初始数据存在FLASH中的地址,_data_vma是变量在代码运行过程中RAM的编译地址,_edata是RAM中的data段的结束地址,这三个都是从ld文件中得到的。

 

清零 bss段

bss段是存放没有初始数据的静态变量的地方,如全局变量 u8 a=0; 函数中的静态变量 static u8 b=0;

bss段的特点是1.静态变量,2.未初始化,或初始化为0。

_sbss是bss的起始地址,_ebss是结束地址,都是RAM的地址。

 

设置CSR寄存器

CSR寄存器在内核手册中

0xbc0是corecfgr,主要是流水线指令预测等设置,没有开放,一般默认。

0x804是intsyscr,主要是中断配置,硬件压栈、中断嵌套等,203、003中断嵌套等级需要修改这个地方。

mstatus是状态寄存器,主要是浮点和权限设置,跑操作系统时,需要设置为全程机器模式。

 

设置中断向量表的地址到mtvec寄存器

然后调用SystemInit函数,配置时钟,最后跳转到main函数。

 

标签:文件,函数,启动,中断,RISC,地址,跳转,data,变量
From: https://www.cnblogs.com/wchmcu/p/17732814.html

相关文章

  • vue3项目结合ant design vue的upLoad组件实现上传和下载Excel文件
    1.上传文件  1.组件引入    import{ Button, Upload}from'ant-design-vue'  2.代码    <Upload      v-model:file-list="fileList"      name="file"      //限制文件格式      acce......
  • JavaScript下载base64位文件
    1/**2*下载文件3**/4functiondownloadExcel(base64Data){5varmyBlob=this.base64toBlob(base64Data);6varmyUrl=URL.createObjectURL(myBlob);7varlink=document.createElement("a");8......
  • FatFs文件系统移植应用笔记
    FatFs文件系统移植应用笔记使单片机拥有按文件访问存储器中数据的能力,要满足两个必要的条件。其一是存储器已完成格式化操作,即存储器按FAT/FAT16/FAT32等格式记录数据,其二是软件中实现文件系统功能,即能够按照存储器中文件记录的格式,操作已有的数据或添加新数据。FatFs是一个轻......
  • jenkins自动部署web项目到tomcat 和 本地启动不一致 tomact log中文乱码
    最近项目使用jenkins来自动化部署,部署后发现catalina.out日志中文是乱码的。如果使用手动部署不经过Jenkins的话项目就一切正常。所以我想有可能是因为jenkins部署的时候,导致目标服务器那边获取不到相应的环境变量。在tomcat日志中发现,手动启动使用的是自己安装的JDK,而用jenkins......
  • SpringBoot配置文件加载过程
    前置知识配置属性抽象和各种实现类PropertySource<T>下面是抽象类属性源和它的两个内部实现类介绍//抽象父类publicabstractclassPropertySource<T>{/**属性源名称**/protectedfinalStringname;/**属性源数据**/ protectedfinalTso......
  • 【文件上传】blob、file、formdata区别
    一、简单介绍blob是原始的也是用的最多的;file是input拿到的时候这个格式,从blob继承而来;base64类似于string那种,可以传输方便直接用于图像展示,而blob是原始的。一般base64用于图像展示,而blob、file用于文件上传。二、具体区别   formData就是将form表单元素的name和value进行组......
  • Selenium进阶——解决web 自动化中上传文件的问题
    在做ui自动化测试中,经常会遇到上传文件或者图片的场景,通常的解决方案是自动化工具+autoIT,在这里我介绍一种通过jdk自带api——java.awt.Robot来解决类似问题的方法。java.awt.Robot类主要用于模拟用户点击键盘上的按键,或者模拟用户敲击鼠标等动作。在做web测试时,弹出窗口如下图所......
  • C++启动.bat文件
    在C++中启动一个.bat文件,你可以使用标准库中的system函数。这个函数可以让你在C++程序中执行外部命令。#include<cstdlib>intmain(){//在这里替换成你的.bat文件的路径constchar*batchFilePath="C:\\Path\\To\\Your\\BatchFile.bat";//使用system函......
  • 解压.tar.gz文件的命令
    要解压以.tar.gz或.tgz扩展名结尾的文件,可以使用tar命令。通常,这些文件是使用tar和gzip压缩的。以下是解压.tar.gz文件的命令:tar-xzvf文件名.tar.gz具体来说,上述命令的选项含义如下:-x:表示解压(提取)文件。-z:表示使用gzip压缩/解压缩。-v:表示详细模......
  • linux文件上传至百度网盘备份
    一、摘要说明1.工具:百度网盘的python客户端--bypy2.下载方式:通过pip下载3.实现方案:安装pip-->安装bypy-->百度网盘授权-->测试验证-->扩展4.注意事项:使用bypy工具绑定后,由于百度PCSAPI权限限制,程序只能存取百度云端/apps(我的应用数据)/bypy目录下面的文件和目录。5.命令解释:......