CN107506228A - 一种根据芯片手册自动生成驱动代码的方法 - Google Patents

一种根据芯片手册自动生成驱动代码的方法 Download PDF

Info

Publication number
CN107506228A
CN107506228A CN201710813453.XA CN201710813453A CN107506228A CN 107506228 A CN107506228 A CN 107506228A CN 201710813453 A CN201710813453 A CN 201710813453A CN 107506228 A CN107506228 A CN 107506228A
Authority
CN
China
Prior art keywords
files
register
spec
tdb
file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201710813453.XA
Other languages
English (en)
Inventor
刘刚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhuhai Wisdom Electronic Technology Co Ltd
Original Assignee
Zhuhai Wisdom Electronic Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhuhai Wisdom Electronic Technology Co Ltd filed Critical Zhuhai Wisdom Electronic Technology Co Ltd
Priority to CN201710813453.XA priority Critical patent/CN107506228A/zh
Publication of CN107506228A publication Critical patent/CN107506228A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明涉及嵌入式软件领域,提出了一种根据IC的芯片手册(SPEC)自动生成设备驱动程序C语言代码的算法。在嵌入式系统中,设备驱动是软硬件之间的桥梁。传统的设备驱动开发方式下,开发人员要对照SPEC中的寄存器表,手动编写寄存器的头文件和C文件,编码和调试都比较费时。按照本发明的算法,首先解析Word2003格式的SPEC文件,获取存放寄存器地址信息的表格,以及各个寄存器描述信息的表格,将获得的所有表格信息按照一定的格式保存到表格数据库文件(TDB文件)。然后进行代码生成,按顺序读取TDB文件的所有表格信息,生成设备驱动的头文件和C文件。这样大大提高了驱动的编码效率,节省了驱动的调试时间,而且还能自动检测SPEC的错误。

Description

