cnfushao 发表于 2022-3-22 16:32:43

【提问】modbusC_V1.1 中访问变量地址空间


我想修改modbusC_V1.1的源码,在这里加个字节到位的映射,以提高通讯效率,需要访问变量地址空间,该如何访问变量地址空间?
我看头文件里面有2行注释了的声明:
// u16         Read_Dgus(u16 Dgus_Addr);
// void      Write_Dgus(u16 Dgus_Addr,u16 Val);
这2个函数是做什么的? 我能调用吗?

integer_32 发表于 2022-3-22 16:58:42

可以调用的,这两个函数就是读取和写入 DGUS变量的。

gongmin1982 发表于 2022-3-23 13:47:30

u16 Read_Dgus(u16 Dgus_Addr)
{                              u16 R_Dgus=0;
                        EA = 0;ADR_H = 0x00;
                        ADR_M = (u8)((Dgus_Addr/2)>>8);
                        ADR_L = (u8)(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;
                        RAMMODE = 0; EA = 1;        return   R_Dgus;
}
//====================================
void Write_Dgus(u16 Dgus_Addr,u16 Val)
{         EA = 0;ADR_H = 0x00;
                        ADR_M = (u8)((Dgus_Addr/2)>>8);
                        ADR_L = (u8)(Dgus_Addr/2);
                        RAMMODE = 0xAF;while(!APP_ACK);                //¶Á²Ù×÷
                        APP_EN = 1;while(APP_EN);RAMMODE = 0;
                           ADR_M = (u8)((Dgus_Addr/2)>>8);
                        ADR_L = (u8)(Dgus_Addr/2);
                        RAMMODE = 0x8F;while(!APP_ACK);                //д²Ù×÷
                        if(Dgus_Addr%2){DATA1=(u8)(Val>>8);DATA0=(u8)(Val);}
                        else         {DATA3=(u8)(Val>>8);DATA2=(u8)(Val);}
                  APP_EN = 1;        while(APP_EN);RAMMODE = 0;
                        EA = 1;
}
页: [1]
查看完整版本: 【提问】modbusC_V1.1 中访问变量地址空间