代码的主要功能是将设置了芯片寄存器的Excel表格(.xls或.xlsx)中的特定工作表的数据转换成SVD格式。
步骤
Excel文件读取
- 使用xlrd库打开Excel文件
- 处理.xls格式的特殊情况(formatting_info=True)
- 获取"global"工作表数据
栈结构实现
- 定义Stack类实现栈数据结构
- 支持push/pop/peek等基本操作
- 用于管理XML节点层级关系
XML文档初始化
- 创建根节点
- 使用xml.dom.minidom构建DOM树
核心转换逻辑
python
for i in range(nrows): # 遍历所有行
row_values = 获取当前行数据
cell_value = 获取首个非空单元格值
if 包含'<'标签: # XML节点处理
if 是开始标签: # 如<registers>
创建新节点并入栈
if 特殊标签'registers':
查找对应结束标签位置
循环处理寄存器子节点
else: # 结束标签
弹出栈顶节点
else: # 普通数据节点
创建文本节点并添加到当前栈顶元素
寄存器特殊处理
当检测到标签时:
- 计算寄存器条目数量(rows_flag)
- 为每个寄存器创建节点
- 添加5个属性子节点
- 固定添加和节点
输出保存
使用tempfile获取系统临时目录
美化输出XML格式(toprettyxml())
保存输出
实现了从Excel到XML的转换,使用栈管理XML层级关系。