打印
[51单片机]

为什么指针无法读取返回值

[复制链接]
1244|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
823523616|  楼主 | 2013-12-17 00:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include "1602.h"

#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define  delay()  _nop_();_nop_();_nop_();_nop_();_nop_()
  sbit scl=P2^6;
  sbit sda=P2^7;

uchar  l[]={0x63,3,4,5,6,7,8,9};
uint k[8];
void start()
{  
  sda=1;
  scl=1;
  delay();
  sda=0;
  delay();
  scl=0;
}
void stop()
{  
sda=0;
scl=1;
delay();
sda=1;
delay();
  
}
void ack()
{
scl=1;
sda=1;
while(sda);
scl=0;
delay();
}

void PC_ack()
{

scl=1;
sda=1;
sda=0;
delay();
scl=0;
delay();
}

void write_byte(uchar d)
{ uchar i;
for(i=0;i<8;i++)
   {
            sda=(bit)((d<<i)&0x80);
          scl=1;
          scl=0;  
   }
}
void write_one(uchar e,uchar f)
{
   start();
   write_byte(0xa0);
   ack();
   write_byte(e);
   ack();
   write_byte(f);
   ack();
   stop();
}

uint read_byte()
{ uchar i;
  uint b;
  for(i=0;i<8;i++)
   {  
              b<<=1;        
                scl=0;
                b|=(sda)?0x01:0x00;
        scl=1;
   }
    return b;
}
uchar read_one(uchar m)
{
  uchar b;
  start();
  write_byte(0xa0);
  ack();
  write_byte(m);
  ack();
  start();
  write_byte(0xa1);
  ack();
  b=read_byte();
  delay();  
   stop();
   return b;
}

void write_page(uchar e,uchar *q)
{
   start();
   write_byte(0xa0);
   ack();
   write_byte(e);
   ack();
   while(*q)
   {
            write_byte(*(q++));
     ack();
   }
   stop();
}
uint read_page(uchar h,uchar m)
{
  uint *v;
  uchar i;
  start();
  write_byte(0xa0);
  ack();
  write_byte(h);
  ack();
  start();
  write_byte(0xa1);
  ack();
        for(i=0;i<m;i++)
        {
          k=read_byte();
          PC_ack();
         
    }
  stop();
  v=&k[0];
  return *v;
}


void main()
{
   uint **w;
   uchar i;
   write_page(0x00,l);
   LCD_init();
   while(1)
   {  
   
            for(i=0;i<8;i++)
          {
          w=read_page(0x00,8);
           zl(0x80+i*2);
           sj((**w>>4)%10+0x30);
           sj((**w&0x0f)%10+0x30);
          }
     
   }
}
为什么在主函数中的
    w=read_page(0x00,8);
  会出现   illegal pointer conversion 的语句?哪位大神能告诉我,谢谢

相关帖子

沙发
ayb_ice| | 2013-12-17 08:13 | 只看该作者
基础不行,没有办法

使用特权

评论回复
板凳
sunhq02| | 2013-12-17 08:37 | 只看该作者
类型不一致...
你写的很乱

使用特权

评论回复
地板
lhchen922| | 2013-12-17 09:13 | 只看该作者
再复习下c语言。

使用特权

评论回复
5
vd5678| | 2013-12-17 09:52 | 只看该作者
read_page() 返回的是 uint,
為什麼你要把 w宣告成 uint **?

使用特权

评论回复
6
haitao10086| | 2013-12-17 11:10 | 只看该作者
功夫不到家;P

使用特权

评论回复
7
znmcu| | 2013-12-18 01:10 | 只看该作者
C语言的根本在于建立编程思想模型。就像你说中国话一样。你说了病句你自然感觉别扭。为什么你C语言写成这样,你就不觉得别扭呢!?编译器指出你有”语病”,你都意识不到错误在哪!

使用特权

评论回复
8
znmcu| | 2013-12-18 01:12 | 只看该作者
你为什么要定义一个uint **?你要深刻理解你自己写的每一条语句的具体意义。为什么要这么写?

使用特权

评论回复
9
diweo| | 2013-12-18 19:52 | 只看该作者
补充一下
  v=&k[0];
  return *v;

本来就是返回一个Int,直接return k[0]不就行了,干嘛还要取了它的地址再用指针?

使用特权

评论回复
10
823523616|  楼主 | 2013-12-18 22:57 | 只看该作者
ayb_ice 发表于 2013-12-17 08:13
基础不行,没有办法

大神你能否把我错的地方纠正过来,写出来看下,谢谢

使用特权

评论回复
11
823523616|  楼主 | 2013-12-18 22:59 | 只看该作者
diweo 发表于 2013-12-18 19:52
补充一下
  v=&k[0];
  return *v;

我之前试过返回K[0];但是在主函数取值时还是相同的错误

使用特权

评论回复
12
823523616|  楼主 | 2013-12-18 23:02 | 只看该作者
diweo 发表于 2013-12-18 19:52
补充一下
  v=&k[0];
  return *v;

我之前用过直接返回K[0],在主函数取值时还是出现同样的错误才这样写的

使用特权

评论回复
13
823523616|  楼主 | 2013-12-18 23:06 | 只看该作者
znmcu 发表于 2013-12-18 01:12
你为什么要定义一个uint **?你要深刻理解你自己写的每一条语句的具体意义。为什么要这么写? ...

这是因为在主函数取值时我用 *W 去取值也是同样的错误才用指向指针的指针,版主那你能告诉我该怎样改吗?谢谢

使用特权

评论回复
14
823523616|  楼主 | 2013-12-18 23:08 | 只看该作者
haitao10086 发表于 2013-12-17 11:10
功夫不到家

帮帮忙,指条道谢谢

使用特权

评论回复
15
ayb_ice| | 2013-12-19 08:53 | 只看该作者
823523616 发表于 2013-12-18 22:57
大神你能否把我错的地方纠正过来,写出来看下,谢谢

void read_page(uchar h,uchar m, uchar* p)
{
        uchar i;

        start();

        write_byte(0xa0);
        ack();

        write_byte(h);
        ack();

        start();

        write_byte(0xa1);
        ack();

        for(i=0; i<m; i++)
        {
                k = read_byte();
                PC_ack();

                p = k;
        }

        stop();

}

//___________________
// 调用
        uchar read_page_buffer[32];
       
        read_page(1, 32, &read_page_buffer[0]);

使用特权

评论回复
16
diweo| | 2013-12-19 11:20 | 只看该作者
823523616 发表于 2013-12-18 22:59
我之前试过返回K[0];但是在主函数取值时还是相同的错误

对呀,你在这里做了更改,还提示同样的错误,那说明错误的地方不在这里。
事实上,这样写不是不对,而是不合理。编译器不会报错的。
但是这里边应该是很基础的,可你却不确定,说明基础真的是不扎实。

建议L不要急着出东西,先恶补C语言基础知识再说吧。

使用特权

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

本版积分规则

1

主题

12

帖子

0

粉丝