一种根据芯片手册自动生成驱动代码的方法
技术领域
本发明涉及嵌入式软件技术领域,特别涉及集成电路芯片的设备驱动的开发效率方面。
背景技术
嵌入式系统已越来越广泛地应用于现今社会的各个领域,作为嵌入式系统的心脏,集成电路芯片(Integrated Circuit,IC)是系统的核心硬件单元。一个完整的嵌入式系统由软件和硬件组成,硬件主要包括IC和外围电路板,软件包括IC各硬件模块的驱动、操作系统、以及应用程序。IC设计公司在开发产品过程中,除了提供IC芯片,还需要提供软件开发工具包(Software Development Kit,SDK)。SDK主要包含驱动、操作系统和应用程序等模块。图1是典型的嵌入式系统组成,104为硬件部分,主要包括IC和电路板;103为设备驱动,作为底层软件,它直接操作硬件寄存器,让硬件能正常工作;102为操作系统,它提供了软件运行的统一环境,为应用程序和设备驱动提供基础接口;101为应用程序,它负责界面显示,将实际效果呈现给用户,并负责与用户的交互。
设备驱动是软硬件之间的桥梁,它通过操作硬件寄存器,使硬件正常工作,并提供硬件的功能级接口给上层操作系统。设备驱动一般分为两部分,如图2所示。201为操作系统接口层,负责与操作系统对接,202为芯片支持包(Chip Support Package,CSP),实现了模块的寄存器功能级的基本操作。操作系统接口层相对固定,只随操作系统内核框架而变化,CSP则与IC的硬件模块紧密相关,驱动开发的主要工作在CSP部分。CSP的开发过程,主要是对照IC的芯片手册(SPECIFICATION,简称SPEC),来编写头文件和C文件,操作模块的寄存器,实现基本功能。CSP代码主要包括两部分:模块寄存器定义的头文件,模块寄存器基本操作的接口文件(C文件)。头文件主要包含各寄存器地址的定义、寄存器各字段默认值的定义,C文件包含寄存器功能级的操作接口。
通常一颗IC包含若干个硬件模块,比如时钟模块、串口模块、SPI总线模块等。每个模块都有一份SPEC,其内容包括模块的功能规格、时序图、所有寄存器的定义及使用说明等,其中寄存器相关的内容是驱动CSP层开发的主要依据。每个寄存器通常包含若干个字段,每个字段对应不同的硬件逻辑,有不同的功能。SPEC中每个寄存器通常用一个表格来描述,表格列出了寄存器中各字段的偏移、名称、默认取值、功能说明等。
传统的驱动开发是一个比较耗时的过程,开发人员要对照SPEC中的寄存器表,编写寄存器的头文件和C文件,头文件中要包含每个寄存器的名称、地址、默认值等信息,C文件中则要包含每个寄存器及内部各个字段的读写接口。这些编码工作完全是根据SPEC的信息,机械地整理,没有任何技巧性。由于纯粹是手动编写代码,因此效率较低,当IC的模块较多时,通常会耗费大量的人力。而且很容易出现笔误,比如将寄存器的字段偏移写错,导致后续调试需要更多时间。当IC改版时,由于软件和硬件人员的信息不对称,容易出现驱动代码未适应新IC的情况,导致新IC无法快速投入量产。
发明内容
本发明提出了一种根据IC各模块的SPEC自动生成驱动CSP代码的算法,能有效解决传统开发方式的各类问题,更加高效且方便维护。首先用SPEC分析工具解析SPEC文件,提取有效信息,按照一定的格式保存到一个表格数据库文件(TABLE DATABASE,简称TDB文件)中,然后用代码生成工具解析TDB文件,根据文件内容生成CSP的头文件和C文件。另外,工具还可以提取出SPEC中相关的说明信息,保存到头文件和C文件代码的指定位置,作为代码的注释,从而节省了手动编写注释的时间。
本发明要求处理的目标系统满足以下条件:(1)SPEC文件为Word2003格式(.doc文件),不能为PDF或其他格式。(2)SPEC文件要遵循一定的格式规范,主要包括:寄存器名必须是大写字母、下划线、数字或中括号,不能是其他字符;寄存器的地址必须为十六进制数,以“0x”或“0X”开头,后续4个十六进制数(字母要大写);所有表格中的单元格都不能为空,若单元格没有内容,则填写中划线“-”。(3)开发人员电脑要安装Microsoft Visual Studio2013和Microsoft Office 2003工具,解析.doc文件依赖于这些工具提供的库。
本发明解决其技术问题所采用的技术方案是:首先进行SPEC文件分析,读取Word2003格式的SPEC文件,获取存放寄存器地址信息的表格,将获得的所有寄存器的名称和地址信息保存到TDB文件;依次读取每个寄存器的描述表格,获取各寄存器的内部字段信息,比如名称、偏移、默认值、使用说明等,并按一定的格式保存到TDB文件,这样将SPEC中所有有效信息保存到TDB文件中了。然后进行代码生成,读取二进制格式的TDB文件,提取出各寄存器的名称、地址、默认值等信息,进行加工整理,生成一条条的宏定义语句,保存到CSP头文件;提取寄存器各字段的偏移地址、名称、使用说明等信息,进行加工整理,生成一个个的C函数,保存到CSP的C文件中。通过这样的方式,自动生成了驱动CSP层的代码。
本发明的有益效果是:(1)能大大提高驱动的编码效率。通常一颗IC可能包含20至30个硬件模块,每个模块的CSP代码可能在几千甚至上万行。按业界标准,假设一个程序员平均每天写100行代码,则完成一个模块的CSP编码大概需要几十个工作日。使用本发明的算法,能在3秒内自动生成所有模块的CSP代码,且生成的代码整齐美观,风格一致,可读性强。(2)能最大限度地减少驱动的调试时间。任何人为因素产生的问题,都可以在算法(工具)的调试阶段一次性地解决。算法调试稳定后,只要SPEC无误,生成的代码就没有任何问题。(3)能自动检测SPEC的错误,提高硬件人员编写SPEC的效率。在SPEC分析阶段,若工具发现错误,会将错误信息以文本方式输出到控制台,硬件人员根据错误信息对SPEC进行修正。由于错误是由工具自动查出,大大提高了SPEC的编写效率。(4)能提高设备驱动与IC硬件的同步效率。IC改版后,只需要用工具对新的SPEC进行代码生成,即可实现驱动软件与IC硬件的同步。
附图说明
下面结合附图和实施例对本发明进一步说明。
图1是典型嵌入式系统的层次结构。
图2是设备驱动的层次结构。
图3是根据SPEC文件生成CSP代码的步骤示意图。301为Word2003格式的芯片手册文档,302为SPEC分析工具生成的表格数据库文件,303为代码生成工具生成的设备驱动CSP层的C语言代码文件。
图4是SPEC分析过程生成TDB文件的流程。
图5是TDB文件的内容排布。501为TDB文件头信息,502~505为各个寄存器的表格信息。
图6是TDB文件头的信息,601为“TFH”字符串,602为TDB文件中包含的表格个数,603为保留字段。
图7是寄存器的表格信息,701为表格头信息,702~705为表格中各个单元格的信息。
图8是寄存器的表格头信息,801为“Tab”字符串,802为保留字段,803为表格的编号,取值从1到count(即602字段),804为表格类型,805为表格包含的列数,806为表格包含行数。
图9是表格中单元格的描述信息,901为单元格在表格中的列索引,取值从1到nCols(即805字段),902为单元格在表格中的行索引,取值从1到nRows(即806字段),903为单元格中字符串的长度,904为保留字段,905为单元格的字符串区域,占用空间大小为字符串长度(即903字段)的16字节对齐。
图10是生成的头文件内容示例。
图11是生成的C文件内容示例。
具体实施方式
本发明的实施方式如图3所示,分为两步,首先进行SPEC内容分析,生成TDB文件,然后解析TDB文件,生成CSP代码。
301,输入Word2003格式的SPEC文档;
302,使用SPEC分析工具进行分析,提取SPEC文档中的寄存器表格信息,生成表格数据库文件;
303,使用代码生成工具解析表格数据库文件,提取各个寄存器的名称、地址、默认值等信息,经过整理后输出到CSP头文件;提取寄存器各字段的偏移地址、名称、使用说明等信息,经过整理后输出到CSP的C文件中。
根据本发明的实施例,步骤302(既SPEC分析流程)的具体步骤如图4所示。
401,打开Word2003格式的SPEC文档文件;
402,读取存放所有寄存器地址信息的表格;
403,按照TDB文件格式的要求,保存所有寄存器地址信息到TDB文件;
404,读取第一个寄存器描述信息的表格;
405,保存第一个寄存器表格的信息到TDB文件;
406,读取下一个寄存器描述信息的表格;
407,保存下一个寄存器表格的信息到TDB文件;
408,判断是否所有寄存器表格已解析完成,若是则跳到409,否则跳到406;
409,关闭SPEC文档文件。
经过上述过程,SPEC文档中的有效信息被提取出来并保存成TDB文件,此后生成代码时解析TDB文件即可,不再依赖于SPEC文档,这样使程序更加模块化,便于维护。

