查看: 2057|回复: 0

[原创] 【一网打尽】rene翻译Lesson 1 OK01

[复制链接]
  • TA的每日心情

    2015-8-29 20:27
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2015-3-28 08:46:39 | 显示全部楼层 |阅读模式
    分享到:
    木先生的原贴:https://www.cirmall.com/bbs/thread-40997-1-2.html
    1课ok01
    这堂课包含解释ok01如何开始,教你如何使‘好’或‘行为’LED在Raspberry Pi板附近的RCA和USB端口。这种光是原来标记好但已更名为作用于第二代的Raspberry Pi板。
    1开始
    我想在这一点上,你已经访问下载页面,并获得必要的GNU工具链。同时在下载页面是一个叫做系统模板文件。请下载并解压到一个新的目录。
    2开始
    “。的文件扩展名通常用于各种形式的汇编代码,我们要记住这是ARMv6。
    现在你已经提取的模板,创建一个新文件在“源”目录被称为“主要的”。该文件将包含该操作系统的代码。要明确的,文件夹结构看起来应该像这样:
    建立/(空)源/ main.skernel.ldlicensemakefile
    打开“主要的”。在一个文本编辑器,我们可以开始输入汇编代码。树莓PI使用的各种组件的代码称为armv6,所以这就是我们要写。
    在第一个命令复制。
    init。部分。
    _start国际化。
    _start:
    事实上,没有这些做在Raspberry Pi,这些都说明汇编。汇编程序是将汇编代码,我们之间的了解,和二进制机器码,Raspberry Pi的理解。在汇编代码,每行是一个新的命令。这里的第一行告诉汇编程序[ 1 ],把我们的代码。我提供的模板导致的部分叫代码。init被放在输出开始。这是很重要的,我们要确保我们可以控制哪些代码运行的第一。如果我们不这样做,在按字母顺序排列的第一个文件名的代码将运行第一!的。部分命令只是告诉汇编程序,将代码段,从这一点到下一个。部分或文件的结尾。
    在汇编代码,你可以跳过线,并把空间之前和之后的可读性命令的帮助。
    接下来的两行有停止警告消息并没有那么重要。
    第一行3
    现在我们真的要写代码。在汇编代码,计算机只要通过代码,以在每个指令,除非告诉否则。每个指令开始新的一行。
    复制以下指令。
    LDR R0,= 0x20200000
    LDR REG,=瓦尔给出的数字值到寄存器namedreg。
    这是我们的第一个命令。它告诉处理器存储到寄存器R0数0x20200000。我需要在这里回答了两个问题,一个寄存器是什么,以及如何0x20200000多少?
    一个寄存器可以存储任何整数0和4294967295之间的包容性在Raspberry Pi,这看起来像一个大的内存量,但只有32个二进制位。
    寄存器是处理器中的一块内存,这是在处理器存储的数目是现在的。有相当多的,其中有许多特殊的意义,我们稍后会来。重要的是有13(R0,R1,R2,……,R9,R10,R11,R12)被称为通用的,你可以使用任何你需要做的计算。因为这是第一次,我用R0在这个例子中,但我可以很好的利用任何人。只要你坚持,不管。
    0x20200000的确是一个数。然而这是写在十六进制记数法。了解更多关于进制展开下面的框:
    所以我们的第一个命令是把2020000016号为R0。那听起来不像是多用途,但它是。在计算机中,有记忆和设备块很多。为了访问它们,我们给每一个地址。就像一个邮政地址或网址,这是识别设备或内存块我们想要的位置的一种手段。地址在电脑只是数字,所以2020000016号恰巧是GPIO控制器的地址。这只是一个设计决定采取的厂商,他们可以用任何其他地址(提供没什么冲突)。我知道这个地址,只因为我查手册,没有特别系统的地址(其他比他们在十六进制大轮数)。


    在阅读本手册,我知道我们要送两个消息GPIO控制器。我们需要谈谈它的语言,但如果我们做了,它就会乖乖的做我们想做的,打开好的LED。幸运的是,它是这样一个简单的芯片,它只需要几个数字来做的。
    # MOV r1,1
    # LSL R1,18
    STR R1,[ 4 ] # R0,
    MOV REG,#瓦尔给出的数字值到寄存器namedreg。
    LSL REG,# Val转变中的Val的地方regby左数的二进制表示形式。
    STR REG,[目的],瓦尔#店铺数目由dest +价值regat给出的地址
    这些命令使输出到第十六个GPIO引脚。首先我们在R1必要的值,然后将它发送到GPIO控制器。自从第一个指令是想为R1的值,我们可以用以前另一个LDR指令,但它将是我们以后能够建立任何GPIO引脚有用,所以它是从公式推导的价值比写直它更好。确定LED连接到第十六个GPIO引脚,所以我们需要发送一个命令,使第十六针。
    在R1的值需要使LED引脚。第一行给出的数字110为R1。MOV指令比LDR指令的速度,因为它不涉及记忆的相互作用,而LDR加载我们要把从存储器寄存器的值。然而,MOV只能用于负载一定的价值[ 4 ]。在ARM汇编代码,几乎每一个指令开始的一三字母代码。这就是所谓的记忆,是要暗示什么操作。MOV是移动和LDR短是装入寄存器短。MOV移动第二firstr1 # 1成。一般来说,必须使用#表示的数字,但我们已经看到了一个反例,这。
    第二指令LSL逻辑左移。这意味着将二进制表示的第一个参数的第二左。在这种情况下,这将转移110的二进制表示(12)左18的地方(使它10000000000000000002 = 26214410)。
    如果您不熟悉二进制,扩大下面的框:
    再次,我只知道我们需要阅读手册[ 3这个值]。手册上说,在GPIO控制一组24个字节,该确定的GPIO引脚的设置。第一4与第一10个GPIO引脚,第二4与下10等。有54个GPIO引脚,所以我们需要6套4字节,这是总共24个字节。在每一个4字节的段,每3位涉及一个特定的GPIO引脚。因为我们想要第十六个GPIO引脚,需要4字节的第二集,因为我们正在处理的引脚10-19,我们需要第六组3位,这是18号(6×3)来自上面的代码。
    最后,STR的存储寄存器的命令的第一个参数中的存储值,R1为地址计算从表达之后。该表达式可以是一个寄存器,在这种情况下,R0,这是我们所知道的GPIO控制器的地址,和另一个值添加到它,在这种情况下# 4。这意味着我们增加4的GPIO控制器的地址和在R1位置写值。这恰好是4字节的第二集的位置,我之前提到的,所以我们把第一个消息GPIO控制器,告诉它准备输出第十六个GPIO引脚。

    5生命的迹象
    现在,LED已经打开,我们需要打开它。这意味着发送消息到GPIO控制转销16。是的,关掉它。芯片制造商决定它更有意义[ 5 ]有LED打开GPIO引脚时。硬件工程师经常把这些各种各样的决定,似乎只是为了让操作系统开发者在他们的脚趾。你自己考虑一下吧。
    # MOV r1,1
    # LSL R1,16
    STR R1,[ 40 ] # R0,
    你应该认识到以上所有的命令,如果不是他们的价值观。第一个提出1到R1之前。第二16处这1把二进制表示的转换。因为我们想把销16,我们需要在接下来的这个消息,第十六位有1(其他值将其他引脚的工作)。最后我们把它写出来是4010添加到GPIO控制器的地址的地址,这是写的地址转销掉(28转销)。

    6从此以后
    它可能会完成,但不幸的是,处理器不知道我们做的。在现实中,处理器将永不停止。只要它的权力,它继续工作。因此,我们需要给他一个任务去做永远,或Raspberry Pi会崩溃(不是在这个例子中,一个问题,鉴于已经对)。
    环元:
    B环美元
    名称:标签下一行的名字。
    B标签的原因下一行是执行belabel。
    在这里,第一行是不是命令,而是一个标签。它的名称下一行环美元。这意味着我们可以参考线的名字。这就是所谓的标签。标签被丢弃时的代码转化为二进制,但他们是有用的为我们的利益的名字指的是线,不数(地址)。按照惯例,我们用美元的品牌在这个代码块的代码,唯一重要的是,让别人知道他们不是所有程序的重要。B(分支)命令使下一行被执行是在标签中指定的一个,而不是一个后。因此,下一个要执行的线将这B,这将使它再次被执行,永远如此。因此处理器卡在一个好的无限循环直到它关闭安全。
    在这个街区的尽头新的线是故意的。GNU工具预计所有的汇编代码文件最后一行,所以肯定你是真的完了,该文件没有被切断。如果你不放,你得到一个恼人的汇编程序运行时的警告。
    7π时
    所以我们写的代码,现在把它放在PI。在你的计算机上打开一个终端和改变当前工作目录的源目录的父目录。式,然后回车。如果出现任何错误,请参阅故障排除部分。如果不是,你将产生三个文件。kernel.img是编译你的操作系统的图像。kernel.list是你写的汇编代码清单,因为它实际上是产生。这是检查在未来的正确生成有用的东西。kernel.map文件包含的所有地图的标签结束了,可以追求价值是有用的。
    安装您的操作系统,首先得到一个树莓派的SD卡已经安装了操作系统已经。如果你浏览文件在SD卡,你应该看到一个叫做kernel.img。重命名该文件的其他东西,比如kernel_linux.img。然后,复制文件,生成kernel.img到SD卡。你只是用你自己的替换现有的操作系统。切换回来,简单地删除你的文件,重命名kernel.img,另一个回到kernel.img。我发现它总是有助于保持你原有的Raspberry Pi的操作系统备份,以防万一你需要它了。
    把SD卡插入树莓PI和打开它。确定LED应。如果不是请参阅疑难解答页。如果是这样的话,恭喜你,你只是写了你的第一个操作系统。看2节:ok02为指导,使LED闪烁和关闭。


    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 13:16 , Processed in 0.107951 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.