打印

紧急求救!(结贴~~~)

[复制链接]
1275|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
原野之狼|  楼主 | 2007-9-3 11:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题简要描述:在刷液晶的时候出现了不应该出现的点。

硬件平台:基于C8051F060的单片机系统,外扩32K内存,及128*64LCD,以及其它。
软件平台:SILICON LAB IDE,调用KEIC51编译器内核,版本是V7.06

问题详细描述:
1、顺利调通了人机界面部分。
2、AD采样部分也已经独立测试通过。
3、现在需要把AD部分的程序添加到整个系统当中,然后问题就出现了,在液晶显示的过程当中出现了坏点。

其实我添加的代码只是参与了编译,我还没有调用它。因此在逻辑上,我认为添加的代码是不会影响到它的。剔除掉AD部分的代码可是一切都正常的啊。我查看了资源还是够用的。在仔细跟踪出现乱码的代码部分,如下:

/*********************************************************************
    Description:清除区域
    
    Input:
        x0:左上角x坐标
        x1:右下角x坐标
        y0:左上角y坐标
        y1:右下角y坐标
    Output:

    Return:

    Gloable:    
        
    Calls:
        GUI_DrawHLine_();画线,反色

    Called By:
        
    Others:

    Modify Record:
    
*********************************************************************/
void GUI_ClearRect(UINT8 x0,UINT8 x1,UINT8 y0,UINT8 y1)
{
    UINT8 i;
    for(i=y0;i<=y1;i++)
    {
        GUI_DrawHLine_(x0, x1,i);
//        Display();
    }
}


/*********************************************************************
    Description:画水平线,实线,反显,用于擦出区域调用
    
    Input:

        x0:起点x坐标
        x1:终点x坐标
        y:y坐标
    
    Output:

    Return:

    Gloable:    
        DisBuffer[]:图形缓冲

    Calls:

    Called By:
        Gui_Clearall();
        
    Others:

    Modify Record:
    
*********************************************************************/
void GUI_DrawHLine_(UINT8 x0,UINT8 x1,UINT8 y)
{
    //    000000XX    XXXXXXXX      ....        XXXXXXXX         XX000000            Location_Bit
    //             |                                                                    |
    //            |                                                                           |
    //          Location_Byte0                                                Location_Byte1
    UINT16 Location_Byte0,Location_Byte1;
    UINT8 Location_Bit;
    UINT16 i;
    //Location_Byte0=(y/8)*X_PIXEL+x0;
    //Location_Byte1=(y/8)*X_PIXEL+x1;
    Location_Byte0=(y/8)*(X_PIXEL)+x0;
    Location_Byte1=(y/8)*(X_PIXEL)+x1;
    Location_Bit=(y%8);

    for(i=Location_Byte0;i<=Location_Byte1;i++)
    {
        DisBuffer&=(~(0x01<<Location_Bit));
//        uart0_send(DisBuffer);
    }
//    Display();
    _nop_();
}

从表面上看来,出现问题的地方是这两个函数,我不知道这是不是只是表像。

这是一段擦除一片矩形区域的代码。擦除是按行擦除的,一行一行的擦除,我擦出每一行后再输出图形缓冲到LCD看效果,在其中某连续的几行出现了问题,图形缓冲出现了不应该有的变化(不是程序的作为啊),可以肯定LCD没有坏,我把图形缓冲还发到了串口来观察,现象和LCD显示效果是一致的。

那么到底是什么改变了图形缓冲的内容呢?这个时候我的定时器中断以及外部中断都屏蔽了啊,即使没有屏蔽,这些中断响应也没有做任何改变图形缓冲内容的工作。

从网上看了一些关于KEIL BUG的**,说对0XFD字符的过滤,我不知道这个过滤会出现什么样的后果。我在网上搜了一个补丁,还是不管用,补丁版本似乎有些不对,平台用的是V7.06,而补丁说是支持V7.00,不知道是不是补丁没有起作用?但是在单独调试人机界面的时候是没有出问题的,为什么不在那个时候过滤呢?

实在是找不出还有什么别的原因了,希望大家献计献策啊,不尽感激!

相关帖子

沙发
原野之狼|  楼主 | 2007-9-3 14:46 | 只看该作者

咋没人回帖呢?

使用特权

评论回复
板凳
原野之狼|  楼主 | 2007-9-3 15:35 | 只看该作者

问题找到~~~

问题解决了,把一个局部变量给换成全局变量了,这个变量占空间比较大,不知道各位有没有遇到这种问题?

使用特权

评论回复
地板
一无所知| | 2007-9-3 16:06 | 只看该作者

这个方法你试过了么?

    不把它设为全局变量,还是局部变量保持不变,定义的时候,设为 volatile 的属性

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

187

主题

8545

帖子

280

粉丝