在写一些传感器模块的驱动时,芯片手册往往会给出一个所有功能的寄存器表。如图:
我们在写驱动的时候,会看着表去写,而功能常常是逐位设置的,在设置的时候用二进制数表示显然更加清晰明了,但是到目前为止,keil的编译器尚不支持二进制数的识别。
为了使用二进制数设置,我们可以使用一个技巧:把所有的二进制数用宏定义转换到十六进制
我用python生成了一张宏定义表,大家可以把这些内容复制保存到一个头文件“cvt_bin2hex.h”
然后在想使用二进制的代码最前面
#include "cvt_bin2hex.h"
即可,这样就可以在写驱动的时候直接使用二进制数啦!
以下是头文件cvt_bin2hex.h的内容(由于CSDN的字数限制,我就不放全部了,需要宏定义文件的可以在评论区留言):
#ifndef __CVTBIN2HEX_H
#define __CVTBIN2HEX_H
#define B0000000000000000 0x0000
#define B0000000000000001 0x0001
#define B0000000000000010 0x0002
#define B0000000000000011 0x0003
……
#define B1111111111111000 0xFFF8
#define B1111111111111001 0xFFF9
#define B1111111111111010 0xFFFA
#define B1111111111111011 0xFFFB
#define B1111111111111100 0xFFFC
#define B1111111111111101 0xFFFD
#define B1111111111111110 0xFFFE
#define B1111111111111111 0xFFFF
#endif
最后附上python代码,可以按照需求自己生成指定位数的二进制宏定义文件
# coding=utf-8
# 2019.4.1
bit_num = 16
file = open("G:/cvt_bin2hex.txt","a")
str = "#ifndef __CVTBIN2HEX_H\n#define __CVTBIN2HEX_H\n\n"
file.write(str)
for i in range(2**bit_num):
str = "#define B"+'{:016b}'.format(i)+" 0x"+'{:04X}'.format(i)+"\n"
file.write(str)
str = "#endif\n\n"
file.write(str)
file.close()