处理器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中设计应该注意一些问题。

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

时间: 2024-08-06 17:46:49

处理器boot的简单概念及误区的相关文章

凸包---(简单概念)

这里先介绍点概念(一般是点集覆盖问题)输入各个点的坐标 1. 将各点排序(必须的) ,为保证形成圈,把 P0 在次放在点表的尾 部: 2. 准备堆栈:建立堆栈 S,栈指针设为t,将0.1.2 三个点压入堆栈 S: 3. 对于下一个点 i 只要 S[t-1].S[t].i不做左转 就反复退栈: 将 i压入堆栈 S 4.堆栈中的点即为所求凸包: 其核心用 C 语言表示,仅仅是下面一段: t=-1; s[++t]=0; s[++t]=1; s[++t]=2; for (i=3;i<n;i++) { w

句柄的简单概念

1.  句柄概念 句柄是Windows程序中的概念,本质是一个4字节(64位程序中为8字节)整数值,用来标示不同实例. 由于数据在内存地址中是变动的,为管理内存,windows引入句柄概念. 2.  句柄与普通指针 指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上. 3.  句柄的使用 一个句柄,只有确定了一个项目的时候,才开始有意义.句柄对应着项目表中的一项,只有WINDOWS本身才能直接存取这个表,应用程序只能通过API函数来处理不同

端口和协议的简单概念

1.端口的简单概念: 192.168.33.1代表一台主机,但是主机上可能会有很多服务, 一台主机上的不同服务功能,就是通过端口区分,然后让外部人员访问. 远程连接服务 ssh  22端口 2.协议的简单概念: 汉语.英语,不同的服务提供了不同的端口,对应了不同的功能,通信方式可能也是不同的,这种通信方式我们就可以理解为协议. 一台主机上的不同服务功能,就是通过端口区分,不同的服务端口,客户端和服务器之间通信,就可能使用不同的协议

Webservice简单概念

一.序言 大家或多或少都听过 WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成 分.但是不得不承认的是WebService真的是一门新兴和有前途的技术,那么WebService到底是什么?何时应该用? 当前的应用程序开发逐步的呈现了两种迥然不同的倾向:一种是基于浏览器的瘦客户端应用程序,一种是基于浏览器的富客户端应用程序(RIA),当然后一种技术相对来说更加的时髦一些(如现在很流行的Html5技术),

Spring Boot之简单的MVC

最近开始看Spring Boot,发现其开发起来真是方便.今天就来实现一个简单的Spring MVC 请求,纯Java代码的哦. 1.Maven必不可少,先看看都加载了那些依赖: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20

maven+spring boot搭建简单微服务

项目需要使用spring boot,所以自学了几天,仅提供给新手,请根据文档查看-该项目仅是测试项目,并不完善和严谨,只实现了需要使用的基本功能.写该博客一是希望能够帮助刚学习的新人,二是加深自己的印象,如果忘了也可以再看看,有些片段是从其他博客学习来的,如有问题希望能提出来,由衷的表示感谢. 主要开发环境:jdk:1.8: maven:3.3:tomcat:8等. 涉及技术:spring boot.springMVC.maven.JdbcTemplate.json.HttpClient等. 推

Spring Boot Starters简单介绍

1.概述 依赖管理是任何复杂项目的关键方面.手动完成此操作并不理想; 你花在它上面的时间越多,你在项目的其他重要方面所花费的时间就越少. 构建Spring Boot启动器是为了解决这个问题.Starter POM是一组方便的依赖描述符,您可以在应用程序中包含这些描述符.您可以获得所需的所有Spring和相关技术的一站式服务,而无需搜索示例代码并复制粘贴依赖描述符. 有超过30个启动器 - 让我们在以下部分中看到它们中的一些. 2.Web Starter(servlet容器) 首先,我们来看看开发

spring boot发简单文本邮件

首先要去邮箱打开POP3/SMTP权限: 然后会提供个授权码,用来发送邮件.忘记了,可以点生成授权码再次生成. 1.引入spring boot自带的mail依赖,这里版本用的:<spring-boot.version>1.4.3.RELEASE</spring-boot.version> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sprin

关于凸优化的一些简单概念

http://www.cnblogs.com/tornadomeet/p/3300132.html 没有系统学过数学优化,但是机器学习中又常用到这些工具和技巧,机器学习中最常见的优化当属凸优化了,这些可以参考Ng的教学资料:http://cs229.stanford.edu/section/cs229-cvxopt.pdf,从中我们可以大致了解到一些凸优化的概念,比如凸集,凸函数,凸优化问题,线性规划,二次规划,二次约束二次规划,半正定规划等,从而对凸优化问题有个初步的认识.以下是几个重要相关概