打印

C51程序,参数传递不正确,什么原因?请帮忙

[复制链接]
3405|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zoupeng139|  楼主 | 2008-12-23 16:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请帮忙看下这段C51程序.为什么调用子函数时,参数传递不正确?比如程序中
DispStr(1,2,"KKK")
则使用单步执行跟踪时,lin值为1 column值为0x6F,这是为什么呢?
另外uchar idata i=0,l=0;中不加idata时 i和l的赋值都不正确,idata的作用是把i,l定义在256字节区域内,若是不写idata,keil默认编译 在data区域吧,应该也不会不正确啊? 

/***********显示字符串***********/
void DispStr(uchar lin, uchar column, uchar  *ptr) 
{
 uchar idata i = 0, l = 0;
 uchar idata dat = 0;
 uint idata StartAddr = 0;
 
 while (ptr[l] != 0){l++;};
 StartAddr = lin * LINECHAR + column; //定位起始行
 OutPortCom3((uchar)(StartAddr), (uchar)(StartAddr>>8), 0x24);
 AutoWCheck();
 OutPortCom1(0xb0);             //有些重复,可以修改
 
 for (i=0; i<l; i++) 
 {
  dat = (ptr - 0x20);
  OutPortData(dat);
 }
 OutPortCom1(0xb2);           //自动写结束
}
/*******************************

相关帖子

沙发
armecos| | 2008-12-23 16:57 | 只看该作者

看《ucos51文档》,里面有详细的参数传递说明,

使用特权

评论回复
板凳
Ice_River| | 2008-12-23 17:04 | 只看该作者

!

DispStr(1,2,(uchar *)&"KKK");

使用特权

评论回复
地板
xhtxzxw| | 2008-12-23 21:24 | 只看该作者

嘿嘿

惊讶于LZ的奇怪写法

uchar idata i = 0, l = 0;

... ...

while (ptr[l] != 0){l++;};             //A

... ...

for (i=0; i<l; i++)                     //B
{
  dat = (ptr - 0x20);
  OutPortData(dat);
}

A,B为什么不写成C呢?就算不想写成C,也不该让AB两地分居啊!不人道嘛,呵呵

while (ptr)                       //C
  OutPortData( ptr[i++] - 0x20 );

使用特权

评论回复
5
zoupeng139|  楼主 | 2008-12-23 22:05 | 只看该作者

谢谢楼上的几位

4楼说得对呵呵
加强
最近在看C专家编程!!!

使用特权

评论回复
6
zoupeng139|  楼主 | 2008-12-23 22:06 | 只看该作者

仍然没有解决

………………

使用特权

评论回复
7
wsl_5631| | 2008-12-24 08:31 | 只看该作者

void DispStr(uchar lin, uchar column, uchar code *ptr)

void DispStr(uchar lin, uchar column, uchar  code *ptr) 

使用特权

评论回复
8
ice_snow| | 2008-12-24 08:51 | 只看该作者

同一三楼的看法

函数的第三个变量为指针,应该给“kkk“的地址吧

使用特权

评论回复
9
Ice_River| | 2008-12-24 10:50 | 只看该作者

void DispStr(uchar lin, uchar column, uchar *ptr)

使用特权

评论回复
10
zoupeng139|  楼主 | 2008-12-24 10:59 | 只看该作者

xhtxzxw

A,B为什么不写成C呢?就算不想写成C,也不该让AB两地分居啊!不人道嘛,呵呵

while (ptr)                       //C
  OutPortData( ptr[i++] - 0x20 );

 请问:
OutPortData( ptr[i++] - 0x20 );//输出数据函数
此句意思是,当ptr不为0时, 输出ptr的数据,然后再执行i++?

使用特权

评论回复
11
xhtxzxw| | 2008-12-24 18:57 | 只看该作者

嘿嘿

回LS:显然是的锣!

使用特权

评论回复
12
xc_cz| | 2008-12-25 14:28 | 只看该作者

同9楼

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

79

主题

429

帖子

2

粉丝