当前位置: 首页 > article >正文

从裸机到嵌入式Linux—为什么所有芯片启动都是汇编语言开始

从裸机到嵌入式Linux—为什么所有芯片启动都是汇编语言开始

  • main函数是程序的入口,但不是上电最先执行的函数
  • 为什么是汇编语言
  • 持续更新

main函数是程序的入口,但不是上电最先执行的函数

对于很多人来说,main函数是所有程序的入口函数,逻辑的执行都是main函数开始的,这没有问题,但main函数并不是上电最先执行的函数,如果看过一些芯片启动的启动文件,其实不难发现,这些芯片的启动文件大多是.s结尾,也就是说这些启动文件是用汇编语言编写的,包括STM32、NXP i.MX 等等芯片,其实所有的执行函数代码的芯片都要经历执行汇编语言这个过程,只不过在单片机裸机阶段,厂商提供的工程给我们写好了启动过程需要的汇编代码,这个过程对我们而言是透明的,但是几乎所有的嵌入式Linux教程第一节实操课都是用汇编语言写启动代码。

为什么是汇编语言

main函数是C语言的函数入口,C语言的正常执行需要准备堆和栈,这样申请的内存空间、定义的变量、函数的跳转才能在内存中找到位置,函数才能正常的执行,但是汇编语言不需要,汇编语言直接操作寄存器,由于芯片刚刚上电可以通过电路配置寄存器的默认值,但是由于不同的芯片挂在的内存的不同包括内存空间分配的不同,不可能上来就设置好默认的C语言执行环境,需要汇编语言直接操作芯片和外设芯片的寄存器把环境准备好,然后跳入main函数。

持续更新


http://www.kler.cn/a/108520.html

相关文章:

  • Vue的基础使用
  • 基于STM32设计的森林火灾监测系统(华为云IOT)_263
  • Python中的HTML
  • 在esxi8.0中安装黑群晖的过程记录及小问题处理
  • 单片机设计电流与温度监控python上位机监控平台设计
  • 安装SQL server中python和R
  • 如何在filters中使用data中数据?
  • 工程建筑模板厂家货源,酚醛胶镜面胶合板实用型
  • 矩阵特征值与特征向量的理解
  • 深度强化学习用于博弈类游戏-基础测试与说明【1】
  • TCP / UDP 概念 + 实验(计网自顶向下)
  • 深度学习中的epoch, batch 和 iteration
  • 搭建微信小程序环境及项目结构介绍
  • Unity之ShaderGraph如何实现科幻空气墙
  • java中Map常见的面试问题,扩容问题,转红黑树的前提,解决Hash哈希冲突的方法
  • React-表单受控绑定和获取Dom元素
  • 基于群居蜘蛛算法的无人机航迹规划
  • 系统架构设计师-第16章-嵌入式系统架构设计理论与实践-软考学习笔记
  • 负载均衡的综合部署练习(hproxy+keepalived和lvs-DR+keepalived+nginx+Tomcat)
  • 漏洞复现-jquery-picture-cut 任意文件上传_(CVE-2018-9208)
  • windows8080端口占用
  • 更新电脑显卡驱动的操作方法有哪些?
  • Mac电脑配置Dart编程环境
  • YUV的红蓝颠倒(反色)的原因及解决
  • 通过Vue自带服务器实现Ajax请求跨域(vue-cli)
  • 【数据分析】上市公司半年报数据分析