查看: 2219|回复: 2

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

[复制链接]

该用户从未签到

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

回复

使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-5-6 08:33:06 | 显示全部楼层
    多谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-7-14 09:10
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2015-5-6 08:33:22 | 显示全部楼层
    学习学习!!!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-12-25 10:13 , Processed in 0.149378 second(s), 21 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.