[问题] 8051阵列索引使用uint与uchar出现差异

楼主: brominelove (brominelove)   2018-08-13 19:55:49
开发平台(Platform): (Ex: Win10, Linux, ...)
Windows 7
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
Keil C51
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
reg51.h, stdio.h
问题(Question):
在一个把终端机借由UART送一个一个字符给8051、再让8051与LCD沟通使LCD显示终端机送
的字符的练习中,发现阵列索引使用uchar和uint宣告,得到的结果不同(索引最大到31)。
LCD是16*2显示,我构想的是在终端机上一个字输入完后按enter再输入下一个字,排列满
LCD第一列16字时就写到第二列,最高塞满31字,当输入超过第31个字时,所有的字往前挤
一位,第一位被舍弃,而第31位放最新输入的字,以此类推。
喂入的资料(Input):
例:
1234567890abcdef
ghijklmnopqrstu_ (_是光标)
作者: yvb   2018-08-13 20:10:00
MSG_count=30 时, scanf("%s", ...); 字串结束字符放到...?!
作者: Lipraxde (Lipraxde)   2018-08-13 21:05:00
可能会写到外面去啊,MSG[n], n = 0~30你的结束字符就被放到MSG[31]去了结果就是把你的uchar弄成0了
作者: yvb   2018-08-13 21:38:00
你要的是 scanf("%s"...? scanf("%c"...? getchar()? 还是?
作者: Lipraxde (Lipraxde)   2018-08-13 22:02:00
应该是中间被插了空格用来对齐,你会用debugger的话可以注意看看内存位置我建议练习一下uart中断处理、在isr里面手动做处理
作者: yvb   2018-08-13 22:19:00
用 scanf("%s"... 是读入字串, 且用空白字符分段(略过),而不是逐字读取; 至于如何排除结束字符? 不要印它不行吗?意思就是检查若是结束字符(其实是enter吧?) 就不加MSG_count.
作者: sarafciel (Cattuz)   2018-08-13 22:25:00
getchar读进来是结束字符滤掉就好了吧
作者: yvb   2018-08-13 22:25:00
这样 WriteString() 就不会多印出enter符号了.

Links booklink

Contact Us: admin [ a t ] ucptt.com