晨尿浑浊是什么原因| 业报是什么意思| 什么是ps| 耳鸣脑鸣是什么原因引起的| 今天冲什么生肖| 胃炎吃什么中药| 阴历7月22是什么日子| 金是什么结构| 7.14是什么日子| 不见棺材不落泪是什么生肖| 终端是什么意思| 痛风要吃什么药好得快| 卵泡期是什么意思| 英短蓝猫吃什么猫粮好| 乙醇和酒精有什么区别| 全血铅测定是什么意思| 鸡蛋过敏什么症状| 什么前什么后| 合肥有什么玩的| 什么是陈述句| 什么叫统招生| 狐狸和乌鸦告诉我们什么道理| 什么方法可以治打嗝| 自主能力是什么意思| 古曼童是什么| 二级教授是什么意思| 霍金得的是什么病| 特别提款权是什么意思| 肌腱炎是什么症状| 氯化钾是什么东西| 消炎药有什么| 立秋是什么意思| 晚上睡觉手麻木是什么原因| 尿拉不出来是什么原因| 梦见买面条有什么预兆| 皮蛋吃多了有什么危害| 为什么打哈欠会传染| 祈祷什么意思| 晚上睡眠不好有什么办法可以解决| 腿肚子抽筋是什么原因| 什么叫人彘| 11.24是什么星座| 12点是什么时辰| 山药叶子长什么样图片| 舒筋健腰丸为什么这么贵| 手上起小水泡是什么原因| 军犬一般是什么品种| 声援是什么意思| 八月二十六是什么星座| 你是什么意思| 什么食物降血压| gr是什么元素| 云南什么族| 什么是戒断反应| 贾字五行属什么| 昙花什么时候开花| 神经官能症有什么症状表现| crp是什么| 脾不统血吃什么中成药| 血管炎不能吃什么食物| spank是什么意思| 女生男相的是什么命| 为什么睡不着觉会胡思乱想| 谷氨酰转肽酶偏高是什么意思| 鼠的守护神是什么菩萨| 手腕痛挂什么科| 顶臂长是什么意思| 大便隐血阳性是什么意思| 人际关系是什么意思| 王字旁的字有什么| 孩子为什么长不高| 舌苔白是什么原因| 什么的哭声| 农历3月14日是什么星座| 梦见老鼠是什么征兆| 黄色衣服配什么颜色裤子好看| 孕妇梦到被蛇咬是什么意思| 绞股蓝长什么样| 丙氨酸氨基转移酶高是什么意思| 逼长什么样| 绍兴本地人喝什么黄酒| 四肢厥逆是什么意思| 皮炎是什么原因引起的| 好文采是什么意思| 什么样的女人最吸引男人| 什么是用户名| 念珠菌阳性是什么意思| 妇科病是什么| 淮山是什么| 动物的尾巴有什么作用| 新生儿上户口需要什么资料| 颧骨疼是什么原因| 拔牙为什么要验血| 梦见游泳是什么预兆| 痛风吃什么比较好| 大姨妈没来是什么原因| 肝的主要功能是什么| 什么是腱鞘炎| 五月十日是什么星座| 滑膜炎什么症状| 白内障什么原因造成的| 余事勿取 什么意思| 外阴瘙痒用什么药膏| 红斑狼疮吃什么药最好| 罗汉果有什么作用| 眩晕症吃什么药最好| 肺不张是什么意思| 迁徙是什么意思| 腿外侧是什么经络| 鳞状上皮细胞高是什么原因| 青霉素主治什么病| 骨骼清奇什么意思| 什么好像什么一样| 伶人是什么意思| 泌尿外科是看什么的| 甲状腺功能检查挂什么科| 驴打滚是什么| 甜字五行属什么| 草木皆兵指什么生肖| 211是什么星座| rem什么意思| 夏天容易出汗是什么原因| 梦到绿色的蛇是什么意思| 嗓子痒痒老想咳嗽是什么原因| 黄体破裂是什么意思| 米粉是用什么做出来的| 什么颜色加什么颜色等于橙色| 1995是什么年| 一眼万年是什么意思| hbeab阳性是什么意思| 小脑的功能是什么| 换药挂什么科| honey什么意思| 缺铁性贫血吃什么食物| 湿疹用什么药效果好| 西安什么省| 学制是什么| 六月十二日是什么日子| 圆脸适合什么眉形| 血压高吃什么药比较好| 做梦梦到牙齿掉了是什么意思| 南非叶主治什么病| 十月一日是什么日子| 情人节送妈妈什么花| 清远有什么好玩的| 玉米什么时候播种| 田七蒸瘦肉有什么功效| 6.29什么星座| 为什么有白带| 什么叫小三阳| 鱼肉百姓什么意思| 尿蛋白高是什么意思| 安全监察是一种带有什么的监督| 内膜厚是什么原因| 再三的意思是什么| 什么叫三无产品| 内热外寒感冒用什么药| 不见棺材不落泪是什么生肖| 目是什么单位| 孕妇放屁多是什么原因| 输液葡萄糖有什么作用| 什么是笑气| 小便发黄是什么原因引起的| 喘粗气是什么原因| 什么叫认知能力| 开挖掘机需要什么证| hpv弱阳性是什么意思| 蜱虫的天敌是什么| 什么竹笋不能吃| 意难平是什么意思| 莓茶属于什么茶| 经期适合喝什么汤| 黄皮果什么时候成熟| 茯苓有什么功效和作用| 马华读什么| 棒打鸳鸯什么意思| 再接再厉后面接什么好| 臭鳜鱼是什么菜系| 线差是什么意思| 陶渊明字什么| 阴茎里面痒是什么原因| 闭口是什么样子| 内疚是什么意思| 黄痰吃什么药| 教育的本质是什么| 肠胃性感冒吃什么药| 大陆人去香港需要什么证件| 7月中旬是什么时候| 鲫鱼吃什么食物| 关晓彤属什么生肖| 樱桃泡酒有什么功效| 用什么泡脚好| 20岁属什么| 乳房结节吃什么药| 喜悦之情溢于言表什么意思| 氯是什么意思| 7点到9点是什么时辰| 8月26日什么星座| 扁桃体切除有什么坏处| 住院医师是什么职称| 柳下惠姓什么| 横纹肌溶解是什么意思| chihiro是什么意思| 经期是什么意思| 疣长什么样子| 全飞秒是什么| 减肥吃什么食物| 昱五行属性是什么| 猪肝跟什么相克| 神经官能症有什么症状表现| 乔迁送什么礼物好| 傻白甜的意思是什么| 5月28号是什么日子| 吃什么容易消化| 倒模是什么| 牛字五行属什么| 特需病房是什么意思| 血糖的单位是什么| 垂体泌乳素高是什么原因| 睾丸上长毛意味着什么| 乌鸡汤放什么补气补血| 关羽使用的武器是什么| sids是什么意思| 椎间盘膨出是什么意思| 人体电解质是什么| c反应蛋白偏高是什么原因| 平舌音是什么意思| 做什么生意挣钱| 霏是什么意思| 表是什么意思| c2能开什么车| 1223是什么星座| 睡觉爱流口水是什么原因| 吃芒果后不能吃什么| 娃娃鱼吃什么食物| 张少华什么时候去世的| 紫苏有什么作用与功效| 稽留流产什么意思| 百合花语是什么意思| 包涵是什么意思| 腹泻吃什么消炎药| sd是什么意思| 胃胀疼是什么原因| music什么意思| 孕中期同房要注意什么| 甲功五项挂什么科| 金蝉脱壳是什么意思| 疤痕子宫什么意思| 猫不喜欢什么味道| 澄面粉是什么面粉| 一六年属什么生肖| 710是什么意思| 高尿酸血症是什么病| 人属于什么界门纲目科属种| 过刚易折什么意思| 刚怀孕有什么办法打掉| 局长是什么级别干部| 印第安人属于什么人种| 鼻基底用什么填充最好| 一饿就心慌是什么原因引起的| 菠萝是什么意思| 反酸吃什么马上能缓解| 荨麻疹什么东西不能吃| 吃什么皮肤会变白| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 嵌入式开发 ? MCU ? 结构体在MCU软件编程中的应用

