本文转载自: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程序【转】的更多相关文章

  1. u-boot分析(五)----I/D cache失效|关闭MMU和cache|关闭看门狗

    u-boot分析(五) 上篇博文我们按照210的启动流程,对u-boot启动中的设置异常向量表,设置SVC模式进行了分析,今天我们继续按照u-boot的启动流程对以下内容进行分析. 今天我们会用到的文 ...

  2. WINCE平台下C#应用程序中使用看门狗

    看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个大数,程序开始运行后看门狗开始倒计数.如果程序运行正常,过一段时间CPU应发出指令让 ...

  3. 软件看门狗--别让你地程序无响应(使用未公开API函数IsHungAppWindow,知识点较全)

    正文一.概述一些重要的程序,必须让它一直跑着:而且还要时时关心它的状态——不能让它出现死锁现象.当然,如果一个主程序会出现死锁,肯定是设计或者编程上的失误.我们首要做的事是,把这个Bug揪出来.但如果 ...

  4. Spring Boot 实现看门狗功能 (调用 Shell 脚本)

    需要实现看门狗功能,定时检测另外一个程序是否在运行,使用 crontab 仅可以实现检测程序是否正在运行,无法做到扩展,如:手动重启.程序升级(如果只需要实现自动升级功能可以使用 inotify)等功 ...

  5. bootloader 关闭看门狗

    #define pWTCON 0x53000000disable_watchdog: ldr r0, =pWTCON mov r1, #0x0 str r1, [r0]

  6. Tiny4412之C语言实现流水灯,Tiny4412裸机程序[3]

    在前边我们使用汇编完成了一个流水灯实验: Tiny4412汇编流水灯代码,Tiny4412裸机LED操作 ---- - -- -- -- - -- -- 修改: # ${MKBL2} ${SOURCE ...

  7. Cubieboard2裸机开发之(五)看门狗操作

    前言 说到看门狗,应该不会陌生,看门狗说白了就是一个定时器,但是它有一个非常重要的功能就是复位系统.在A20里,看门狗的操作非常简单,只有两个寄存器,不需要操作时钟相关的东西,系统起来后可以直接使用, ...

  8. Tiny4412中断之看门狗

    一:看门狗(WDT watch dog timer) 看门狗其实是一个计数器,它的作用就是防止程序陷入死循环或者程序运行跑飞:看门狗是一个硬件,它的工作原理是,初始化给他一个值,它会过一段时间减一,直 ...

  9. mini2440裸机试炼之——看门狗中断和复位操作

    看门狗的工作原理: 设本系统程序完整执行一周期的时间是Tp,看门狗的定时周期为Ti,Ti>Tp,在程序正常执行时,定时器就不会溢出,若因为干扰等原因使系统不能在Tp时刻改动定时器的记数值,定时器 ...

随机推荐

  1. jmeter的JDBC Request接口测试

    Jmeter操作Mysql 测试计划添加.jar包 mysql-connector-java-5.1.7-bin.jar用于使Jmeter可以读取Mysql: 线程组添加 JDBC Connectio ...

  2. CAD把自定义实体,变成普通实体(com接口VB语言)

    主要用到函数说明: MxDrawXCustomEvent::MxDrawXCustomEntity::explode 把自定义实体,变成普通实体,详细说明如下: 参数 说明 LONGLONG lEnt ...

  3. C#服务端通过Socket推送数据到Android端App中

    需求: 描述:实时在客户端上获取到哪些款需要补货. 要求: 后台需要使用c#,并且哪些需要补货的逻辑写在公司框架内,客户端采用PDA(即Android客户端 版本4.4) . 用户打开了补货通知页面时 ...

  4. TWaver MONO模板库新鲜出炉 精彩纷呈

    MONO Design在线3D建模平台网站, www.mono-design.cn,开发组的成员们已经开始紧锣密鼓的对这个平台进行内测.在之前的文章里,我们提到用户可以获得多种多样的TWaver官方模 ...

  5. DBDA

    <?php class DBDA{ public $host = "localhost"; //服务器地址 public $uid = "root"; / ...

  6. 操作Session存储对象时的一些问题

    前段时间在操作Session存储的对象时,遇到了类似以下的这种情况: User user=new User("张三"); //创建一个姓名为“张三”的User对象 Session[ ...

  7. 关于Extjs的窗口拖拽,改变大小,背景淡化问题

    大部分Extjs的Windows问题:在Extjs4代码中,只要加几句话: frame:true, //这个窗口的边边是圆的 border : false , //窗口没有边框 draggable: ...

  8. fread快读+fwrite快速输出

    定义数组 char buf[1<<23],*p1=buf,*p2=buf,obuf[1<<23],*O=obuf; 读入 #define getchar() (p1==p2&a ...

  9. java.lang unsupported classversion解决方法

    设置编译的jdk和运行的jdk环境版本是否一致.一般都是jdk导致的.刚开始用jdk1.6编译运行,死活不行,换成jdk1.7运行也是1.7,ok

  10. Linux终端中的字符串使用总结(截取,切片,查找替换,转换,变量赋值等)

    1.基于模式匹配截取字符串 1.#.##号截取 #号截取,从左边开始,以一个出现的分隔符(最左)为准,删除左边字符. ##号截取,从左边开始,以最后(最右)一个分隔符为准,删除左边字符. str='h ...