c语言程序编译与烧录,一种解释自定义脚本并烧录的方法与流程

3e02582eb840c8956fae798810e28407.gif

本发明属于芯片烧录技术领域,特别涉及一种通过脚本进行芯片烧录的方法。

背景技术:

目前的烧录芯片主要是通过烧录器将烧录文件进行烧录,芯片中才会存储相应的代码。烧录文件有许多格式,如BIN文件,HEX文件等。这类文件常常需要通过编译器中经过编译生成,由用户代码,C语言代码,汇编代码等转化为目标文件。所以这类文件需要依赖编译器生成。

脚本文件是编程语言的其中一种,接近自然语言,脚本语言为了缩短传统的编写-编译-链接-运行等操作而创建的解释性语言。脚本语言不需要编译,由解释器负责解释并执行。

目前市场上芯片烧录的流程是用户先通过编程语言编写用户程序,然后用编译器编译程序,最终生成烧录文件。生成的烧录文件还需通过烧录器方可烧录到芯片中。有时候为了测试芯片,需要在芯片中的某个地址写入某条指令或某个数据,就必须重新修改代码,重新编译,再用烧录器才能进行烧录和测试,过程较繁琐。

如专利申请201510069705.3公开了一种显示模组的EDID数据烧录校验方法,它包括如下步骤:利用上位机进行EDID数据编辑,并保存为脚本文件;将所述脚本文件解析成通信协议后与ARM核心模块进行数据交互;所述ARM核心模块将解析后的EDID数据下发至FPGA信号处理模块;所述FPGA信号处理模块将EDID数据通过该信号输出模块传送至显示模组并读取显示模组的EDID数据反馈给上位机进行比对。本发明能适用于各种物理信号接口、各种规格的显示模组的EDID数据烧录校验,能解决目前为了应对各种物理信号接口、各种规格的显示模组的EDID调节差异而频繁编写、升级FPGA程序的问题。然而该专利申请仅仅是利用脚本文件进行解析,并不涉及对于脚本文件编写等内容,对于烧录文件仍然需要编译器和编译的过程,摆脱不了对于编译器的需要。

技术实现要素:

基于此,因此本发明的首要目地是提供一种解释自定义脚本并烧录的方法,该方法用烧录器打开这种脚本语言就可以实现烧录所需要的指令和数据,过程只需要编写脚本文件,用烧录器便可烧录,省去了编译器和编译的过程。

本发明的另一个目地在于提供一种解释自定义脚本并烧录的方法,该方法通过烧录器解释脚本文件并转换为实际的二进制数据并发下给烧录器硬件烧录,对于芯片的测试提供了极大的便利。

为实现上述目的,本发明的技术方案为:

一种解释自定义脚本并烧录的方法,其特征在于该方法定义和规范一种脚本语言,如何通过烧录器解释脚本文件并转换为实际的二进制数据并发下给烧录器硬件烧录的技术问题。

所述脚本语言规范为:

1.标识符

该脚本语言的标识符包括变量,常量,关键字,标号;标识符命名只能以字母或下划线开始,由字母,下划线,数据组成;标识符长度不能大于27个字符,大小写不区分。

进一步,所述关键字是系统自定义的标识符,用户不能当作普通变量或常量使用,以下是该脚本支持的关键字:

DB DW DEFINE IF ELSE ELSEIF ENDIF INCLUDE ADDR

CONFIG

这些关键字就是脚本语言的关键字。

2.声明数据和定义常量

声明数据用DB DW,DB是声明一个字节的数据,DW是声明一个字的数据,定义常量用DEFINE定义。

3.常量表示

常量表示支持10进制,16进制,2进制表示。

4.IF ELSE ELSEIF ENDIF条件编译

IF ELSE ELSEIF ENDIF是条件编译,格式如下:

IF标识符

语句

ElSE

语句

ENDIF

IF标识符

语句

ElSEIF标识符

语句

ELSE

语句

ENDIF

5.INCLUDE其他文件

INCLUDE是搜索其他文件并引用,格式如下:

INCLUDE文件名

6.CONFIG配置芯片配置字,CONFIG格式如下:

CONFIG“addr,value[addr,value…]”

addr是芯片配置字的地址,value是芯片配置字的数据,由于芯片配置字可能有多个,所以支持多个addr,value[addr,value…]表示。

7.ADDR地址定位

有时候需要在某个地址开始写数据,通过ADDR定位程序地址处。如:

ADDR=100H //地址100H开始写数据

DW 6666H //写数据6666H

NOP //写数据NOP

8.程序注释

仅支持单行注释“//”

9.指令集

该脚本语言支持该目标芯片的指令集表述。

烧录器解释脚本文件:

脚本语言规范定义好后,烧录器需要识别这种脚本语言并解释。在打开烧录文件时,如果文件名后缀为.csscript,则该文件为脚本语言文件,烧录器将调用脚本解释模块进行解释。脚本解释模块原理是采用lex,yacc编译技术,lex作为脚本语言的词法分析器,yacc作为脚本语言的语法分析。语法分析完成后便开始转换成实际的二进制数据。首先二进制数据初始化填充为FFH,根据芯片型号的信息,芯片名称,芯片空间大小,芯片配置字的地址,这些信息保存在烧录器软件的配置文件中。根据芯片的大小,初始化二进制数据为全FFH。Lex,yacc分析后填充二进制文件,在关键字ADDR地址处开始填充和修改。读取CONFIG的信息,读取芯片配置字的数据。最后获得的数据有修改后的二进制数据和芯片配置字。

(3)烧录器软件下发烧录数据

烧录器调用脚本解释模块后,获得的二进制数据和芯片配置字,烧录器便可以开始烧录。

