TA的每日心情 | 衰 2015-8-29 20:27 |
---|
签到天数: 5 天 连续签到: 1 天 [LV.2]偶尔看看I
|
原贴地址:https://www.cirmall.com/bbs/thread-41000-1-2.html
2课ok02
ok02教训的基础上引起的ok01,OK”或“行为”LED打开和关闭重复。这是假设你的代码为1课:ok01操作系统为基础的。
1等待
等待是操作系统发展的一个非常有用的部分。通常操作系统发现自己什么也没有做,而且必须延迟。在这个例子中,我们希望这样做是为了让LED闪烁,可见。如果你只是把它关了,对,它是不可见的,因为电脑可以关掉它,在数千次每秒。在以后的课程中我们将看看准确的等待,但现在它是足够的只是浪费时间。
mov r2,#0x3F0000
wait1$:
sub r2,#1
cmp r2,#0
bne wait1$
valsubtracts注册表值。
CMP注册,# valcompares值与数字值的区域
后缀NE导致命令只是如果最后比较确定的数字并不等于执行。
上面的代码是一个通用的代码,创建一个延迟,这得益于每个Raspberry Pi是基本相同的,是大致相同的时间。它是如何使用MOV指令把值3f000016为R2,然后减去1的值直到0。这里的新命令sub, cmp, 和bne.。
sub是减去命令,简单地从第一个减去第二个参数。
CMP是一个更有趣的命令。它的第一个参数的第二比较,和记忆的结果在一个特殊寄存器比较称当前的处理器状态寄存器。你真的不需要担心这个,可以说它记得,在其他事情上,这两个数字是大或小,或如果他们是平等的。
布里斯本其实是变相的分支指令。在ARM汇编语言的家庭,任何指令可条件执行。这意味着教学是只运行的话,最后比较有一定的结果。我们将使用这个广泛后有趣的把戏,但在这种情况下,我们使用NE的后缀的命令是惟一的分支如果最后的结果是比较的值不相等的。NE后缀可以用在任何命令,可以作为其他几个(16)如小于等于和LT EQ条件。
2在一起
我提到的最后一次,状态LED可以关闭,再通过写作来代替40个GPIO控制器偏移28(即STR R1,[ R0,# 28 ])。因此,你需要修改代码ok01把LED上,运行等程序,关闭它,再次运行等代码,然后包括分支回到开始。注意,这是没有必要重新启用输出GPIO 16,我们只需要做一次。如果你是有效的,我强烈建议,你应该能够使用R1的值。如同所有的教训,这一个完整的解决方案,可以在下载页面中找到。一定要确保你所有的标签都是独特的。当你写为:你不能标签wait1 wait1美元的另一条线。
我的Raspberry Pi它闪烁约两次。这可以很容易地通过改变我们的R2的值改变设定。然而,不幸的是我们不能准确预测,这在运行的速度。如果你没能得到这个工作,看到我们的故障排除页,否则,恭喜你。
在这节课中我们学到了两个组件的命令,子和CMP,以及学习ARM对条件执行。
在下一课,3课:ok03我们将评估我们如何编码,并建立一些标准,这样我们可以重用代码,如果有必要的话,用C或C++代码。
|
|