ARM程序中,如果不用延时,就没法运行,但又不是硬件延时的奇怪问题。[

caosc   2010-1-5 16:21 楼主
    问题出在在现有的LCD汉字显示驱动的基础上继续开发时。

    有个一个搜索函数,代码如下,功能是在一个给定的地址开始,连续搜索一个汉字编码(2byte),找到编码就返回位置,函数很简单。

    现在的问题是,如果去掉串口调试代码 s_UartPrint("..."); 这一行,调用这个函数就会出现数据异常(DataAbort),加上就一切正常,感觉这行代码在这里的作用应该是有一个延时作用,但不知道为什么会这样,请大侠们指教。分析一下可能的问题。

   经过调试,发现如果将s_UartPrint("...")这行加在调用这个函数之前,也能正常运行,很奇怪,去掉就不行了。

int strSearch(unsigned char* StartAddr, unsigned char* str, int strNum)
{
    unsigned char* pAddr = StartAddr;
    int i;

    //s_UartPrint("...");// 影响运行成功与否的关键一句

    for (i=0; i     {
        if (*pAddr == *str && *(pAddr+1) == *(str+1))
        {
            return i;
        }
        pAddr += 2;
    }
    return -1;
}

回复评论 (8)

原本s_UartPrint("...")这个函数的位置在哪里?

原本不在前面,现在你改到前面也可以? 是吗?
点赞  2010-1-5 17:24
这句话 应该不是关键,这里不用延时啊,我估计是调用
int strSearch(unsigned char* StartAddr, unsigned char* str, int strNum)
的时候出的问题
点赞  2010-1-5 17:40
最好在定时器中断中驱动LCD显示,刷新数据显示。
点赞  2010-1-5 18:40
在DataAbort异常中加点调试信息看看。
点赞  2010-1-5 19:19
for (i=0; i *(pAddr+1);//??
点赞  2010-1-5 19:22
什么环境?
点赞  2010-1-5 19:52
s_UartPrint("...")是不是将你要查询的内容映射到内存区了.然后你就可以查询了!
点赞  2010-1-5 21:19
多谢楼上各位,发现问题了,原来是调用strSearch前,有一个有一个结构体类型的指针没有赋值导致数据异常,后面的这些现象都是表象,不是问题的实质。
点赞  2010-1-6 17:04
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复