tiny4412 裸机程序 三、关闭看门狗和调用C程序【转】
本文转载自:http://blog.csdn.net/eshing/article/details/37112779
一、原理说明
上是章中大家可能有会觉得奇怪,CPU不是有看门狗嘛?为什么CPU没有复位,程序还能正常工作呢?
查看Eyxnos4412的手册,第5章简要的说明了其启动顺序,如下图3-1所示是Eyxnos4412启动顺序图,这里虽然没有说的很清楚,但内部iROM和BL1程序中是起一些初始化时钟,DRAM等工作的,其也可能已经使看门狗不工作了。所以上一章程序中,我们也没有人为的关闭看门狗,程序也能正常工作。这一节,我们尝试自己关闭开门狗后再点亮LED灯。
看门狗的作用在于监控CPU的运行,保证在诸如噪音和系统错误等这样的故障干扰情况下能
尽快恢复正常工作。看门狗与PWM定时器都能实现定时的功能,两者的区别在于看门狗能发出复位信号而PWM定时器不能,后面将会有具体的章节讲解看门狗的定时和复位功能,这里我们只是简单的将其关闭,然后跳转调用一个C程序。
图3-1、Exynos4412启动顺序图
二、程序说明
完整代码见目录2_led_s_wtd。
1. start.S
与代码1_led_s_wtd相比,在代码2_led_s_wtd中,start.S多了两点不一样的地方:
1) 手动关闭了看门狗,只需往寄存器WTCON写入0即可;
2) 调用了C函数实现延时的功能,以测试IROM中的固化代码是否设置了栈;
2. delay.c
内含一个普通的C语言延时函数,代码如下:
void delay(int r0)
{
volatile int count = r0;
while (count--);
}
汇编调用C函数时,当参数个数不超过4个,使用r0~r3这4个寄存器来传递参数;如果参数个数超过4个,剩余的参数通过栈来传递,delay()只有1个参数,所以用r0来传递。另外,volatile是为了避免编译器自动帮我们优化掉这段代码造成无法延时。 Makefile和sd_fuse里的程序与上一章程序并没有差异,以后若代码与前一个目录的代码相比没有发生变化则将不再赘述。
三、完整的烧写过程
已将SD卡插入电脑,假设Linux识别了SD卡,其识别号为sdb。执行下面命令:
# chmod 777 –R 2_leds_s_wtd
# cd 2_leds_s_wtd
# make
# cd sd_fuse
# make
# ./ fast_fuse /dev/sdb
四、上电实验
将SD卡插入到Tiny4412板上子,将启动开关设置拔到SD卡启动端,上电,开机,可以看到4个LED灯正常闪烁,说明手动关闭看门狗成功,同时证明IROM中的固化代码已经设置了栈。为什么程序成功调用C函数就说明了IROM的固化代码设置了栈呢?是因为汇编中调用C函数时,参数的传递、现场的保存和恢复、临时变量的保存等都需要使用到栈,在delay()函数中变量count就是临时变量,程序运行成功说明栈已经设置好了,更详细的解释将会留到下一章。
tiny4412 裸机程序 三、关闭看门狗和调用C程序【转】的更多相关文章
- u-boot分析(五)----I/D cache失效|关闭MMU和cache|关闭看门狗
u-boot分析(五) 上篇博文我们按照210的启动流程,对u-boot启动中的设置异常向量表,设置SVC模式进行了分析,今天我们继续按照u-boot的启动流程对以下内容进行分析. 今天我们会用到的文 ...
- WINCE平台下C#应用程序中使用看门狗
看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个大数,程序开始运行后看门狗开始倒计数.如果程序运行正常,过一段时间CPU应发出指令让 ...
- 软件看门狗--别让你地程序无响应(使用未公开API函数IsHungAppWindow,知识点较全)
正文一.概述一些重要的程序,必须让它一直跑着:而且还要时时关心它的状态——不能让它出现死锁现象.当然,如果一个主程序会出现死锁,肯定是设计或者编程上的失误.我们首要做的事是,把这个Bug揪出来.但如果 ...
- Spring Boot 实现看门狗功能 (调用 Shell 脚本)
需要实现看门狗功能,定时检测另外一个程序是否在运行,使用 crontab 仅可以实现检测程序是否正在运行,无法做到扩展,如:手动重启.程序升级(如果只需要实现自动升级功能可以使用 inotify)等功 ...
- bootloader 关闭看门狗
#define pWTCON 0x53000000disable_watchdog: ldr r0, =pWTCON mov r1, #0x0 str r1, [r0]
- Tiny4412之C语言实现流水灯,Tiny4412裸机程序[3]
在前边我们使用汇编完成了一个流水灯实验: Tiny4412汇编流水灯代码,Tiny4412裸机LED操作 ---- - -- -- -- - -- -- 修改: # ${MKBL2} ${SOURCE ...
- Cubieboard2裸机开发之(五)看门狗操作
前言 说到看门狗,应该不会陌生,看门狗说白了就是一个定时器,但是它有一个非常重要的功能就是复位系统.在A20里,看门狗的操作非常简单,只有两个寄存器,不需要操作时钟相关的东西,系统起来后可以直接使用, ...
- Tiny4412中断之看门狗
一:看门狗(WDT watch dog timer) 看门狗其实是一个计数器,它的作用就是防止程序陷入死循环或者程序运行跑飞:看门狗是一个硬件,它的工作原理是,初始化给他一个值,它会过一段时间减一,直 ...
- mini2440裸机试炼之——看门狗中断和复位操作
看门狗的工作原理: 设本系统程序完整执行一周期的时间是Tp,看门狗的定时周期为Ti,Ti>Tp,在程序正常执行时,定时器就不会溢出,若因为干扰等原因使系统不能在Tp时刻改动定时器的记数值,定时器 ...
随机推荐
- 少啰嗦!一分钟带你读懂Java的NIO和经典IO的区别
1.引言 很多初涉网络编程的程序员,在研究Java NIO(即异步IO)和经典IO(也就是常说的阻塞式IO)的API时,很快就会发现一个问题:我什么时候应该使用经典IO,什么时候应该使用NIO? 在本 ...
- Socket中BufferedReader.readLine()的阻塞特性导致的数据无法多次发送的问题
https://blog.csdn.net/shenpibaipao/article/details/70236657
- uva 272 Tex中的引号(Tex Quotes)
TeX is a typesetting language developed by Donald Knuth. It takes source text together with a few ty ...
- ConcurrentHashMap笔记
概览: 内部存储的数据结构为:数组+链表+红黑树,图示: 重要的属性(内部类): //存放元素的数组 transient volatile Node<K,V>[] table; //数组中 ...
- x component of 2nd stokes wave--- C code
* Source code The following is a C code for x component of 2nd stokes wave ××××××××××××××××××××× /*s ...
- 洛谷 1541 NOIp2010提高组 乌龟棋
[题解] 很容易想到这是一个DP,f[i][j][k][l]表示4种卡片分别用了多少张,那么转移方程就是f[i][j][k][l]=Max(f[i-1][j][k][l],f[i][j-1][k][l ...
- BZOJ 5028 小Z的加油店
[题解] 本题要求求出区间内的各个元素通过加减之后能够得出的最小的数,那么根据裴蜀定理可知答案就是区间内各个元素的最大公约数. 那么本题题意化简成了维护一个序列,支持区间加上某个数以及查询区间元素的最 ...
- BZOJ 2274 [Usaco2011 Feb]Generic Cow Protests
[题解] 很容易可以写出朴素DP方程f[i]=sigma f[j] (sum[i]>=sum[j],1<=j<=i). 于是我们用权值树状数组优化即可. #include<c ...
- [bzoj4726][POI2017][Sabota?] (树形dp)
Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属(直接或者间接, 不包括他自己)中叛徒占的比例超过x,那么这个人 ...
- Spring AOP学习(六)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...