[技术问答]

为什么采用第二种方式0X3800读出的结果不对?

[复制链接]
888|3
手机看帖
扫描二维码
随时随地手机跟帖
hxdjb|  楼主 | 2018-4-30 21:55 | 显示全部楼层 |阅读模式
AD, ui, ROM, TE, ADDR
/*------------------------------------------------
------------------------------------------------*/
UINT8 read_APROM_BYTE(UINT16 code *u16_addr)
{
        UINT8 rdata;
        rdata = *u16_addr>>8;
        return rdata;
}
/*------------------------------------------------
------------------------------------------------*/
UINT8 Eeprom_read(UINT8 addr)
{   
    UINT8 *p2;
    p2 = (UINT8 *)(0x3800+addr);
    return *p2;
}
/*------------------------------------------------
------------------------------------------------*/
write_DATAFLASH_BYTE (0x3800,4); //  往APROM 0X3800空间写入数据4。
data=read_APROM_BYTE(0X3800) ;    //  读出的结果正确。
data=Eeprom_read(0) ;            // 读出的结果错误。

hxdjb|  楼主 | 2018-4-30 22:18 | 显示全部楼层
有一点点思路,不知对不对 UINT8 read_APROM_BYTE(UINT16 code *u16_addr)形参UINT16 code *u16_addr里面的关键字code是说16位的地址是在程序存储区内、但是在下取得面的的代码中却无法确定,但是不知道怎么改,code这个关键字不知道放在哪里才行,试过几次,编译都报错。
UINT8 Eeprom_read(UINT8 addr)
{   
    UINT8 *p2;
    p2 = (UINT8 *)(0x3800+addr);
    return *p2;
}

使用特权

评论回复
hxdjb|  楼主 | 2018-4-30 22:27 | 显示全部楼层


好了,把第二段程序中的UINT8 *p2  改成 UINT8 code *p2 .
   

使用特权

评论回复
zhuomuniao110| | 2018-5-1 09:02 | 显示全部楼层
厉害啊,第一个带code类型,指定了在哪个 存储体呢。后面没有了,所以换了位置。你又加上了,就又回到了code存储区。

使用特权

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

本版积分规则

127

主题

236

帖子

2

粉丝