登录
注册
一键加入QQ群
友善之臂官方网站
首 页
联系我们
淘宝店铺
维基教程
固件下载
资料汇总
搜索帖子!
NanoPC 系列:
NanoPC-T2
NanoPC-T3 Plus
NanoPC-T4
NanoPC-T6
NanoPC-T6 Plus
NanoPi 系列:
NanoPi-NEO
NEO Core
NEO Air
M1 Plus
Duo2
NEO3
NEO4
M4B
M5
M6
M6V2
核心板:
Smart4418
Core4418
Smart6818
Core6818
SOM-RK3399V2
CM3588
CM3588 Plus
迷你R系列:
NanoPi-R1
R1S
R2S
R2S Plus
Zero2
R3S
R76S
R4S
R5S
R5C
R6C
R6S
热门版块:
开发板销售中心
开发板硬件讨论区
硬软DIY及开发
嵌入式交流与讨论
友友粉丝快线
Ubuntu技术交流区
默认风格
用户中心首页
编辑个人资料
查看个人资料
好友列表
用户权限查看
积分管理
积分转换
特殊组购买
收藏夹
我的主题
基本统计信息
到访IP统计
管理团队
管理统计
在线统计
会员排行
版块排行
帖子排行
个人首页
我的收藏
好友近况
裸机程序和微型OS
将watchdog用作计时器出现的问题
友友粉丝快线
开发板销售中心
嵌入式最新资讯
友善之臂最新动态
友善之臂官方客服中心
开发板实战手册及教程
应用方案和定制开发
NanoPi 交流与讨论
NanoPi 玩家交流区
ROM发布区
硬软DIY及开发
嵌入式交流与讨论
Android技术交流区
Linux技术交流区
U-boot技术交流区
WinCE技术交流区
Ubuntu技术交流区
裸机程序和微型OS
OpenWRT讨论区
开发板硬件讨论区
相关资料下载及使用技巧
站点服务
二手交易区
我的论坛我的贴
站务管理与公告
上一主题
下一主题
新 帖
主题 : 将watchdog用作计时器出现的问题
复制链接
|
浏览器收藏
|
打印
wuqi1003
级别: 新手上路
作者资料
发送短消息
加为好友
UID:
62351
精华:
0
发帖:
16
金钱:
80 两
威望:
16 点
综合积分:
32 分
注册时间:
2012-01-26
最后登录:
2013-06-20
楼主
发表于: 2012-10-24 20:44
只看楼主
|
小
中
大
将watchdog用作计时器出现的问题
我用看门狗来作计时器,计算一段程序的耗费时间,程序写好后,我发现用AXD单步调试可以得到最后的时间,但是直接运行却总是得到0,这里把程序贴出来,代码比较少,希望高手帮帮忙!
先把main函数放上来:
void Main(void)
{
Uart_Init(115200);
Uart_Printf("\nwatchdog test is beginning\n");
watchdog_test();
}
main中主要用到的watchdog_test()函数:
void watchdog_test(void)
{
int i=0,time;
rWTCON=((prescaler_value<<8)|(clock_select<<3));
//设置预分频数和除数因数
count_start();
//写的开始计时的函数,后面给出具体函数体
for(i=0;i<10;i++);
//随便写的一个延时,计算这段程序所耗时间,为了测试程序是否可用
time=count_stop();
//停止计时,并将得到的微秒数赋给time
Uart_Printf("time is %d\n",time);
while(1);
}
下面是watchdog_test()中调用两个子函数,也比较简单:
void count_start(void)
{
rWTDAT=0xffff;
rWTCNT=0xffff;
rWTCON &= ~(1<<2); //关闭中断
rWTCON |= (1<<5); //打开WDT定时器
}
int count_stop(void)
{
int i=0;
rWTCON &= ~(1<<5); //关闭定时器,计时结束
i=0xffff-rWTCNT;
return i*259;
}嬀/size]
用dnw来测试,直接run,就成了0,如图:
用AXD单步调试,就能输出:
大神们帮帮我吧!!
另外,除了watchdog外,大家在裸机下还有什么计算程序耗时的方法(精度越高越好啊),欢迎大神赐教啊!!
顶端
回复
引用
分享
wuqi1003
级别: 新手上路
作者资料
发送短消息
加为好友
UID:
62351
精华:
0
发帖:
16
金钱:
80 两
威望:
16 点
综合积分:
32 分
注册时间:
2012-01-26
最后登录:
2013-06-20
1楼
发表于: 2012-10-25 16:48
只看该作者
|
小
中
大
顶端
回复
引用
分享
wuqi1003
级别: 新手上路
作者资料
发送短消息
加为好友
UID:
62351
精华:
0
发帖:
16
金钱:
80 两
威望:
16 点
综合积分:
32 分
注册时间:
2012-01-26
最后登录:
2013-06-20
2楼
发表于: 2012-10-25 20:09
只看该作者
|
小
中
大
问题好像主要出在这句话:
rWTCON=((prescaler_value<<8)|(clock_select<<3));
我原来是宏定义prescaler_value为100,clock_select为11,即分频因子为128,而PCLK为50MHz,这样得到的定时器计数时间间隔为0.02微秒,可能是反应不过来吧,所以我这次把预分频改成0,分频因子定为64,这样时间间隔为1.2微秒,现在能正常运行,也能出数据了,就是不知道数据是否正确。
顶端
回复
引用
分享
justin_wql
级别: 新手上路
作者资料
发送短消息
加为好友
UID:
70226
精华:
0
发帖:
35
金钱:
175 两
威望:
35 点
综合积分:
70 分
注册时间:
2012-05-17
最后登录:
2013-01-22
3楼
发表于: 2012-10-30 08:44
只看该作者
|
小
中
大
顶端
回复
引用
分享
xiaoyaodid
级别: 侠客
作者资料
发送短消息
加为好友
UID:
26382
精华:
0
发帖:
51
金钱:
255 两
威望:
51 点
综合积分:
102 分
注册时间:
2010-08-07
最后登录:
2014-06-13
4楼
发表于: 2012-10-30 22:17
只看该作者
|
小
中
大
你直接RUN的时候,BOOT把看门狗关了吧
顶端
回复
引用
分享
上一主题
下一主题
裸机程序和微型OS
http://121.40.142.80
访问内容超出本站范围,不能确定是否安全
继续访问
取消访问