当前位置: 首页 > news >正文

C语言数据结构笔记6:使用宏和指针来设置和操作嵌套在结构体中的联合体数组的特定位

使用宏和指针来设置和操作嵌套在结构体中的联合体数组的特定位

 

目录

直接贴代码了:

 

直接贴代码了:

主要时要注意在嵌入式开发中,指针的使用

需要申请内存,然后及时释放

指针使用前后也要及时指向NULL

否则,它指向地址的值可能会被改变、清零,乃至程序直接卡死都有可能

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>  // 确保包含此头文件以使用 uint8_t// 定义宏来设置特定位
#define SET_BIT(reg_ptr, bit) ((reg_ptr)->byte |= (1 << (bit)))
// 定义宏来清除特定位
#define CLEAR_BIT(reg_ptr, bit) ((reg_ptr)->byte &= ~(1 << (bit)))typedef union {uint8_t byte;  // 整个字节数组访问struct {uint8_t b0 : 1;uint8_t b1 : 1;uint8_t b2 : 1;uint8_t b3 : 1;uint8_t b4 : 1;uint8_t b5 : 1;uint8_t b6 : 1;uint8_t b7 : 1;} bits;
} _02_regs;typedef struct MB_Funccode_regs {_02_regs Failure_Malfunction[15]; // 故障异常 //0x03e8 - 0x045f (120个元素)// 假设 _04_regs_A 定义在其他地方
} MB_regs;MB_regs test_regs;int main() 
{uint16_t start_addr;_02_regs *reg_ptr = NULL;reg_ptr = (_02_regs *)malloc(sizeof(_02_regs));reg_ptr = &test_regs.Failure_Malfunction[0];    // 设置第0个字节start_addr =1;// 清除第0个字节的第1位SET_BIT(reg_ptr,(start_addr - 0)%8);// 打印结果以验证printf("Byte 0 _ bit 1: 0x%02X\n", test_regs.Failure_Malfunction[0].byte);reg_ptr = NULL;free(reg_ptr);return 0;
}

 

相关文章:

  • SpringBoot学习day1-SpringBoot的简介与搭建
  • SD-WAN 技术如何助力工业物联网(IIoT)数据传输?深度解析传统方案对比与应用实践
  • 解码 K-Means 聚类:开启数据星河的炫酷聚类新纪元
  • 运维之十个问题--2
  • 华为Pura 80系列发布 6499元起
  • 美团完整面经
  • Android学习之Window窗口
  • 商城系统源码加密与不加密(开源)的区别
  • 冥想助手技术支持
  • DMC-E 系列总线控制卡----雷赛板卡介绍(四)
  • 算法训练第十五天
  • Mybatis辅助配置-配置SQL提示
  • 【大模型开发应用】提示工程
  • ACS的ExtendedSegmentArc1 方法说明
  • el-select滚动分页加载、模糊搜索
  • Golang SSH握手过程中,报错跟客户端在算法签名上不匹配
  • 无IT审计经验,通过 CISA 考试
  • 打卡Day51
  • force命令的使用
  • 青藏高原地区多源融合降水数据(1998-2017)
  • 手机网站信任从哪里设置/seo推广软件下载
  • 网站开发目录结构/店铺推广方案怎么写
  • 免费的小网站/网站搜索优化价格
  • 网站制作1000元/交换友情链接是什么意思
  • 西安注册公司在哪个网站系统/郑州网站顾问热狗网
  • 专业网站设计公司哪里有/什么是信息流广告