迪文科技论坛

 找回密码
 立即注册
搜索
123
返回列表 发新帖
楼主: myt5l123

【提问】Read_Dgus 读取数据错误 T5L2 DGUS2 V5.5 2023.01.09 更新了...

[复制链接]

94

主题

138

回帖

1317

积分

超级版主

Rank: 8Rank: 8

积分
1317
发表于 2023-3-24 20:51:28 | 显示全部楼层
已私信您这边,加下我。
回复

使用道具 举报

10

主题

49

回帖

667

积分

高级会员

Rank: 4

积分
667
 楼主| 发表于 2023-3-27 09:03:39 | 显示全部楼层
本帖最后由 myt5l123 于 2023-3-27 11:20 编辑

问题已解决

”问题出在此代码上   (DATA3<<8)+DATA2;
你这种写法一般情况下,也是没错的,但是这个要看编译器,有的编译器可能不会帮你强转成16位   “

改为 ((uint16_t)DATA3<<8)+DATA2;  功能正常使用!
代码编写中一定要有代码来控制数据类型,不能交由编译器来控制



谢谢  大东及熊家余 两位工程师的耐心指导!


uint16_t Read_Dgus(uint16_t Dgus_Addr)                //改用Read_dgusii_vp 函数  避免读取失败
{
        uint16_t R_Dgus;
        //        EA = 0;
        ADR_H = 0x00;
        ADR_M = (uint8_t)((Dgus_Addr/2)>>8);
        ADR_L = (uint8_t)(Dgus_Addr/2);
        RAMMODE = 0xAF;                //读操作
        while(!APP_ACK);
        APP_EN = 1;
        while(APP_EN);
    //    if(Dgus_Addr%2)        R_Dgus = (DATA1<<8)+DATA0;
    //            else   R_Dgus=(DATA3<<8)+DATA2;
       if(Dgus_Addr%2)        R_Dgus = ((uint16_t)DATA1<<8)+DATA0;
               else   R_Dgus=((uint16_t)DATA3<<8)+DATA2;

        RAMMODE = 0;
//        //EA = 1;
        return   R_Dgus;        
}


回复

使用道具 举报

23

主题

163

回帖

1793

积分

金牌会员

Rank: 6Rank: 6

积分
1793
发表于 2023-3-31 20:10:28 | 显示全部楼层
这种不确定的结果使用联合是最好的选择,还省得移位或者乘除操作。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-7-12 21:07 , Processed in 0.031549 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表