Claims (4)

1.一种根据芯片手册自动生成驱动代码的方法,其特征在于,由程序自动解析Word2003格式的芯片手册文档,将寄存器相关的表格信息保存到表格数据库文件(TDB文件),然后根据TDB文件内容,自动生成设备驱动的C语言代码。
2.根据权利要求1所述的方法,其特征在于,TDB文件由文件头信息和所有寄存器的表格信息组成,文件头描述了表格的个数,表格信息由表格头和单元格信息组成。
3.根据权利要求1所述的方法,其特征在于,芯片手册文档必须为Word2003格式(.doc文件),寄存器名必须是大写字母、下划线、数字或中括号,寄存器的地址必须为十六进制数,所有表格中的单元格都不能为空,若无内容则填写中划线“-”。
4.根据权利要求1所述的方法,其特征在于,解析芯片手册文档过程中,能将文档内容的错误部分输出。
CN201710813453.XA 2017-09-11 2017-09-11 一种根据芯片手册自动生成驱动代码的方法 Pending CN107506228A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710813453.XA CN107506228A (zh) 2017-09-11 2017-09-11 一种根据芯片手册自动生成驱动代码的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710813453.XA CN107506228A (zh) 2017-09-11 2017-09-11 一种根据芯片手册自动生成驱动代码的方法

Publications (1)

Publication Number Publication Date
CN107506228A true CN107506228A (zh) 2017-12-22

Family

ID=60695361

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710813453.XA Pending CN107506228A (zh) 2017-09-11 2017-09-11 一种根据芯片手册自动生成驱动代码的方法

Country Status (1)

