试了一下,用C宏的文本替换生成新的宏定义,这个实现不了。可以考虑用python或者C实现文本替换功能:
定义一个寄存器描述文件regs.txt
[C] 纯文本查看 复制代码
#name Pos Msk
CSD_CR_TRIG 0 0x01
CSD_CR_XXX 3 0x1F
python转换脚本
[Python] 纯文本查看 复制代码
import os
def autogen(infile, outfile):
inf = open(infile)
outf = open(outfile, 'w')
if inf is None: return
if outf is None: return
lines = inf.readlines()
lines = [ line.strip() for line in lines ]
lines = [ line for line in lines if not line.startswith('#') ]
for line in lines:
s = line.split()
if len(s) != 3: continue
name, pos, mask = s
print(f'#define {name}_Pos ({pos})', file=outf)
print(f'#define {name}_Msk ({mask} << {name}_Pos)', file=outf)
infile = 'regs.txt'
outfile = 'regs.h'
autogen(infile, outfile)
转换结果regs.h
[C] 纯文本查看 复制代码
#define CSD_CR_TRIG_Pos (0)
#define CSD_CR_TRIG_Msk (0x01 << CSD_CR_TRIG_Pos)
#define CSD_CR_XXX_Pos (3)
#define CSD_CR_XXX_Msk (0x1F << CSD_CR_XXX_Pos)
|