• 处理器boot的简单概念及误区


    研一的时候在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中设计应该注意一些问题。

  • 相关阅读:
    打印沙漏
    秋季学期学习总结
    反射
    线程(二)join、yeild、同步(synchronized:同步块,同步方法;,Lock)、非线程安全单例模式、线程安全单例模式、多线程售卖电影票处理、通过线程依次打印A、B、C、wait和sleep
    线程(一)
    红包计算的方法(通过2倍指数法进行计算,通过线性切割法计算)
    Math常用类、Date类、Calendar类、两者相互转换
    Java包(访问修饰符的范围)、String字符串、StringBuilder类、基本类型和引用类型
    编写一个系统(登录、注册、验证用户名密码和验证码、覆盖存储用户)
    递归的使用:调用方法自身
  • 原文地址:https://www.cnblogs.com/wqs131/p/3800216.html
Copyright © 2020-2023  润新知