CN107506228A - 一种根据芯片手册自动生成驱动代码的方法 - Google Patents
一种根据芯片手册自动生成驱动代码的方法 Download PDFInfo
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
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所述的方法,其特征在于,解析芯片手册文档过程中,能将文档内容的错误部分输出。
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)
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)
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 | 烽火通信科技股份有限公司 | 芯片寄存器代码自动生成方法及其系统 |
-
2017
- 2017-09-11 CN CN201710813453.XA patent/CN107506228A/zh active Pending
Patent Citations (5)
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)
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 |