本节课的第一个程序韦老师是想让大家见识一下未定义异常,而第二个程序是对第一个程序进行改进,防止在某些条件下执行不了,下面就来讲一下第2个程序改进了哪些地方并且有什么用。

程序在此路径中:源码文档图片\源码\源码_20180321_添加传感器\014_und_exception_014_004

第一个程序中uart0_init所在地址为300001e4

假设我们为NAND启动,在清除了BSS段之后,我们的程序完全拷贝到SDRAM里了,如果我们的程序很大,那么uart0_init就有可能在4K之后,那么采用b1相对跳转必定会出错,所以我们必须使用绝对地址来跳转到SDRAM上,修改代码如下:

使用ldr伪指令实现绝对跳转把程序跳转到SDRAM上去,不过其实这种做法也有可能有“危险”,下面我们结合反汇编来看一下

第58行把地址为0X300000dc的内存的值300000b0赋给了pc,也就是使程序跳转到了sdram:处的bl 300001f0,然后再跳转到uart0_init。ldr伪指令的执行机制是这样的:把sdram这个地址放到内存中,内存的地址由编译器帮我们做好,一般放在.S汇编文件的最后,然后再把这个内存的值赋给pc实现绝对跳转,倘若我们的.S文件大过4K,那岂不是也会出错,其实我们可以人为地来修改这个内存的地址,我们可以这样做(下面以未定义异常来举例说明):

当我们程序出现未定义异常时,会自动跳转到第7行的ldr pc, und_addr,该语句把und_addr(30000008)这个地址里的值(3000000c)赋给了pc,从而实现了绝对跳转,可以看到,我们人为地加入了und_addr:就是把存放要赋给pc的值的内存放到前面来(仅仅在_start:之后,_start:段存放的信息很少,所以不会出现上面用ldr伪指令存在的问题)

韦东山嵌入式第一期14课第004节_und异常模示程序示例_P笔记相关推荐

  1. 韦东山嵌入式开发板小结1

    韦东山嵌入式开发板小结1 一.连接[开发板-win10-虚拟机] 1.播放虚拟机VMware的ubuntu 16.04,设置win10和 虚拟机处于同一网段 >>>ipconfig ...

  2. 002_韦东山嵌入式Linux应用开发基础_实操碰到的问题集锦

    嵌入式Linux应用开发基础_韦东山教程思考笔记 配合<嵌入式Linux应用开发完全手册V5.1_IMX6ULL_Pro开发板> 文件目录 访问根/目录下,Filesystem Root目 ...

  3. 用OpenJTAG烧写程序到Flash—— 韦东山嵌入式Linux视频学习笔记03

    说明:本文仅在Windows环境下实验. 韦东山的JZ2440(v2),可以选择从Nor Flash启动,也可以选择从Nand Flash启动,不管从哪里启动,都需要Flash上有程序,没有程序的话, ...

  4. 如何告别半途而废——韦东山嵌入式Linux视频学习笔记00

    今天终于从柜子里翻出了韦东山的板子--JZ2440(V2),又翻出了当时买板子赠送的光盘,是的,我又要重新学习了.其实说"重新"是不对的,我当初就没有学完,学到一半放弃了(惭愧啊) ...

  5. 关于JTAG——韦东山嵌入式Linux视频学习笔记02

    1. JTAG的字面意思 JTAG --Joint Test Action Group,联合测试行动组. 2. JTAG标准 随着技术的发展,芯片的结构和功能越来越复杂,传统的使用万用表.示波器测试芯 ...

  6. 韦东山 嵌入式Linux应用开发基础知识 上【gcc makefile 输入设备

    1 main的输入参数,并且在命令行运行文件的时候输入 我的练习 先写了个单纯输出的hello 按照教程里那样写hello 所以gcc编译过程应该是 先创建一个.c文件 gcc -c -o hello ...

  7. 开发板、Windows、Ubuntu三者互联——韦东山嵌入式Linux学习笔记08

    实验环境: 1. Windows7 2. VMware12.0+Ubuntu 3. JZ2440 按理说,在物理机上安装Ubuntu操作系统是比较推荐的方法.不过,因为windows上有很多好用的工具 ...

  8. win7下不能使用dnw烧写的解决办法——韦东山嵌入式Linux学习笔记05

    本文实验环境: 1. windows 7(64bit) 2. JZ2440 一. 问题的提出--没有驱动 假设板子的 Nor Flash 上已经烧好了 u-boot,那么如何通过 u-boot 的US ...

  9. 开发板的I/O在哪里——韦东山嵌入式Linux视频学习笔记01

    一般来说,串口就是开发板的I/O(输入输出)接口.我们可以通过串口向板子发送命令,也可以通过串口把板子的状态信息打印出来. 板载串口和PC的连接 如果板子上有串口,且电脑上也有串口,那直接用串口线相连 ...

最新文章

  1. C++ remove、remove_copy、remove_if和remove_copy_if函数使用详解
  2. 15个实用的grep示例
  3. python中int input_关于python:如何接受int和float类型的输入?
  4. 2021年中国气体分离设备行业运营情况分析:气体分离及液化设备产量14.85万台[图]
  5. 学习QT之位置相关函数
  6. 【深度学习Deep Learning系列】word2vec和doc2vec
  7. python中的value是什么意思_Python self[name]=value是什么意思?
  8. 数字化转型|利用现代技术和通信手段|改变企业为客户创造价值的方式
  9. 计算机综合应用技能,系统测评计算机综合应用技能期末作业题稿.doc
  10. Python中对if __name__=='__main__:的理解
  11. macOS Big Sur到来,为Mac带来巨大变化
  12. Oracle最无奈错误PLS-00103
  13. python web py入门(4)-从数据库读取数据显示到网页
  14. AKA传奇和亚嵌那些事
  15. 打开matlab只出现蓝色的界面,win10 windows设置无法打开总卡在纯蓝色界面如何解决...
  16. 如何快速提升网站排名?
  17. consul注册报错 connectex: No connection could be made because the target machine actively refused it.
  18. sql又双叒叕报错了
  19. AutoLeaders控制组——邓斐熙
  20. 【gdgzezoi】Problem C: The Winds of Winter

热门文章

  1. 给div命名,使逻辑更加清晰
  2. Eclipse安装以及JDK环境变量配置
  3. JAVA多线程和并发基础面试问答(转载)
  4. 2014-07-28 使用Axure RP进行手机端BBS的原型设计
  5. fckeditor文件管理器添加查看、修改、删除文件功能[php]修正下载地址
  6. vant input框禁止调用手机键盘_【案例分享】适应网银等密码键盘的解决方案
  7. 全国计算机一级知识题及答案解析,全国计算机等级考试一级试题库大全完整版附参考答案...
  8. vc6.0 matlab混合编程,matlab2010 + vc6.0混合编程实例(调用dll)
  9. 小程序源码 租房管理系统_如何通过租房小程序开发快速引流
  10. android最新知识点总结,学习android之 知识点总结