您的位置 首页 > 数码极客

msp430如何定义bit型

立题简介:

内容:对"bit位编程"的基本操作-综合分析;

来源:实际得出;

作用:对"bit位编程"的基本操作-综合分析;

仿真环境:Windows10+Visual Studio 2013;

日期:2019-04-11;

=====================分割线========================

立题详解:

本次介绍“对"bit位编程"的基本操作-综合分析”,在嵌入式或是基础数据处理中,主要需要构建以下4种:“某位置0”、“某位置1”、“某位取反”、“得到某位值”,实现方法主要有2种:“常规方法”(bit位操作)和“优化方法”(预定义);

同时注意:对计算机而言:其内部实际运作时,本质也为bit操作;因此对代码而言:使用“bit操作方式”比使用“数据类型操作方式”快很多;

原因:使用函数、变量操作,其多了将“函数、变量”转换为“汇编、二进制运算”的中间环节;

1、基本说明

对“stm8”、“stm32”、“avr”、“msp430”、“fpga”等等微控制器,其均需要涉及到“某位置0”、“某位置1”、“某位取反”、“得到某位值”4种操作,其中使用最多为“某位置0”、“某位置1”,其在“底层驱动代码编写”时,作用极大;

2、常规方法

对“常规方法”(bit位操作)而言:其通过直接对bit位操作,实现以上4类基本运算;

优点:其无需消耗额外的存储空间,直接读数据进行bit位操作;

缺点:相对而言,去可读性较低、维护难度大、修正麻烦、后续debug排查难度较大,对接手的新人要求较高;

3、优化方法

对“常规方法”(bit位操作)而言:其通过直接对bit位操作,实现以上4类基本运算;

对“优化方法”(预定义)而言:通过“以空间换时间”的思路进行设计,有效提高程序的可读性、可维护性等;核心思想为:预先设定“固定位bit常量”,使用不同的“常量”实现所需的“bit位操作”;对4bit操作,口诀为:“从高至低,8、4、2、1;从低到高,E、D、B、7”;

优点:可行性高、便于维护、修正方便、所定义宏参量可反复调用,便于在不同平台上进行移植;

缺点:其会占用固定字节的存储空间,消耗额外的内存空间;

举例常量如下:

首先,对“置位”,使用“#define”举例为:

#define SETBIT0 0x0001

#define SETBIT1 0x0002

#define SETBIT2 0x0004

#define SETBIT3 0x0008

#define SETBIT4 0x0010

#define SETBIT5 0x0020

#define SETBIT6 0x0040

#define SETBIT7 0x0080

其次,对“复位”,使用“#define”举例为:

#define CLRBIT0 0xFFFE

#define CLRBIT1 0xFFFD

#define CLRBIT2 0xFFFB

#define CLRBIT3 0xFFF7

举例代码为:“a |= SETBIT0”;

代码定义如下所示:

特别注意:从低到高,E、D、B、7的顺序,切忌不可写反,各自“二进制对应关系”为:

“E”----“1110”;“D”----“1101”;“B”----“1011”;“7”----“0111”;

3、实例演示

首先,对“某位置0”,使用代码如下:

注意:其中的“CLRBIT_02”已“被宏定义为0xFB”,同时操作符为“按位与&”;

然后,对“某位置1”,使用代码如下:

注意:其中的“SETBIT_02”已“被宏定义为0x04”,同时操作符为“按位或|”;

4、综合对比意见

对“常规方法”(bit位操作)和“优化方法”(预定义),其有各自的优缺点,需根据实际情况进行选择:

i)、对“内存空间紧张”时:此类情况多为“初代目单片机”,如“STC89C51”、“AVR单片机”等,其内存空间很小,自身RAM、ROM的容量极为有限,范围大概是“数十byte~数十KB”,此时若是在代码中建立过多的“define常量”、“const常量”等固定字节参量,其会对代码的最大容积率产生影响;此时可使用“bit位操作”进行运算,有效节省空间、提高执行效率,但在允许条件下,也可考虑“预定义法”;

实例:对“STC89C52”编写“逻辑代码”时,当引入“GPIO”、“ADC”、“DAC”、“I2C”、“IT/TIM”、“USART”后,经常出现代码超出“8kb容量限制”的错误,导致“外设使用”出现“捉襟见肘”的局面;

ii)、对“内存空间相对充裕”时:此类情况现在较为普遍,如现在常用的“STM8单片机”、“STM32单片机”、“i.MX RT1052”(借助外扩资源)等,其可用的RAM、ROM容量相当丰富,即使定义的“define常量”、“const常量”等固定字节参量所占空间达到“KB级别”,对整体代码量也不会有较大影响;此时可使用“预定义法”进行设置,可有效提高代码的可读性、可为维护性;

实例:对“STM32F103”上“UCOS系统”时,开始使用“bit位操作”,由于使用次数太多,导致在动辄数十行“bit位操作”代码段内debug时,无法有效发现错误,尤其对新人而言,对代码经常陷入一头雾水的状态;之后使用“预定义法”,代码可读性大幅提高,debug时也更加容易发现问题;

iii)、对“内存空间极位充裕”时:此类情况也有很多,如上到ARM的linux、SoC平台、计算机python编程、C-Shape代码编程等,其开发平台已经变为“ARM平台”、“SoC平台”、“PC机平台”,此时的RAM、ROM空间是宏观可变、宏观可控的,其自由度远比单片机要高得多,此时的开发已经与“底层开发”完全不同,需要根据“程序化要求”、“定制化”的要求走;对此部分,并未深入了解,不好妄自评论,若有不妥,敬请见谅;

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“msp430如何定义bit型”边界阅读