1. 要不要学习汇编
可以只懂一点,工作中基本不用,一旦用就是出了大问题

ldr : load 读内存
ldr r0, [r1]  : r1里存放的是地址值, 去这个地址读取4字节的内容,存入r0

str : stroe 写内存
str r0, [r1]  : r1里存放的是地址值, 把r0里的4字节数据存入这个地址

所有的汇编、C程序也好,终极目标就是:读写某个地址

2. 程序为何要分为代码段、数据段、BSS段
程序的指令等是只读的,可以把它们归为一类,以便运行时可以放在ROM等设备上,
当然也可以放在内存,只不过这块内存无需写操作

程序的全局变量等,是可读可写的,可以把它们归为一类,放在内存里

假设程序里有1百万个初始值为0的全局变量,
你最终编译出来的bin文件里要不要存放这1百万个0变量?
肯定没那么傻,不存!
怎么办?
把它们归为一类,只记录它们的内存起始地址、结束地址。
在程序运行之前,把这块内存全部清零

3. 栈的作用
3.1
调用C函数之前要设置栈,
因为在C函数的开头要保存某些值(比如返回地址), 这些值肯定要保存在内存里,
这块内存大家约定用sp寄存器指明位置,
这块内存就是栈

3.2 用来保存局部变量

4. 重定位/链接地址
使用全局变量时,是根据它的地址去读写内存。
这个地址跟链接脚本的起始地址密切相关
也可以知道:
要想正确访问到全局变量,程序运行之前应该位于它的链接地址上

4.1 NAND启动时,NAND前4K会被自动复制到片内SRAM并运行
    如果程序远超过4K,那么前4K的代码应该把程序完全复制到SDRAM
    问:SDRAM那么大,应该复制到哪个位置呢?
    答:复制到它的链接地址去
        因为全局变量等是以链接地址来访问的,在程序运行之前,这个地址上应该有正确值

由此也可以得到裸板框架:
a. 必要的硬件初始化:看门狗、时钟、SDRAM
b. 重定位: 把程序到FLASH上读到内存中它的链接地址处
c. 清除BSS
d. 调用C函数

5. 位置无关码
假设程序的链接地址是0x30000000,这是位于SDRAM上,
一上电是从0地址开始执行
问:为何0地址开始的那部分代码可以正确执行?
答:它们是使用位置无关的代码编写的
    a. 不访问全局变量/静态变量
    b. 跳转时使用相对跳转指令b, bl

test1:
                        b  test2  //如何实现跳转?
                                  b 当前值 + (test2 - test1)
....
....
test2:

参考<嵌入式LINUX应用开发完全手册> P38,<3.1.2 arm-linux-ld 选项>