共5条 1/1 1 跳转至

结构体在MCU软件编程中的应用

工程师
2025-08-04 12:34:38     打赏
百度 在当时特定的历史条件下,我们不可能马上实行全国普选并召开全国人民代表大会会议,因而由中国人民政治协商会议“宣布”自己“代行”全国人民代表大会的职权。

学过C语言的大家都知道,结构体一般是这样声明的:

image.png

其实,很好的利用结构体技术,可以更好的实现和完成编程任务~

以下介绍结构体在MCU软件编程中的应用喔


假如我们需要使用单片机的串口与外设模块通讯,串口的通讯协议如下图所示,我们可以怎么设计这个数据结构以方便单片机操作从串口接收或者发送的数据呢。

这里,我介绍两种方法,一种是使用数组来构建满足协议的数据结构,另一种是使用结构体来构建满足协议的数据结构,我们看看哪种方法更适合处理上述问题。


首先看看使用数组来构建数据结构的方法,如下代码所示。

//用于存放6个字节的协议数据

unsigned char arr[6];

unsigned char len;


len = sizeof(arr);

//当串口缓冲区(假设是一个名为ser的数组)来了数据后,我们需要把串口数据复制到arr数组中

memcpy(arr, ser, len);


//拷贝完成后,我们需要校验、检查这些数据

unsigned char sum = 0;

unsigned char *p;


