MDK中定义共用体遇到的问题

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情
重整代码的过程中遇到的问题,百度没有找到解决方法,解决后来写一下自己的解决方法。

初衷是想实现寄存器式的操作,既能够位访问,也能够字访问,下面是代码。
typedef struct
{
    uint16 ChargeVoltage;
    uint16 BatteryVoltage;

    union 
    {
        uint8 Status;
        struct 
        {
            uint8 external_relay :1 ;
            uint8 internal_relay :1 ;
            uint8 charger_relay  :1 ;
            uint8 user_relay     :1 ;


            uint8 st32_power_pin :1;
            
告别手动换算!用C语言共用体(union)和结构体位域(bit-field)优雅搞定LCD段码屏驱动 本文详细介绍了如何利用C语言的共用体(union)和结构体位域(bit-field)技术优雅地实现LCD段码屏驱动,避免了传统手动换算和硬编码的维护难题。通过真值表转换和硬件抽象层的设计,开发者可以构建类型安全、可维护性高的驱动框架,适用于STM32和51单片机等嵌入式平台。 阅读详情

相关推荐

STM32问题分析:error: #136: struct “<unnamed>“ has no field “State“

说明: 本文原创作者『Allen5G』 首发于微信公众号『Allen5G』 标签:编程,软件,算法,思维 QQ技术资料群:736386324 个人微信 : coderAllen (人较多,请备注公众号读者) 推荐阅读: 如何更快的学习单片机? 编译力效程序时一直出现这个错误,实际程序应该是对的,然后搜索对比了下,发现是库函数变化原因 huart->State = HAL_UART_ST...

CodeAllen嵌入式 2万+

error: #136: struct “<unnamed>“ has no field “BSRRL“

qq_47683445的博客 4939

keil5报“没有字段”错误 的解决方式

keil5报错:error: #136: struct "" has no field "PBout"

Miao8miao的博客 5154

error: #136: struct "<unnamed>" has no field "XXXX"

下面这个是高级定时器的时基的结构体初始化 void ADVANCE_TIM_Mode_Config() { // 开启定时器时钟,即内部时钟CK_INT=72M ADVANCE_TIM_APBxClock_FUN(ADVANCE_TIM_CLK,ENABLE); /*--------------------时基结构体初始化-------------------------*/ TIM_I...

Unarmed_的博客 2万+

KEIL C51 与MDK 编译器的几点区别

东莞权智集团 范伟 mail: fanwei326@163.com; wfan@gsl.com.cn QQ: 493786141 欢迎技术交流 近来用Keil C51做几个小项目,发现虽然同是C语言,但是C51的使用与MDK还是有区别的。 1,const关键字,在MDK中表示定义的是常量,放在ROM空间中。但是C51中const只表示被修饰的变量不可改变,但是变量是被保存在RAM内。我开始没注意到这一点,在C51将LCD的自定义字库用const定义,结果XDATA超过了2K, 程序运行会出现...

fanwei326的专栏 7334

共用体定义与应用详细解析

共同体的定义类似结构体,不过共同体的所有成员都在同一段内存中存放,起始地址一样,并且同一时刻只能使用其中的一个成员变量 定义: 使用覆盖技术,几个变量相互覆盖,从而使几个不同变量共占同一段内存的结构,成为共同体类型的结构。 共同体的定义类似结构体,不过共同体的所有成员都在同一段内存中存放,起始地址一样,并且同一时刻只能使用其中的一个成员变量。

6595

Keil MDK终于免费了,并且没有代码大小限制~

最近,Keil 官方推出了一则消息:Keil MDK新增一个版本,MDK社区版(MDK-Community edition)。该版本主要有两个特点:免费没有代码大小限制可供电子爱好者、学...

3万+

【编译器】解决keil_mdk编译error: #3092: anonymous unions are only supported in --gnu mode

提示:以下是本篇文章正文内容,下面案例可供参考本文仅仅简单介绍了【编译器】解决keil_mdk编译error: #3092: anonymous unions are only supported in --gnu mode,评论区欢迎讨论。

qq_42681425的博客 1581

嵌入式 C语言 补充

文章目录前言C语言结构体中__packed 和位段的理解1、__packed对齐2、位段共用体 union作用:举个例子assert()assert() 的用法和机制NDEBUG 宏C typedef为基本数据类型定义新的类型名为自定义数据类型(结构体、共用体和枚举类型)定义简洁的类型名称为了加深对 typedef 的理解,我们再来看一个结构体例子,如下面的代码所示:为数组定义简洁的类型名称为指针定义简洁的名称实际应用#defineC 标准库 - 前言 下面的内容很多都是做一些整理和搬运,借鉴了别人的文章,

nepqiu的博客 1065

位域

 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位...

qq_1070971363的博客 917

STM32--内存对齐

来自帖子 http://www.amobbs.com/forum.php?mod=viewthread&tid=5600177 举例吧:u8array[n]; // 这是1字节对齐的,与n取值无关。u16 array[n]; // 这是2字节对齐的,与n取值无关。u32 array[n]; // 这是4字节对齐的,与n取值无关。你把u16型数组的长度改为256可用,那仅仅是连接器的...

weixin_30823227的博客 1313

搭建STM32F103C8T6工程并编译测试

硬件接线插入电脑,打开设备管理器,显示STLink即驱动安装成功。

weixin_72119871的博客 1256

STM32G070开发避坑指南:为什么编译优化Level0会触发HardFault?

本文深入分析了STM32G070开发中编译优化Level0触发HardFault的根本原因——内存地址未对齐问题。通过解析Cortex-M0内核的内存访问机制和Keil MDK不同优化级别的影响,提供了强制变量对齐、修改编译器选项等解决方案,帮助开发者有效避免HardFault异常,提升代码稳定性。

time3的博客 383

单片机C语言基础

介绍一下单片机开发常见C使用

嵌入式分享 1万+

嵌入式C语言实战教程

目录第1章嵌入式C语言概述1.1 嵌入式C语言简介1.2 嵌入式C语言的发展历史1.3 嵌入式C语言的主要特点1.4 单片机的汇编语言与嵌入式C语言比较1.5 嵌入式C语言与标准C语言的异同1.6 嵌入式C语言总结嵌入式C语言程序的基本结构2.1 嵌入式C语言入门实例2.2 程序工作原理2.3 源程序1. 源程序 12. 源程序 2嵌入式C语言程序的基本结构头文件2.6 主函数2.7 函数3.1 嵌入式C语言的基本数据类型3.2 基本数据类型3.3 常量与变量3.4 自定义变量类型 typedef4.1 运

m0_67931155的博客 1203

C语言标准定义的32个关键字,C语言之标准C语言32个关键字

C语言之标准C语言32个关键字1、基本数据类型:signed unsignedchar int float double short long void2、构造数据类型:struct union enum3、数据存储类别:auto static extern register4、数据优化:const volatile5、9条基本语句:if else switch case break defaul...

weixin_27573409的博客 1249

2024年蓝桥杯嵌入式经验分享(附往届真题和蓝桥杯自己整理的嵌入式资料)

蓝桥杯嵌入式组比赛主要考察的是STM32相关的编程知识,涉及选择题的电子学科基础知识和编程大题实机操作。与蓝桥杯的其他纯软件组(如C、Java等)不同,嵌入式组更偏向硬件,要求参赛者具备模拟/数字电子技术基础、ARM Cortex M4硬件资源和软件编程与调试等知识。在比赛中,选手可以选择使用组委会下发至赛点的嵌入式竞赛平台新版本(STM32G431RBT6微控制器)或自带嵌入式竞赛平台旧版本(STM32F103RBT6微控制器)参加比赛。

clanned16的博客 2万+

嵌入式开发|软件项目中 Debug 和 Release 版本的差异~

很多集成开发环境(IDE),比如VS(VC)、IAR等,在创建工程时都会自动生成有Debug 和 Release两个版本。有些小伙伴比较纳闷,Debug 和 Release两个版本到底有什...

607
上一篇: Ublox 初探--获取经纬度信息
下一篇: 硬件改动导致软件配置错误的问题(更新ing)
hwnd_windows
博客等级 码龄12年 6粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值