全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
更新自动建库工具PCB Footprint Expert 2023.13 Pro / Library Expert 破解版

jz2440-中断学习出现的错误及查找方法

[复制链接]
4553 0

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
按照韦东山的《嵌入式linux应用开发完全手册》和配套视频学习中断。期间遇到了比较烦的两个问题。对于我这个初学者,真是脑壳都大了,但好在想到了个好办法。就是遇到错误,又不知道错在哪个文件时,将自己写的一个一个的放进正确的源码中,然后再制成可执行程序,烧进板子里测试。但首先你得有正确的源码,我的是书的配套光盘带的。对于初学者这应该是个好办法,对于高手来说可能就显得有些笨拙了。下面介绍我在学习终于到的问题,及用这种方法处理的过程。
1.        各寄存器设置好,编写完程序后,烧入板子,结果不亮。
先是想,应该是led初始化哪里出错了。但是看了半天,没找出错误。就是写3个01b进GPFCON,位运算也没搞错。其他调试方法也不会啊,这下脑壳一下子就大了。
出去转了圈,回来想到将视屏里的代码跟我自己写的挨个替换,然后烧进板子,应该能找到错误的地方。要替换先得把自己写得代码改成能与视屏里的Makefie,汇编相互调用的才行。把代码里的函数名改成一样就行了。
        改完函数名之后,考虑应该是初始化的问题,先将视屏里INIT.C拷到我写的代码里面,和我写的其他代码一起制成可执行文件。烧进板子后,亮是亮了,但是只有三个键可以用。
想了下,是视频代码只初始化了S2、S2、S3,在把S4初始化加上就对了。这就说明了的确是INIT.C的问题,但是问题出在哪呢。初始化代码看了几次都没错,跟视频代码都能对上。唯一不同的就是视频代码里面是调用的头文件,我是自己在源文件中自己宏定义的。于是将头文件打开一看,原来是类型定义错了。我将寄存器地址定义为字符型指针了,它应该是长整型的。
2.        三个led老是一起亮。
        一个问题解决了,另一个问题又出现了。我将宏定义改过来之后,重新制成可执行文件烧进板子。操作结果是按想象的实现了,但是操作之后每过几秒,三个灯就会全亮。于是想到是不是中断服务程序有问题。看了几遍中断服务程序的代码,没问题。正想着要不要再出去走一圈的时候,突然想的这是不是无限重启啊。是的话,应该就是看门狗的问题了。关看门狗就是往寄存器里写0怎么会出错呢?真是日了狗了。把视频里的头文件和跟自己定义的看门狗寄存器对比一看,0X530000000,多打了一个0…
        期间还遇到过这样的,同样的文件,make两次,然后烧进板子,一次不行再试一次又行了。真是什么情况都有。

举报

回复
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

打开支付宝扫一扫,最高立得1212元红包
搜索

图文热点

更多

社区学堂

更多

客服中心

QQ:187196467 服务时间:周一至周日 8:30-20:30

关注我们

关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
快速回复 返回顶部 返回列表