韦东山yy公开课笔记(2)--汇编,段,栈,重定位/链接地址,位置无关吗的更多相关文章

  1. 韦东山yy公开课笔记(1)--各种杂的问题

    1,第四期的智能猫眼会有打电话和发短信的功能吗?   答:会有打电话功能,硬件上支持打电话就会支持发短信,只是软件上是否实现发短信现在未定.因为短信延迟太严重,不是可靠的. 2,请问关于makefil ...

  2. 韦东山yy公开课笔记(2)--各种杂的问题

    1. 编译器的版本和glibc库有对应关系吗,如何查看glibc的版本(glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc),编译器是不是只带glibc被编译生成的 . ...

  3. 斯坦福ML公开课笔记15—隐含语义索引、神秘值分解、独立成分分析

    斯坦福ML公开课笔记15 我们在上一篇笔记中讲到了PCA(主成分分析). PCA是一种直接的降维方法.通过求解特征值与特征向量,并选取特征值较大的一些特征向量来达到降维的效果. 本文继续PCA的话题, ...

  4. Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)” 清晰讲解logistic-good!!!!!!

    原文:http://52opencourse.com/125/coursera%E5%85%AC%E5%BC%80%E8%AF%BE%E7%AC%94%E8%AE%B0-%E6%96%AF%E5%9D ...

  5. 微软YY公开课[《微软中国云计算Azure平台体验与新企业架构设计》 周六晚9点

    YY频道是 52545291//@_勤_: YY账号真的是一次一账号啊! 全然记不得之前注冊的//@老徐FrankXuLei: 最火爆的微软免费公开课.第一次顶峰126人.第二次96人.第三次我们又来 ...

  6. 人工智能头条(公开课笔记)+AI科技大本营——一拨微信公众号文章

    不错的 Tutorial: 从零到一学习计算机视觉:朋友圈爆款背后的计算机视觉技术与应用 | 公开课笔记 分享人 | 叶聪(腾讯云 AI 和大数据中心高级研发工程师) 整    理 | Leo 出   ...

  7. Andrew Ng机器学习公开课笔记 – Factor Analysis

    网易公开课,第13,14课 notes,9 本质上因子分析是一种降维算法 参考,http://www.douban.com/note/225942377/,浅谈主成分分析和因子分析 把大量的原始变量, ...

  8. [置顶] 局部加权回归、最小二乘的概率解释、逻辑斯蒂回归、感知器算法——斯坦福ML公开课笔记3

    转载请注明:http://blog.csdn.net/xinzhangyanxiang/article/details/9113681 最近在看Ng的机器学习公开课,Ng的讲法循循善诱,感觉提高了不少 ...

  9. 斯坦福ML公开课笔记14——主成分分析

    上一篇笔记中,介绍了因子分析模型,因子分析模型使用d维子空间的隐含变量z来拟合训练数据,所以实际上因子分析模型是一种数据降维的方法,它基于一个概率模型,使用EM算法来预计參数. 本篇主要介绍PCA(P ...

随机推荐

  1. 整理sed实战修改多行配置技巧

    老男孩老师有关sed实战技巧分享,来自课堂教学内容实战1.在指定行前插入两行内容,分别为oldboy和oldgirl.提示:被修改的文件内容必须要大于等于2行 1 sed -i '2 ioldboy\ ...

  2. 2014年度辛星html教程夏季版第七节

    经过前面六节的学习,我们大致清楚了HTML教程中的基础内容,那么接下来我们开始继续向后推进,可以说,下面我们介绍一下HTML中的区块. ***************区块*************** ...

  3. 6.MVC框架开发(文件上传)

    1.需要设置表单的enctype="multipart/form-data"属性 2.在控制器中获取表单文件中数据 [HttpPost] public ActionResult A ...

  4. iOS 后台运行实现 --备用

    文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以,1.音乐2.location 3.voip 文二 ...

  5. ElasticSearch入门-搜索如此简单

    搜索引擎我也不是很熟悉,但是数据库还是比较了解.可以把搜索理解为数据库的like功能的替代品.因为like有以下几点不足: 第一.like的效率不行,在使用like时,一般都用不到索引,除非使用前缀匹 ...

  6. sublimtest3文件名乱码问题及解决方案

    在sublime text 3中,Preference, Settings-User,最后加上一行"dpi_scale": 1.0覆盖操作系统设置的DPI. 这是我的Setting ...

  7. DEPRECATED: Use of this script to execute hdfs command is deprecated.

    DEPRECATED: Use of this script to execute hdfs command is deprecated. 本人安装的hadoop版本是2.4.0的,但每次执行命令时都 ...

  8. python re.sub

    python re.sub   python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串然后把它替换成自己想要的字符串的方法下面给个例子:import relin ...

  9. 处理MySQL数据库出现大量Locked的一个案例 (转)

    本文转自:http://blog.itpub.net/7607759/viewspace-696781/ 做为一款轻量级数据库软件,MySQL在使用过程中遇到访问速度慢,或者无法响应这类的问题,解决方 ...

  10. 查看java的.class文件的方法

    在不通过eclipse等IDE安装反编译插件的情况下查看java的.class文件的方法:可以通过下载jd-gui class文件查看工具进行查看.如附件的“jd-gui.exe”程序. 1. 从网上 ...