• 位域


                                                                                                           位域

           位域是C语言的一种变量结构,最主要的一个特点就是可以节省空间并且实现位操作的方式。最近在一个项目中要用到它,其实我理解位域但本来没想要用它,只是上司出于好心指导的目的让我用上了它。既然用了,而且对以后有很大的帮助,就顺便写下来。

           在这个项目中,之所以要用它,是因为它能够提高执行效率,至于为什么呢?先来了解位域的使用方法。

           如图1-1,在枚举体中包含一个unsigned int Choose_Num的变量和下面的一个位域,再要详细了解这种结构那就自个去百度了,度娘很多,这里就不多说了。这个结构变量呢我是为了方便操作单片机的IO口,我只要给 Choose_Num这个变量赋值,再把IO_0这堆位域赋值给IO口,非常方便。当然,如果再配合指针那就更有效率了,不过我没做过,今天也不讨论这个。图1-2就是IO口赋值,R_0这堆是IO口,那么用51单片机的也许会问,51可以直接位操作,干嘛还要这样绕弯。今天,我们讨论的就是这个。

                                 图1-1

                    图1-2

        首先,不是所有单片机都可以位操作,其次,IO口链接可能不连续,而位域是通用的。即使是51,在IO口不连续的情况下,我们用通用的方法实现,应该是用for语句来提取每一个位,然后再用switch语句给IO口赋值。学过汇编的会比较了解指令的操作,执行一次for循环至少要三条指令,再加上switch语句的判断跟跳转指令,最后才能执行io口的赋值指令。如果使用位域直接就可以执行io赋值指令,在执行效率上快了至少三倍以上。

       如果使用12M主频的CPU,假如取指令和执行指令各占一个机器周期,那么执行一轮8个IO的操作,位域将会节省32个us的时间。在普通的场合可能没有感觉,但假如刷新一次LCD屏,几千上万个点,那这个时间就不可忽略了。

  • 相关阅读:
    NOI 模拟赛
    bzoj 4998 星球联盟
    bzoj 4545 DQS 的 Trie
    loj #161 子集卷积
    bzoj 5093 图的价值
    bzoj 4299 Codechef FRBSUM
    NOI 模拟赛
    WC2018 州区划分
    CSP 2020 T2 动物园
    CSP 2020 T1 儒略日
  • 原文地址:https://www.cnblogs.com/wcw12580/p/9739002.html
Copyright © 2020-2023  润新知