【KEIL】让KEIL识别二进制数(生成宏定义头文件)

在写一些传感器模块的驱动时,芯片手册往往会给出一个所有功能的寄存器表。如图:

我们在写驱动的时候,会看着表去写,而功能常常是逐位设置的,在设置的时候用二进制数表示显然更加清晰明了,但是到目前为止,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()
发布了44 篇原创文章 · 获赞 203 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/ReadAir/article/details/88948410
今日推荐