LM3S之boot loader学习笔记-2

彭会锋

()

  上一篇中介绍了bootloader的基础知识,对于bootloader的作用和如何编写bootloader也有了大概的了解了,这一篇主要讲解bootloader启动引导的三大基础知识:LM3S的存储分布、cotex-m3的启动机制、flash编程,这三者是编写bootloader之前必须要了解的相关知识!


LM3S flash存储分布

  要做bootloader,根据上节中的分析,首先需要知道bootloader代码和用户应用程序代码应该放在哪里,lm3s芯片内部已经规定好了如何划分存储空间,必须根据它的要求进行划分,话说这是不能乱放东西的,哈哈!

lm3s为cotex-m3内核,32bit总线结构,所以可以内部寻址4G存储空间,同时Cortex-M3 内核具有固定的存储器映射,“通过把片上外设的寄存器映射到外设区,就可以简单地以访问内存的方式来访问这些外设的寄存器,从而控制外设的工作,所以片上外设可以使用C 语言来操作。”(参考“bootloader分析”)下面是lm3s9d92的存储器分布映射图,这里我给出了完整的4G存储器映射和低地址区域0x0000.0000 - 0x3FFF.FFFF的存储器映射。

  这里我们重点关注的是0x0000.0000 - 0x0007.FFFF 片上flash存储区域,因为该区域是我们存放bootloader和应用程序代码的区域,原则上该区域是可以随意划分的,不存在某些文章中所说的某些区域必须分配多少大小什么的误解;0x0100.0000 - 0x1FFF.FFFF区域为保留rom区域,内部存放了如下所示内容:

所以其实我们可以使用系统自带的bootloader的,这里我们不做过多描述!


向量表地址设置

  由于SRAM 是易失性存储器,故系统上电时,SRAM 中并没有内容,系统必须从Flash开始启动。向量表是异常产生时获取异常处理函数入口的一块连续内存,每一个异常都在向量表固定的偏移地址处(偏移地址以字对齐),通过该偏移地址可以获取异常处理函数的入口指针。

  这里重点要说的是向量表,Flash 空间起始地址处必须存放向量表,可以看出向量表的重要性;Cortex-M3微处理器的向量表包含4个必须项:初始堆栈指针、复位处理程序地址、NMI处理程序地址、硬故障处理程序地址;

  对向量表的地址设置也是需要搞明白的一点,在程序代码开始运行后,向量表的基地址也可以改变。通过软件设置NVIC 中的向量表偏移寄存器(NVIC_VTABLE,0xE000ED08),可以在任意32 字对齐处建立向量表。

最新文章

  1. JDom2的Xpath使用
  2. javase基础笔记1——简介和发展
  3. 【iCore3 双核心板_ uC/OS-III】例程九:任务信号量
  4. C# lock
  5. PDF 补丁丁 0.4.2.950 测试版发布:按文件夹合并生成单独的PDF文件
  6. App架构设计经验谈:服务端接口的设计
  7. Linux命令工具基础02 文件及目录管理
  8. 对于EditText的详细用法
  9. c#将Excel数据导入到数据库的实现代码(转载)
  10. push方法的页面间跳转--
  11. react-native学习笔记——ViewStack组件
  12. Liunx vi编辑器一些指令
  13. vue 子组件调用父组件的方法
  14. vue(四)-vuex与组件联合使用
  15. 使用C#+PowerShell进行Windows系统间文件传输
  16. 【黑客免杀攻防】读书笔记5 - PE格式讲解
  17. php实现多进程
  18. json.dumps(),json.loads(),json.dump(),json.load()方法的区别
  19. Go语言编程 (许式伟 等 著)
  20. NSTimer内存泄漏

热门文章

  1. gcc __attribute__
  2. Java并发编程实战3章
  3. python全栈开发从入门到放弃之常用模块和正则
  4. 有按钮的ListView
  5. 20145316《Java程序设计》第9周学习总结
  6. oracle中自定义type、以及java中传递list到过程中的例子
  7. Javascript 中的 call 和 apply
  8. cl.exe 命令行编译sqlite3 sqlite3.dll及sqlite3.exe
  9. .net 数据缓存(一)之介绍
  10. MR案例:输出/输入SequenceFile