Country Link
CN (1) CN107506228A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109976214A (zh) * 2019-03-18 2019-07-05 闽南师范大学 一种单片机程序设计辅助方法
CN111208988A (zh) * 2019-12-24 2020-05-29 杭州海兴电力科技股份有限公司 单片机文件系统编写方法及单片机系统
CN112995133A (zh) * 2021-02-02 2021-06-18 深圳市科陆电子科技股份有限公司 基于modbus协议的解析方法、装置及系统
CN114610313A (zh) * 2022-02-28 2022-06-10 浪潮(山东)计算机科技有限公司 一种生成spec文档的方法、系统、装置及介质
CN115576605A (zh) * 2022-10-09 2023-01-06 苏州领慧立芯科技有限公司 一种自动生成代码和文档的寄存器管理装置及形成方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101770388A (zh) * 2009-01-06 2010-07-07 华为技术有限公司 获取芯片代码信息的方法和装置
CN102841950A (zh) * 2011-06-21 2012-12-26 中兴通讯股份有限公司 一种逻辑存储单元自动验证的方法及装置
US20130074033A1 (en) * 2011-09-16 2013-03-21 International Business Machines Corporation Designing a configurable pipelined processor
CN103336706A (zh) * 2013-05-21 2013-10-02 盛科网络(苏州)有限公司 将伪代码转换为编程语言的系统和方法
CN105607897A (zh) * 2015-09-30 2016-05-25 烽火通信科技股份有限公司 芯片寄存器代码自动生成方法及其系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101770388A (zh) * 2009-01-06 2010-07-07 华为技术有限公司 获取芯片代码信息的方法和装置
CN102841950A (zh) * 2011-06-21 2012-12-26 中兴通讯股份有限公司 一种逻辑存储单元自动验证的方法及装置
US20130074033A1 (en) * 2011-09-16 2013-03-21 International Business Machines Corporation Designing a configurable pipelined processor
CN103336706A (zh) * 2013-05-21 2013-10-02 盛科网络(苏州)有限公司 将伪代码转换为编程语言的系统和方法
CN105607897A (zh) * 2015-09-30 2016-05-25 烽火通信科技股份有限公司 芯片寄存器代码自动生成方法及其系统

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109976214A (zh) * 2019-03-18 2019-07-05 闽南师范大学 一种单片机程序设计辅助方法
CN111208988A (zh) * 2019-12-24 2020-05-29 杭州海兴电力科技股份有限公司 单片机文件系统编写方法及单片机系统
CN111208988B (zh) * 2019-12-24 2023-09-26 杭州海兴电力科技股份有限公司 单片机文件系统编写方法及单片机系统
CN112995133A (zh) * 2021-02-02 2021-06-18 深圳市科陆电子科技股份有限公司 基于modbus协议的解析方法、装置及系统
CN112995133B (zh) * 2021-02-02 2023-04-18 深圳市科陆电子科技股份有限公司 基于modbus协议的解析方法、装置及系统
CN114610313A (zh) * 2022-02-28 2022-06-10 浪潮(山东)计算机科技有限公司 一种生成spec文档的方法、系统、装置及介质
CN114610313B (zh) * 2022-02-28 2023-12-26 浪潮(山东)计算机科技有限公司 一种生成spec文档的方法、系统、装置及介质
CN115576605A (zh) * 2022-10-09 2023-01-06 苏州领慧立芯科技有限公司 一种自动生成代码和文档的寄存器管理装置及形成方法

Similar Documents

Publication Publication Date Title
CN107506228A (zh) 一种根据芯片手册自动生成驱动代码的方法
Pasha et al. Madamira: A fast, comprehensive tool for morphological analysis and disambiguation of arabic.
Padró et al. Freeling 3.0: Towards wider multilinguality
US20080244541A1 (en) Code translator and method of automatically translating modeling language code to hardware language code
CN102467497B (zh) 校对程序中的文本翻译的方法和系统
US20080288239A1 (en) Localization and internationalization of document resources
Llitjós et al. A framework for interactive and automatic refinement of transfer-based machine translation
US7747942B2 (en) System and method for obtaining a markup language template through reversing engineering
JPH05197685A (ja) ウィンドウ化ユーザ・インタフェースの複数言語による翻訳を支援するシステム及び方法
RU2579888C2 (ru) Универсальное представление текста с возможностью поддержки различных форматов документов и текстовая подсистема
Indig et al. One format to rule them all–The emtsv pipeline for Hungarian
CN101251838A (zh) 对分层标记文档进行语法分析的方法和系统
CN104699473B (zh) 时序约束文件的生成方法、装置以及rtl仿真设备
CN103927179A (zh) 一种基于WordNet的程序可读性分析方法
Rupp et al. Flexible interfaces in the application of language technology to an eScience corpus
Goldberg et al. Hebrew dependency parsing: Initial results
CN103577154B (zh) 基于arinc659协议的指令的译码方法
WO2008075087A1 (en) Code translator and method of automatically translating modelling language code to hardware language code
Voutilainen et al. Specifying treebanks, outsourcing parsebanks: Finntreebank 3
JP5994150B2 (ja) 文書作成方法、文書作成装置及び文書作成プログラム
CN112905450A (zh) 基于模板变量替换的芯片寄存器自动开发系统
Berlocher et al. Morphological annotation of Korean with directly maintainable resources
Davies et al. Timing verification for asynchronous design
JP2011118861A (ja) 文書チェック装置、文書チェックプログラムおよび文書チェック方法
Ramalho et al. Algebraic specification of documents

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20171222