博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
处理器boot的简单概念及误区
阅读量:5092 次
发布时间:2019-06-13

本文共 1036 字,大约阅读时间需要 3 分钟。

研一的时候在S3C6410的开发板上完成了一个简单的bootloader的设计,有一些想法可以顾及到其他处理器的设计上,在这里和大家分享一下。 晚一些的时候我再跟大家讲如何去设计 :)

   首先什么叫做bootloader?在我看来,其实bootloader就是一个搬运工,负责将串行或并行flash中的数据搬运至sdram,再将pc指针切换至sdram的映射地址。大家也许会问,8/16位单片机或者CORTEX-M系列的处理器为啥不需要bootloader,在这里其实是有误区的,其实这些处理器也是有bootloader的,后面我会给大家讲具体流程。拿8051和cortex-m系列的处理器来说事,这两种CPU都是哈佛结构的CPU,现在的CPU在设计时兼顾了哈佛和普林斯顿的优势,所以已经没有一个比较清晰的界限来定义CPU是属于哈佛或是普林斯顿结构。

   首先程序员写完了相关你可以“看见”的代码之后,按照大家的说法,编译链接后会生成一个hex文件,再利用各种方式将hex文件下载至单片机内部的flash,接着会对处理器进行复位操作,系统会从一个起始地址开始运行,系统会将数据段搬移至系统的ram中去。并初始化堆和栈,ram和flash分开,这便是哈佛结构的精髓之所在!

   有些人可能就会问了?我在使用keil或是iar的时候没有看到相关的”搬移“工作啊?真是成也萧何,败也萧何。这也算是当代软件的一个缺失吧,这些事情,keil的编译器都帮你做了,它自动的生成这部分“搬移”代码,而这个代码作为程序员是没有办法在IDE窗口中看到的,这也不能说不是一种悲哀。当然你如果感兴趣,也可以看的到这方面的过程,具体方式有很多种。例如如果你使用的mentor公司的gnu工具链的话,因为gcc没有自动生成”搬移“代码,因此在startup.a中是可以看到这部分搬移过程的。keil中也可以看到,提醒大家一下,objdump :)

  当代软件有时候帮你做的事,从理论上减轻了你的工作量,但是却让你没有办法接触到最为核心的知识。这种做法无异于饮鸩止渴,当然这仅仅只是我的看法,我是一直gnu的支持者,就向很多人是windows的支持者一样。在工具使用方面,一直都是仁者见仁,智者见智,在这里,应该提倡百家争鸣!好啦!今天就写这么多吧,改天跟大家讨论如何在bootloader中设计应该注意一些问题。

转载于:https://www.cnblogs.com/wqs131/p/3800216.html

你可能感兴趣的文章
jekyll 安装 ...
查看>>
微信页面关于点击按钮关注公众号放到链接里无关注按钮
查看>>
python 字典处理的一些坑
查看>>
构建oracle12c的Docker镜像
查看>>
用户权限命令(chmod,chown,umask,lsattr/chattr)
查看>>
Maven详解
查看>>
Linux系统中‘dmesg’命令处理故障和收集系统信息的7种用法
查看>>
数据结构 : Hash Table [II]
查看>>
面向对象的小demo
查看>>
获取地址栏参数
查看>>
java之hibernate之helloworld
查看>>
微服务之初了解(一)
查看>>
Iterator invalidation(迭代器失效)
查看>>
GDOI DAY1游记
查看>>
OpenGL(三)MFC中应用OpenGL的两个类
查看>>
小白眼中的git操作
查看>>
小米笔试题--数组移动
查看>>
php gd实现简单图片验证码与图片背景文字水印
查看>>
仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'XXX'中的标识列指定显式值。...
查看>>
winform中的小技巧【自用】
查看>>