问题出在在现有的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;
}
原本s_UartPrint("...")这个函数的位置在哪里?
原本不在前面,现在你改到前面也可以? 是吗?
这句话 应该不是关键,这里不用延时啊,我估计是调用
int strSearch(unsigned char* StartAddr, unsigned char* str, int strNum)
的时候出的问题
for (i=0; i
*(pAddr+1);//??
s_UartPrint("...")是不是将你要查询的内容映射到内存区了.然后你就可以查询了!
多谢楼上各位,发现问题了,原来是调用strSearch前,有一个有一个结构体类型的指针没有赋值导致数据异常,后面的这些现象都是表象,不是问题的实质。