3487|8

238

帖子

2

TA的资源

纯净的硅(高级)

楼主
 

让struct飞一会儿 [复制链接]

struct飞一会儿

嵌入式开发时,大多使用C语言。C语言并非那么几个函数的事,也不是几个变量就能搞定。在网络编程和USB使用时,大家都觉的困难,这些程序读起来更困难。在这些程序中使用了较多的struct,所以看起来很复杂,用起来很是麻烦。即使这样,对于一个嵌入式工程师来说,struct是必须掌握的。下面就分享一个struct,让struct在论坛中飞一会儿吧。

Struct结构类型定义和结构变量说明。在实际问题中,一组数据往往具有不同的数据类型。例如,在套接字编程中会经常使用到两个结构体,sockaddr_insockaddr此数据结构用做bindconnectrecvfromsendto等函数的参数,指明地址信息,这是套接字编程的第一步,可以看出struct的重要性

struct sockaddr {

  u8_t sa_len;

  u8_t sa_family;

  char sa_data[14];

};

从上面这个结构体中可以看出,struct使用C已有的变量类型自定义一个结构变量类型。struct是一种构造类型,它是由若干成员组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型。结构既是一种构造而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义函数一样。常用于报文收发、协议编写,在通信领域有极大的作用。

例如,在使用RS232进行485通信时,常用在RS232的基础上加一层485协议,此协议可以自定义。如果一个主机对多个从机时,常用struct定义一个收发协议。

struct Fram{

char cStart; //开始标志 @

char cAdd[2]; //从机地址

char cCmd[8];//命令

char cWd[2];//分隔符号

char cData[10];//发送的数据

char cEnd;//结束标志 回车符

}

每一次主机发送时,使用RS232发送此协议的一个包,在从机收到后进行协议处理,作出相应的处理。

有的工程师会使用一个char 定义一个数组,使用此数组进行通信,使用偏移量来读取数据,的确可以,但是这样操作对数据处理很麻烦,同时,在行业时都是使用struct,读别人程序会很麻烦。

为了让自己的编程水平更上一层,建议在写协议等通信编程时尽量使用struct

 

最新回复

呵呵, C++里的类  详情 回复 发表于 2011-3-13 18:37
 
点赞 关注
个人签名QQ:1795100002
E-mail:paulhyde@qq.com

回复
举报

1万

帖子

16

TA的资源

版主

沙发
 

子弹终究会落的,不知打谁

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 

回复

5015

帖子

13

TA的资源

裸片初长成(初级)

板凳
 
呵呵,我倒不认为数组就不比structure好,要知道数组是连续存储的,很多精妙的操作都会在这出现。但就可读性,结构体确实好看些,同时层次感也强烈。感谢楼主分享!
 
 
 

回复

238

帖子

2

TA的资源

纯净的硅(高级)

4
 

回复 板凳 wstt 的帖子

呵……是啊……我已经说明了,写协议时,或者报文传输之类的,struct有明显的优势。
 
个人签名QQ:1795100002
E-mail:paulhyde@qq.com
 
 

回复

918

帖子

0

TA的资源

纯净的硅(中级)

5
 

回复 楼主 paulhyde 的帖子

确实是这样的,结构体有它独特的优点,谢谢分享心得。
 
 
 

回复

2804

帖子

0

TA的资源

五彩晶圆(初级)

6
 
现在用Struct写面向对象的程序!~

数组和结构体是各有各的用途,没有哪个好哪个不好,只有哪个更适合!~
 
个人签名QQ:1625345502
 
 

回复

918

帖子

0

TA的资源

纯净的硅(中级)

7
 

回复 6楼 wanghongyang 的帖子

对,辩证法,呵呵。
 
 
 

回复

2641

帖子

0

TA的资源

五彩晶圆(中级)

8
 
这个是萝卜白菜
 
 
 

回复

102

帖子

0

TA的资源

一粒金砂(中级)

9
 
呵呵, C++里的类
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表