本发明首先提出一种脚本规范,即脚本语言格式,脚本语言语法,该脚本能实现需要满足一下几个要求:1.能向固定地址写入固定指令或固定数据。2.能向起始地址处批量写入指令或数据。3.能实现简单的汇编伪指令。其次脚本语言定义后,需要解释这种脚本语言并转换实际的二进制数据,解释脚本语言表示的地址和数据,指令等。最后是烧录器解释脚本语言,解释脚本语言后下发烧录数据,最终实现烧录。

本发明通过一种自定义脚本语言、解释并烧录的方法,使用户只需编写脚本文件,不需要编写复杂的C语言程序和艰涩难懂的汇编程序,给程序员或芯片测试工程师,芯片烧录员提供了一种便利的烧录方式。且该脚本语言语法简单,编写方便,用烧录器软件打开便可烧录,省去了编译器编译的过程,对于芯片的测试提供了极大的便利。

附图说明

图1是本发明所实施的脚步文件解释过程流程图。

图2是本发明所实施的烧录器软件的处理流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明首先提出一种脚本规范,即脚本语言格式,脚本语言语法,该脚本能实现需要满足一下几个要求:1.能向固定地址写入固定指令或固定数据。2.能向起始地址处批量写入指令或数据。3.能实现简单的汇编伪指令。

其次脚本语言定义后,需要解释这种脚本语言并转换实际的二进制数据,解释脚本语言表示的地址和数据,指令等。

最后是烧录器软件如何解释脚本语言,解释脚本语言后下发烧录数据到烧录器硬件,最终实现烧录。

脚本语言规范为:

1.标识符

该脚本语言的标识符包括变量,常量,关键字,标号。标识符命名只能以字母或下划线开始,由字母,下划线,数据组成。标识符长度不能大于27个字符。大小写不区分。

关键字是系统自定义的标识符,用户不能当作普通变量或常量使用。以下是该脚本支持的关键字。

DB DW DEFINE IF ELSE ELSEIF ENDIF INCLUDE ADDR

CONFIG

这些关键字就是脚本语言的关键字。

2.声明数据和定义常量

声明数据用DB DW,DB是声明一个字节的数据,DW是声明一个字的数据。定义常量用DEFINE定义。

例如:

Var1 DB 0x10

Var DW 0x1010

LEN DEFINE 100H

3.常量表示

常量表示支持10进制,16进制,2进制表示。

例如:

Var1 DB 10 //10表示10进制

Var1 DB 0x10 或

Var1 DB 10H //10表示16进制

Var1 DB 10B //10表示2进制

4.IF ELSE ELSEIF ENDIF条件编译

IF ELSE ELSEIF ENDIF是条件编译,格式如下:

IF标识符

语句

ElSE

语句

ENDIF

IF标识符

语句

ElSEIF标识符

语句

ELSE

语句

ENDIF

5.INCLUDE其他文件

INCLUDE是搜索其他文件并引用,格式如下:

INCLUDE文件名。

6.CONFIG配置芯片配置字,CONFIG格式如下:

CONFIG“addr,value[addr,value…]”

addr是芯片配置字的地址,value是芯片配置字的数据,由于芯片配置字可能有多个,所以支持多个addr,value[addr,value…]表示。

如CONFIG“1000H,6666H”

7.ADDR地址定位

有时候需要在某个地址开始写数据,需要通过ADDR定位程序地址处,如:

ADDR=100H //地址100H开始写数据

DW 6666H //写数据6666H

NOP //写数据NOP

8.程序注释

仅支持单行注释“//”。

9.指令集

该脚本语言支持该目标芯片的指令集表述。

脚本文件例子:

1.向固定地址写入固定数据或指令。

ADDR=100H

DW 1234H//向固定地址写入1234H。

ADDR=100H

MOVLW 100H//向固定地址写入MOVLW 100H指令。

2.向固定地址批量写入数据或指令。

ADDR=100H

NOP

如图1所示,脚本解释模块作为烧录器软件的一个模块,输入是脚本文件,输出的是解释后的二进制数据。二进制数据是即将要烧录的芯片的程序代码,现在在脚本文件中,用户定义了在哪个地址处开始写指令或数据,脚本解释模块支持自定义脚本的解释,并转换成最终的二进制数据。解释过程如下:

101、首先脚本解释模块调用lex词法分析器对脚本文件中进行词法扫描,作为token给到语法分析器使用,词法分析器的输出是语法分析的输入。

102、语法分析器将得到的token进行识别,并对脚本文件进行句子扫描,形成语法树。

103、形成语法树之后,进行语义分析,与此同时,修改二进制数据,最后输出二进制数据。

104、读出脚本文件的芯片配置字并保存。

如图2所示,烧录器软件作为脚本解释器的执行者,负责整个过程的处理,输入是脚本文件,输出是向烧录器硬件发送数据。烧录器硬件接受到二进制数据和芯片配置字之后,可以继续进行其他操作。其具体的步骤为:

201、烧录器软件的处理过程,第一步是选择烧录文件并打开。

202、烧录器软件打开文件后根据文件后缀名识别这是否是脚本文件,脚本文件的后缀为csscript,如果是脚本文件,将启动脚本解释模块,如果是一般烧录文件,则一般烧录文件处理。

203、启动脚本解释模块前先初始化二进制数据,全部填充FFH,方便脚本解释模块处理,脚本解释器只负责修改二进制数据。

204、启动脚本解释模块,脚本解释模块开始进行脚本解释。

205、脚本解释器分析后修改二进制数据。

206、如果202识别的是非脚本文件,进行一般烧录文件处理,处理完成后发送二进制数据。

207、脚本解释模块读出芯片配置字并保存。

208、烧录器软件把修改后的二进制数据发送给烧录器硬件。

209、烧录器软件把芯片配置字发送给烧录器硬件,进行烧录。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值