问答题 阅读下列说明和表,回答下列问题。
[说明]
看门狗(Watchdog)技术是嵌入式系统设计中保证系统可靠的常用技术。嵌入式控制系统运行时由于受到外部干扰或者内部系统错误,程序有时会出现“跑飞”现象,导致整个系统瘫痪。为了防止这一现象的发生,对系统可靠性要求较高的场合往往要加入看门狗电路。当系统“跑飞”时,看门狗电路能自动恢复系统的运行。
问答题 设某嵌入式系统程序完整运行所需的周期时间是tp,看门狗的定时周期为tw,要求tw______tp,在程序运行过程中需要定时______(俗称“喂狗”),只要程序正常运行,定时器就不会溢出。若由于干扰等原因使系统不能在tp时刻修改定时器的计数值,定时器将在tw时刻______,引发______,使系统得以重新运行。
请填充以上叙述中空缺处的内容。
【正确答案】
【答案解析】>或大于
修改定时器的计数值(或重新设定看门狗的定时周期)
溢出(或超时)
系统复位中断 本题考查嵌入式系统中看门狗的应用以及驱动程序的设计。
看门狗电路是一个独立的定时器,有一个定时器控制寄存器,可以设定时间。当系统工作正常时,应用程序在到达时间之前要置位(喂狗),表明程序正常运行,如果没有置的话,就认为是程序跑飞,看门狗电路发出RESET指令,迫使系统自动复位而重新运行程序。看门狗的主要作用是防止程序跑飞或死锁。
所以,当程序完整运行的周期是tp,看门狗的定时周期为tw时,要求tw,大于tp,在程序运行过程中需要定时修改定时器的计数值(俗称“喂狗”),只要程序正常运行,定时器就不会溢出。若由于干扰等原因使系统不能在tp时刻修改定时器的计数值,定时器将在tw时刻溢出(或超时),引发系统复位中断,使系统得以重新运行。
问答题 张工在某嵌入式系统中设计实现了看门狗电路,采用的芯片寄存器如表1、表2、表3、表4所示。
表1 看门狗定时器控制寄存器(WTCON)
寄存器
地址
读/写
描述
初始值
WTCON
0x53000000
读/写
看门狗定时控制寄存器
0x8001
表2 看门狗定时器数据寄存器(WTDAT)
寄存器
地址
读/写
描述
初始值
WTDAN
0x53000004
读/写
看门狗数据寄存器
0x8000
表3 看门狗计数寄存器(WTCNT)
寄存器
地址
读/写
描述
初始值
WTCNT
0x53000008
读/写
看门狗计数器当前值
0x8000
表4 WTCON的标识位
WTCON Bit 描述 初始值
Prescaler Value [15:8] 预装比例值,有效范围值为0~255 0x80
Reserved [7:6] 保留 00
Watchdog Timer [5] 使能和禁止看门狗定时器
0=禁止看门狗定时器
1=使能看门狗定时器
0
Clock Select [4:3] 这两位决定时钟分频因素
00:1/16 01:1/32
10:1/64 11:1/128
00
Interrupt Generation [2] 中断的禁止和使能
0=禁止中断产生
1=使能中断产生
0
Reserved [1] 保留 0
Reset Enable/Disable [0] 禁止和使能看门狗复位信号的输出
1=看门狗复位信号使能
0=看门狗复位信号禁止
1
王工编写了以下程序代码,实现看门狗电路的初始化。请仔细阅读每行代码,然后回答问题。
#define PCLK 10000000 //第1行
#define rWTCON (*(volatile unsigned int*)0x53000000) //第2行
#define rWTDAT (*(volatile unsigned int*)0x53000004) //第3行
#define rWTCNT (*(volatile unsigned int*)0x53000008) //第4行
void watchdog_test (void) //第5行
{ //第6行
rWTCON=((PCLK/1000000-1)<<8)|(3<<3)|(1<<2); //第7行
rWTDAT=7812; //第8行
rWTCNT=7812; //第9行
rWTCON |=(1<<5); //第10行
}
请回答下列问题。
(1)在程序的第2、3、4行,分别使用了volatile关键字,请说明该关键字的作用。
(2)在程序的第7行,实现了对看门狗的三个功能设置,除了设置预装比例值外,其他两个功能分别是什么?
(3)在程序的第10行,实现了对看门狗的哪个功能设置?
(4)该系统结构采用的编址方式是什么?
(5)该系统的位序是大端方式还是小端方式?
【正确答案】
【答案解析】(1)类型修饰符,防止编译器对代码进行优化
(2)设置看门狗的分频因素为1/128、使能中断产生
(3)使能看门狗定时器
(4)统一编址
(5)小端方式 (1)在驱动程序中对寄存器操作时,经常使用volatile关键字,作用是确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
(2)在程序第7行,对看门狗定时器控制寄存器(WTCON)设置了三个属性值,通过查表4中WTCON的相应标识位,可以得知对预装比例值[15:8]、时钟分频因素[4:3]、中断使能[2]进行了设置。
(3)在程序第10行,也对看门狗定时器控制寄存器(WTCON)进行了设置,通过查表4中WTCON的相应标识位,可以得知使能看门狗定时器[5]。
(4)从程序的第2、3、4行可以看出,对寄存器的操作,采用存储器指令进行,所以,该系统结构采用的是内存和外设统一编址的方式。
(5)从程序第7行、第10行对看门狗定时器控制寄存器的操作,结合表4中对应寄存器的位定义可以看出,该系统的位序是小端方式。