p = arr;

while(--len> 0)

{

  sum += *p++; 

}


//校验

if(sum == arr[5])

{

  //检查收到的数据ID是否是我的目的ID

  if(arr[0] == 0x01 && arr[1] == 0x02 && a[2] == 0x03)

  {

     //检查类型,确认是否是我的目标类型

     if(arr[3] == 0x05)

     {

       //检查事件并做相应的动作.....  

     }

  }   

}


从上述代码可以看出,对于接收到数据保存在arr后,需要指定索引才能准确的引用你需要的字节数据,这样做除了不方便以外,还容易出错。假如此时串口协议变更,比如我们需在ID3与类型之间扩充一个字节,此时你的代码肯定要改动,因为arr数组中arr[3]对于的位置已经不是类型了,arr[5]对应的也不是校验和了。显然,这种方法虽然可以用来处理串口数据,但是扩展性不好,程序引用相应的数据也不方便。那怎么办呢,用结构体就可以很好的解决这些问题,我们先来看代码。

typedef struct

{

  unsigned char id[3];

  unsigned char type;

  unsigned char event;

  unsigned char sum;    

}pro_t;


pro_t pro;

unsigned char len;


len = sizeof(pro_t);

//当串口缓冲区(假设是一个名为ser的数组)来了数据后,我们需要把串口数据复制到pro结构体中

memcpy((unsigned char *)&pro, ser, len);


//拷贝完成后,我们需要校验、检查这些数据

unsigned char sum = 0;

unsigned char *p;


p = (unsigned char *)&pro;

while(--len > 0)

{

  sum += *p++; 

}


//校验

if(sum == pro.sum)

{

  //检查收到的数据ID是否是我的目标ID

  if(pro.id[0] == 0x01 && pro.id[1] == 0x02 && pro.id[2] == 0x03)

  {

     //检查类型,确认是否是我的目标类型

     if(pro.type == 0x05)

     {

       //检查事件并做相应的动作.....  

     }

  }   

}

从上述代码可以看出,程序引用协议数据相比数组结构更为方便而且清晰不易出错,当需要在ID3以及类型之间插入一个字节时,我们只需要更改pro_t类型的数据结构,而不需要变更我们已经写好的程序,如下图所示。

typedef struct

{

  unsigned char id[3];

  unsigned char extend;

  unsigned char type;

  unsigned char event;

  unsigned char sum;    

}pro_t;


综合来看,为了更好的让单片机的程序组织或者引用协议数据,使用结构体要比使用数组更好,不论从清晰,方便以及可扩展上都更具优势!





关键词: 软件编程     编程技巧     C语言     结构体     通讯协议    

工程师
2025-08-04 20:49:34     打赏
2楼

确实很实用的软件编程技术!


工程师
2025-08-04 21:03:31     打赏
3楼

结构体来处理这种通讯协议,NICE!


高工
2025-08-04 21:18:20     打赏
4楼

很强


工程师
2025-08-04 21:19:54     打赏
5楼

深深领教、学习了,谢谢分享!


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
断码是什么意思 为什么不吃猪肉 高血压吃什么食物 景象什么意思 故作矜持的意思是什么
冰箱发热是什么原因 测怀孕什么时候最准 狭隘是什么意思 拉雪橇的狗是什么狗 胆囊结石是什么症状
芊芊学子是什么意思 婕妤是什么意思 摇头晃脑是什么生肖 最贵的金属是什么 右眼一直跳是什么原因
淀粉和面粉有什么区别 泵的扬程什么意思 便秘灌肠用什么水 枸杞泡水喝有什么作用和功效 骨髓瘤是什么原因引起的
漠河什么时候可以看到极光hcv7jop6ns9r.cn 犬瘟是什么原因引起的hlguo.com 原字五行属什么hcv8jop3ns1r.cn 运营商是什么意思hcv8jop1ns7r.cn iga肾病是什么病clwhiglsz.com
试管进周期是什么意思hcv8jop7ns1r.cn 娃娃脸是什么意思hcv9jop1ns1r.cn 阴阳失调吃什么中成药hcv9jop2ns7r.cn 三伏天是什么时候hcv9jop5ns8r.cn 龟头炎用什么药好hcv9jop3ns9r.cn
泰能是什么药hcv8jop4ns6r.cn 衣服发黄是什么原因wuhaiwuya.com 什么情况下吃速效救心丸hcv9jop8ns3r.cn 宝格丽手表什么档次xscnpatent.com 酸辣粉是什么粉youbangsi.com
什么是植物神经zhongyiyatai.com 脾大对身体有什么影响hcv9jop2ns8r.cn 经常饿肚子会导致什么后果hcv7jop9ns6r.cn 天德合是什么意思jinxinzhichuang.com 十月一日是什么日子hcv7jop5ns5r.cn
百度