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

comdoc 2010-01-05 04:21:25
问题出在在现有的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<strNum; i++)
{
if (*pAddr == *str && *(pAddr+1) == *(str+1))
{
return i;
}
pAddr += 2;
}
return -1;
}
...全文
72 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
comdoc 2010-01-06
  • 打赏
  • 举报
回复
多谢楼上各位,发现问题了,原来是调用strSearch前,有一个有一个结构体类型的指针没有赋值导致数据异常,后面的这些现象都是表象,不是问题的实质。
xiao_rq 2010-01-05
  • 打赏
  • 举报
回复
s_UartPrint("...")是不是将你要查询的内容映射到内存区了.然后你就可以查询了!
Great_Bug 2010-01-05
  • 打赏
  • 举报
回复
什么环境?
schlafenhamster 2010-01-05
  • 打赏
  • 举报
回复
for (i=0; i <strNum; i++) // < strNum -2 ?
*(pAddr+1);//??
schlafenhamster 2010-01-05
  • 打赏
  • 举报
回复
在DataAbort异常中加点调试信息看看。
DISINHUI 2010-01-05
  • 打赏
  • 举报
回复
最好在定时器中断中驱动LCD显示,刷新数据显示。
宇帆 2010-01-05
  • 打赏
  • 举报
回复
这句话 应该不是关键,这里不用延时啊,我估计是调用
int strSearch(unsigned char* StartAddr, unsigned char* str, int strNum)
的时候出的问题
kyzf 2010-01-05
  • 打赏
  • 举报
回复
原本s_UartPrint("...")这个函数的位置在哪里?

原本不在前面,现在你改到前面也可以? 是吗?

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