Be Careful When Using Bit Field
Below illustration is based on MSP430, IAR. See the implementation below.
typedef struct
{
uint8_t groupAddress :; //group address
uint8_t pointAddress :; //point address
uint8_t deviceType :; //device type;
}DeviceAddressS; gDeviceAddress.groupAddress = address >> ;
gDeviceAddress.pointAddress = address & 0x7;
Let’s check the assemble code, there are total 26 execution codes and 28 execution codes for two lines C source code.

If we don’t use the bit field, what will be happened?
typedef struct
{
uint8_t pointAddress; //point address
uint8_t groupAddress; //group address
uint8_t deviceType; //device type;
}DeviceAddressS;
gDeviceAddress.groupAddress = address >> ;
gDeviceAddress.pointAddress = (address & 0x7);
Checking the assemble code again, there are total 10 execution codes and 12 execution codes.

So, the rule is that “be careful when using bit field”. Do you really has no enough space? In fact, if you don’t have enough space, the MCU performance is low, so don’t use bit field normally. If you real want to use it, using union and assigning whole value at the same time, see example below.
typedef union
{
uint8_t value;
struct
{
uint8_t pointAddress :; //point address
uint8_t groupAddress :; //group address
}bitFields;
}AddressU; void AddressTest(void)
{
uint8_t adddress = ;
AddressU temp;
temp.value = adddress;
temp.value |= (adddress & 0x7);
}

It has a good performance.
Note that, they have same performance when reading for bit field or non-bit field.
Be Careful When Using Bit Field的更多相关文章
- Sample Credential Providers
Windows Vista Sample Credential Providers Overview Contents Terms of Use Release Notes SampleCre ...
- How to reduce Index size on disk?减少ES索引大小的一些小手段
ES索引文件瘦身总结如下: 原始数据:(1)学习splunk,原始data存big string(2)原始文件还可以再度压缩倒排索引:(1)去掉不必要的倒排索引信息:例如文件位置倒排._source和 ...
- salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)
本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...
- salesforce 零基础学习(五十八)通过sObject的field返回其对应的基础类型
项目中有时候会要求通过sObject的Field的type类型返回其对应的基本类型,然后对其进行相关的处理,创建sObject的field可以选择的type类型是固定多的. 上述类型可以转换成几种基本 ...
- SharePoint 2013 Create taxonomy field
创建taxonomy field之前我们首先来学习一下如果创建termSet,原因是我们所创建的taxonomy field需要关联到termSet. 简单介绍一下Taxonomy Term Stor ...
- 代码的坏味道(7)——临时字段(Temporary Field)
坏味道--临时字段(Temporary Field) 特征 临时字段的值只在特定环境下有意义,离开这个环境,它们就什么也不是了. 问题原因 有时你会看到这样的对象:其内某个实例变量仅为某种特定情况而设 ...
- 【转】Django Model field reference学习总结
Django Model field reference学习总结(一) 本文档包含所有字段选项(field options)的内部细节和Django已经提供的field types. Field 选项 ...
- go-使用 unsafe 修改 struct 中的 field 的值
以下是方法,不要纠结原理,等东西积累多了,你才有能力纠结原理: 首先,你需要有一个这样的函数,这是在 nsq 的源码里直接抄过来的: func unsafeValueOf(val reflect.Va ...
- MongoDB查询转对象是出错Element '_id' does not match any field or property of class
MongoDB查询转对象是出错Element '_id' does not match any field or property of class 解决方法: 1.在实体类加:[BsonIgno ...
随机推荐
- sass 继承 占位符 %placeholder
@extend //SCSS .btn { border: 1px solid #ccc; padding: 6px 10px; font-size: 14px; } .btn-primary { b ...
- core1.1 升级到 2.0
1.直接修改项目 1.1 改成 2.0 Startup 的修改 去除构造函数中下面的代码 var builder = new ConfigurationBuilder() .SetBasePath(e ...
- Java作业五
1.编程生成10个1~100之间的随机数,并统计每个数出现的概率. 这个博文里面又random的详细解释:https://www.cnblogs.com/ningvsban/p/3590722.htm ...
- java Dom4j xml 写
手动拼接xml 并返回 依赖包 <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</ ...
- <kafka><应用场景><Kafka VS Flume>
前言 最近在搭一个离线Hadoop + 实时SparkStreaming的日志处理系统,然后发现基本上网上的这种系统都集成了kafka. 自己对kafka有一点点的认识,之前看过官网文档,用过一次,就 ...
- golang实现一个代理服务器(proxy)学习笔记
golang是google公司开发一门新的编程语言.对于老的程序员来说,学习一门语言最好的方式,不过是做一个小的项目. 网上看到这一篇使用golang开发proxy的例子,觉得挺有意思.希望通过实际模 ...
- 适用于WIFI Hacking的无线网卡推荐
相信很多初次使用Kali Linux来进行无线渗透的小伙伴都曾遇到过一个非常头疼的问题,就是不知道如何选购一款合适的无线网卡.因为Kali Linux并不是所有的网卡都支持,一旦选错了网卡不仅会给我们 ...
- 性能测试-10.数据分析Analysis
Analysis Summary 平均响应时间(Average TransactionResponse Time) 每秒响应数(Transactions per Second) 1.Vuser Ru ...
- libev
libev是一个**事件驱动库**,它需要循环探测事件是否发生,在Linux上实际是封装了epoll等系统调用. 其循环过程由ev_loop( )函数设置,循环体是ev_loop结构. //创建事件循 ...
- AMM调整为ASMM命令(关闭memory_target自动管理方式)
客户生产系统,AIX oracle 11.2.0.4 数据库版本,2节点RAC. 操作系统内存,均为125G,调整前,使用oracle memory_target自动调整分配方式,memory_max ...