start.S详解学习(二):关闭看门狗

简介: start.S详解学习(二):关闭看门狗

关闭看门狗

上面几个宏定义所对应的地址,都可以在对应的datasheet中找到对应的定义:

dr r0, =pWTCON

这里的ldr和前面介绍的ldr指令不是一个意思。

这里的ldr是伪指令ldr。

什么是伪指令

伪指令,就是“伪”的指令,是针对“真”的指令而言的。

真的指令就是那些常见的指令,比如上面说的arm的ldr,bic,msr等等指令,是arm体系架构中真正存在的指令,你在arm汇编指令集中找得到对应的含义。

而伪指令是写出来给汇编程序看的,汇编程序能看的伪指令具体表示的是啥意思,然后将其翻译成真正的指令或者进行相应的处理。

只不过 mov 指令后面的立即数是有限制的,这个立即数,能够必须由一个 8 位的二进制数,即属于 0x00-0xFF 内的某个值,经过偶数次右移后得到,这样才是合法数据,而 ldr 伪指令没有这个限制。

那为何 ldr 伪指令的操作数没有限制呢,那是因为其是伪指令,写出来的伪指令,最终会被编译器解释成为真正的,合法的指令的,一般都是对应的 mov 指令。

这样的话,写汇编程序的时候,使用 MOV 指令是比较麻烦的,因为有些简单的数据比较容易看出来,有些数据即不容易看出来是否是合法数据。所以,对此,ldr 伪指令的出现,就是为了解决这个问题的,你只管放心用 ldr 伪指令,不用关心操作数,而写出的 ldr 伪指令,编译器会帮你翻译成对应的真正的汇编指令的。(这个意思就是机器判断了)

而关于编译器是如何将这些ldr伪指令翻译成为真正的汇编指令的,我的理解是,其自动会去算出来对应的操作数,是否是合法的mov 的操作数,如果是,就将该ldr伪指令翻译成mov指令,否则就用别的方式处理,我所观察到的,其中一种方式就是,单独申请一个4字节的空间用于存放操作数,然后用ldr指令实现。

【总结】

而这里的:

ldr r0, =pWTCON

mov

意思就很清楚了,就是把宏pWTCON的值赋值给r0寄存器,即

r0=0x53000000
mov r1, #0x0

str

str r1, [r0]

所以,上面几行代码意思也很清楚:

先是用r0寄存器存pWTCON的值,然后r1=0,再将r1中的0写入到pWTCON中,其实就是

pWTCON = 0;

是时候来看看watchdog了?

目录
相关文章
|
6月前
|
监控 Linux 芯片
Watchdog是什么?为什么要在系统初始化时候关闭什么是 watchdog?
Watchdog是什么?为什么要在系统初始化时候关闭什么是 watchdog?
307 0
|
6月前
start.S详解学习(六):异常中断处理
start.S详解学习(六):异常中断处理
67 0
|
6月前
start.S详解学习(三):关闭中断
start.S详解学习(三):关闭中断
62 0
|
6月前
|
Windows
如何在关闭socket连接的时候跳过TIME_WAIT的等待状态
如何在关闭socket连接的时候跳过TIME_WAIT的等待状态
|
6月前
|
C语言
start.S详解学习(一):设置 CPU 模式
start.S详解学习(一):设置 CPU 模式
86 0
|
Go 调度
永远不要在不知道如何停止的情况下启动一个 goroutine
永远不要在不知道如何停止的情况下启动一个 goroutine
72 0
|
开发工具
编写start、stop、status三个脚本程序,用来启动、停止各种系统服务。
编写start、stop、status三个脚本程序,用来启动、停止各种系统服务。
208 0
|
芯片
STM32窗口看门狗和独立看门狗的区别,看门狗介绍及代码演示
STM32窗口看门狗和独立看门狗的区别,看门狗介绍及代码演示
207 0
|
监控 安全 Java
关闭线程的正确方法:“优雅”的中断
前文从任务到线程:Java结构化并发应用程序中介绍了如何安排任务启动线程。 线程在启动之后,正常的情况下会运行到任务完成,但是有的情况下会需要提前结束任务,如用户取消操作等。
1398 0
|
Java 开发者
为什么不推荐使用 stop、suspend 方法中断线程?
我们知道像stop、suspend这几种中断或者阻塞线程的方法在较高java版本中已经被标记上了@Deprecated过期标签,那么为什么她们曾经登上了java的历史舞台而又渐渐的推出了舞台呢? 到底是人性的扭曲还是道德的沦丧呢,亦或是她们不思进取被取而代之呢,如果是被取而代之,那么取而代之的又是何方人也,本文我们将一探究竟。
246 0
为什么不推荐使用 stop、suspend 方法中断线程?