求助44B0中Uart_GetIntNum程序!

[复制链接]
3128|8
 楼主| snowtx 发表于 2008-2-5 23:07 | 显示全部楼层 |阅读模式
int&nbsp;Uart_GetIntNum(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;str[30];<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*string=str;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;base=10;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;minus=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;lastIndex;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;result=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Uart_GetString(string);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(string[0]=='-')<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minus=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(string[0]=='0'&nbsp;&&&nbsp;(string[1]=='x'&nbsp;||&nbsp;string[1]=='X'))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;base=16;<br />&nbsp;&nbsp;&nbsp;&nbsp;string+=2;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;lastIndex=strlen(string)-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;string[lastIndex]=='h'&nbsp;||&nbsp;string[lastIndex]=='H'&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;base=16;<br />&nbsp;&nbsp;&nbsp;&nbsp;string[lastIndex]=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;lastIndex--;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(base==10)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;result=atoi(string);<br />&nbsp;&nbsp;&nbsp;&nbsp;result=minus&nbsp;?&nbsp;(-1*result):result;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt=lastIndex;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(isalpha(string))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(isupper(string))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=(result&lt&lt4)+string-'A'+10;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=(result&lt&lt4)+string-'a'+10;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=(result&lt&lt4)+string-'0';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;result=minus&nbsp;?&nbsp;(-1*result):result;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;<br />}<br /><br />就是这个程序,刚学习ARM,在超级中端上执行这个程序时result值总是输出不正确,比如输入0xa和0xA应该输出一样的值,但总是不一样。是不是程序中有问题?比如那个语句result=(result&lt&lt4)+string-'A'+10;既然result是整型数,为什么还要左移四位呢?小弟愚钝,望高手们回复指教!!!<br />
 楼主| snowtx 发表于 2008-2-6 10:13 | 显示全部楼层

snowtx

的确应该加(result&lt&lt4),不过为什么输入0xa和0xA但输出不一样呢?到底是哪里的问题?帮小弟解决一下吧
 楼主| snowtx 发表于 2008-2-7 14:40 | 显示全部楼层

snowtx

这几天做实验时发现了一些问题,if(isalpha(string))语句总是不执行,就算输入的是字符也不会执行这个语句,会跳到result=(result&lt&lt4)+string-'0';处执行,为什么呢?<br />
阿南 发表于 2008-2-8 16:39 | 显示全部楼层

楼主可以先测试发送,以排除硬件和波特录等问题

再测试发送。都成功后在慢慢调试该程序
 楼主| snowtx 发表于 2008-2-10 23:40 | 显示全部楼层

snowtx

谢谢,我把程序给改了,变成了:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if(base==10)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;result=atoi(string);<br />&nbsp;&nbsp;&nbsp;&nbsp;result=minus&nbsp;?&nbsp;(-1*result):result;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt=lastIndex;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((string&gt='A')&&(string&lt='z'))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((string&gt='A')&&(string&lt='F'))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=(result&lt&lt4)+string-'A'+10;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if((string&gt='a')&&(string&lt='f'))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=(result&lt&lt4)+string-'a'+10;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=(result&lt&lt4)+string-'0';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;result=minus&nbsp;?&nbsp;(-1*result):result;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;<br /><br />结果就成功了!实在是想不通为什么&nbsp;if(isalpha(string))语句不管用<br />
samuelyu 发表于 2008-2-11 02:11 | 显示全部楼层

isalpha() 的代码?

  
 楼主| snowtx 发表于 2008-2-11 09:41 | 显示全部楼层

snowtx

int&nbsp;isalpha(int&nbsp;ch&nbsp;)&nbsp;<br /><br />{<br /><br />&nbsp;&nbsp;&nbsp;return&nbsp;(unsigned&nbsp;int)((ch&nbsp;|&nbsp;0x20)&nbsp;-&nbsp;'a')&nbsp;&lt&nbsp;26u;<br /><br />}<br />这个好像是isalpha()&nbsp;的代码。
dld2 发表于 2008-2-11 09:50 | 显示全部楼层

貌似上面的代码离谱得狠

-------<br />但居然没有错。
mohanwei 发表于 2008-2-11 14:57 | 显示全部楼层

没什么,你把字母的范围写到纸上就很容易看出来了

<br />……所以,这些函数被封装成库,未必不是好事,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

66

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部