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

背景技术:

目前的烧录芯片主要是通过烧录器将烧录文件进行烧录,芯片中才会存储相应的代码。烧录文件有许多格式,如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、烧录器软件把芯片配置字发送给烧录器硬件,进行烧录。

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

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

  1. 将易语言程序编译为exe程序

    上一篇文章中讲到如何利用以语言实现简单的人机交互,这篇文章中将会分享如何将易语言程序编译为exe程序. 第一步 编写一个易语言程序 步骤详见上一篇博客,在这里就不再赘述了.易语言实现最简单的人机交互_ ...

  2. spark集群访问mysql_一种Spark并行访问MPP数据库的方法与流程

    本发明涉及数据库 技术领域: :,具体来说,涉及一种Spark并行访问MPP数据库的方法. 背景技术: ::从关系数据库读取数据,Spark可以使用DataFrame和JdbcRDD等方法.这些方法在 ...

  3. 在c语言程序中将数据分为两种,2012年计算机二级C语言考点归纳汇总(一至四章)...

    第1章程序设计基本概念考点归纳 1.1 C语言的特点 C语言是近年来非常流行的语言,很多人宁愿放弃已经熟悉的其他语言而改用C语言,其原因是C语言有优于其他语言的一系列特点.下面是C语言的主要特点: ( ...

  4. C语言程序编译过程 2

    C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接.编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程.链接是把目标文件.操作 ...

  5. C语言程序编译和执行过程

    1.预处理 1).宏定义展开2).头文件展开3).删除注释4).条件编译格式:gcc -E a.c -o a.i 2.编译1).检查语法2).转化成汇编语言格式:gcc -S a.i -o a.s 3 ...

  6. c语言程序编译成功运行失败,为什么这个程序编译成功但运行失败?

    为什么这个程序编译成功但运行失败? 可以编译,就是运行失败.请问哪里出问题了. 所示的程序在屏幕上打印函数F(y)=e-y*sin(2πy)的曲线. #include #include #define ...

  7. python 回声程序_一种回声消除系统及回音消除方法与流程

    本发明涉及通信技术领域,具体涉及一种回声消除系统及回音消除方法. 背景技术: 回声消除器通常由滤波器和算法组成,根据具体应用和性能要求的不同可以有多种选择. 滤波器有FIR(有限长度冲激晌应)滤波器和 ...

  8. fft 估计载波频率程序_一种基于扫描精确估计载波频率的方法与流程

    本发明涉及信号处理技术领域,特别涉及一种基于扫描精确估计载波频率的方法. 背景技术: 信号的载波频率估计是通信.雷达.声纳以及电子对抗等领域信号处理中的一个重要问题.基于参数模型的谱估计.最大熵谱估计 ...

  9. java 下载加速_一种基于Java的大文件下载加速方法与流程

    本发明涉及java/多线程技术领域,涉及一种加速文件下载装置,具体提供一种基于java的大文件下载加速方法. 背景技术: 现有的常用下载方式是基于浏览器的单线程下载.这种单线程下载的方式,是通过htt ...

最新文章

  1. 伍六七带你学算法 入门篇-最长回文串
  2. IntelliJ IDEA2016 + tomcat 即改即生效 实现热部署
  3. OpenGL toon shading卡通着色的实例
  4. SqlServer 数据库 分离复制备份然后附加回数据库 sql代码
  5. mysql 缓解竞争热点_MySQL优化之缓存优化
  6. 页面加载完某个函数不工作 选择器也没错
  7. linux input输入子系统分析《三》:S3C2440的触摸屏驱动实例
  8. php输出字符unicode码,PHP解码unicode编码的中文字符代码分享
  9. django 1.8 官方文档翻译: 2-5-1 管理器
  10. 固定td 样式 随 内容 溢出
  11. c#-多线程中lock用法的经典实例
  12. Excel批量转Word
  13. 苹果x与苹果xs的区别_x和XS的区别到底在哪里,我来告诉你
  14. Maven Failsafe 插件
  15. [源码和报告分享]基于C++实现的运动会统分系统
  16. 持久化内存挑战PERSISTENT MEMORY CHALLENGES
  17. WeWork上演宫斗大戏,这个市还上吗?
  18. python因子分析案例_因子分析及python实现(一)
  19. BZOJ 1123: [POI2008]BLO
  20. 从0 到1开发一款App(二):产品

热门文章

  1. ArcBlock 分享 | 在国外,没有中国人参与的项目就不投
  2. 小学计算机三年级冀教版,冀教版小学三年级上册信息技术课件
  3. java 内部类声明 抽象类_Java 抽象类、接口、内部类
  4. Redis Windows版本的安装以及使用(简单版)
  5. PPT造电池,特斯拉电池日画一张“十年保质期”的大饼
  6. 16进制、Cstring、char*类型转换
  7. 每周市场观察:XRP遭起诉下跌近50% 圣诞仍是牛市 | TokenInsight
  8. Linux打印相关命令
  9. 【学习笔记】李宏毅-机器学习MachineLearning
  10. 特权同学IP核心中的学习