查看: 1944|回复: 4

[已解决] 请教K10的看门狗问题(已解决)

[复制链接]

该用户从未签到

10

主题

63

帖子

0

注册会员

Rank: 2

积分
194
最后登录
2018-3-31
发表于 2014-9-24 14:37:59 | 显示全部楼层 |阅读模式
本帖最后由 tovax 于 2014-9-25 09:36 编辑

1.仿真运行一切正常。
2.重新上电程序没有功能。

经单步仿真发现,当执行到以下代码的时候就立刻复位了,K10也锁了:
WDOG_UNLOCK = 0xC520;      
WDOG_UNLOCK = 0xD928;


经过查阅数据手册发现:“WDOG is disabled in CPU Debug mode.”
这也就解释了为什么仿真的时候运行正常,而重新上电就没功能。

这样来分析的话,问题很可能出在看门狗的操作上。
请问什么原因会导致执行“WDOG_UNLOCK = 0xC520; WDOG_UNLOCK = 0xD928;”就立刻复位,并且锁芯片呢?


注:
1.没有外部晶振,也没有对MCG进行任何操作,完全使用默认设置。
2.程序流程:startup.s ===> main.c ===> 关中断 ===> wdog_disable() ===> 其他。。。

补充说明
芯片:MK10DN512VLQ10
开发环境:emIDE2.20 (gcc)
调试工具:Jlink-v8
我知道答案 目前已有4人回答
回复

使用道具 举报

该用户从未签到

10

主题

63

帖子

0

注册会员

Rank: 2

积分
194
最后登录
2018-3-31
 楼主| 发表于 2014-9-24 15:45:08 | 显示全部楼层
不好意思,应该跟看门狗没关系。是这样的:
在头文件中有看门狗相关的结构体定义,按定义WDOG_UNLOCK的地址应该是0x4005200e,这个地址也和数据手册吻合。
但是,我的程序在反汇编之后,看到这个地址是0x40052000,地址是错的。。。
一样的头文件,一样的代码,不一样的是我的编译器:gcc
请问大牛们,编译器有相关的设置吗,为什么编译出这样的问题呢?0x40052000只是基地址,没有加上偏移量呢?

Best regards.
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-9-25 09:30:07 | 显示全部楼层
楼主你好,请告诉我你使用的芯片全称。
下次发帖,最好直接把你的芯片全称以及运行平台,代码环境等都描述下。
回复 支持 反对

使用道具 举报

该用户从未签到

10

主题

63

帖子

0

注册会员

Rank: 2

积分
194
最后登录
2018-3-31
 楼主| 发表于 2014-9-25 09:44:50 | 显示全部楼层
原因:
仿真运行正常是因为仿真模式下,默认看门狗是关闭的。
重新上电模式下,startup.s ===> main.c ===> 关中断 ===> wdog_disable() ===> 其他。。。
启动文件中.data到RAM的转移、bss清理等操作占用了太多的时间,等到关看门狗的时候,已经超时了,导致不停的复位。
解决办法:
把关看门狗的操作提前,放在复位并加载堆栈指针的语句后边就可以了。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-9-25 11:13:03 | 显示全部楼层
tovax 发表于 2014-9-25 09:44
原因:
仿真运行正常是因为仿真模式下,默认看门狗是关闭的。
重新上电模式下,startup.s ===> main.c ===> ...

好的,其实归结起来还是编译软件的问题。
可以多多参考我们的官方代码。
感谢你的经验分享哦!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-20 23:21 , Processed in 0.097694 second(s), 25 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表