查看: 1824|回复: 4

[其他] 每天解决一个问题21:数组与结构体的联合使用

[复制链接]

该用户从未签到

33

主题

292

帖子

0

高级会员

Rank: 4

积分
600
最后登录
2016-4-19
发表于 2015-9-23 19:57:04 | 显示全部楼层 |阅读模式

原帖:https://www.eefocus.com/luo_xinli/blog/14-12/307273_752a5.html

有的同事偏好使用结构体,有的同事偏好使用数组。结构体方便系统数据的管理,数组在做104协议通讯、MODBUS协议通讯时方便。这是我的一位同事总结的结论。但是我的这位同事仍旧偏好使用数组。这个在很大程度上影响了全公司。我们来摘取他的代码来研究一下。


int  setPara[5];];

#define SYS_SET_PARA_ADD_BASE 0x2000

enum setParaAdd {
                                           workTimeAdd,        //系统吸附时间地址
                                          regerTimeAdd,       //系统再生时间地址
                                           pressTimeAdd,      //均压时间地址
                                          stopTimeAdd,         //停机时间
                                          gateTypeAdd           //阀门属性Í
                                   };     
以上代码是定义了一个setPara的数组,整型数据。setParaAdd 是枚举类型,
  workTimeAdd、  regerTimeAdd、  pressTimeAdd、  stopTimeAdd、   gateTypeAdd就是常量0-5.刚好用于setPara下标。
我们来看看他的通讯程序中的一段代码:
         if((startAdd>=SYS_SET_PARA_ADD_BASE)
              &&(startAdd<=(SYS_SET_PARA_ADD_BASE+gateTypeAdd)))
         {
                   startAdd =(unsigned char)( startAdd &0x00ff );
                    for(j=0;j<RegNumber;j++)
                    {
                         setPara[startAdd+j]= UART0.RX_buf[i++];
                            setPara[startAdd+j]= (setPara[startAdd+j]<<8) + UART0.RX_buf[i++];
                   }
                               
    }



   以上代码很简单的完成了对 setPara数据的接收。这个系统使用的是MODBUS协议。SYS_SET_PARA_ADD_BASE是配置参数的基地址,  workTimeAdd、  regerTimeAdd、  pressTimeAdd、  stopTimeAdd、   gateTypeAdd其实就是参数的偏移地址。这段代码很简洁。但是确实完成了对任意寄存器的写功能。所以数组在通讯任务代码的编写非常有用。

   我们再来看看在其他任务中,数组的应用
                setPara[workTimeAdd]  =300;
                 setPara[regerTimeAdd] =240;
                 setPara[pressTimeAdd] =5;
                 setPara[stopTimeAdd]  =30;
                 setPara[gateTypeAdd]=positive;
     write_24(0x00, &setPara,sizeof(setPara));

  这种写法体现了数组与枚举的联合使用的魅力,就是代码不太容易编写错误,代码编写效率比较高。


我知道答案 目前已有4人回答
回复

使用道具 举报

该用户从未签到

61

主题

965

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2394
最后登录
1970-1-1
发表于 2015-9-24 09:21:22 | 显示全部楼层
c 基础            
回复 支持 反对

使用道具 举报

该用户从未签到

33

主题

292

帖子

0

高级会员

Rank: 4

积分
600
最后登录
2016-4-19
 楼主| 发表于 2015-9-24 11:13:59 | 显示全部楼层

基础很重要
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5785
    最后登录
    2025-5-7
    发表于 2015-9-24 15:24:20 | 显示全部楼层
    谢谢分享
                                     154120hhw0q0e0hpw374yw.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    61

    主题

    965

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2394
    最后登录
    1970-1-1
    发表于 2015-9-25 08:47:25 | 显示全部楼层

    C基础必须重要。搞了几十年的C还是要回来看基础的
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 05:39 , Processed in 0.101802 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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