SourceInsight环境配置——支持dsp2000汇编
朋友问 用SI(SourceInsight)能不能编辑 DSP2000 的汇编代码? 答案是可以的,但需要好好配置一下SI。
si 默认支持 x86的汇编,不支持 DSP2000,这是可以理解的,因为不同的汇编 语法不同,SI不可能支持所有的汇编。
但SI提供强大的扩展功能,我们可以让它支持自定义的文档类型,实现如 关键词突显、标识符输入自动补全和链接 等功能。
提示:
x86和DSP2000 的汇编都是*.asm后缀,当你向 si 工程中添加 *.asm 时,SI 使用 x86 的解析器解析它,效果可能是这样:SACL 指令没有突显——因为它不是x86的指令。
这里我为dsp2000定义一种汇编文件后缀 *.asm_dsp,下面开始为dsp2000配置si。
一、新建si工程,添加*.asm_dsp文档
SI识别的文件类型有多种,向工程添加文件时可识别的文件显示在列表中。如果遇到不能识别的文件(如*.asm_dsp),取消“Show only known document types”前面的勾就可以了。
二、文档类型和解析器
打开菜单 Options→Document options... 可查看和编辑文档相关选项
2.1 文档类型
SI定义了几种"Document Type",如“C source file”、“C++ source file”等,每种"Document Type"又包含几种文档,如
C source file:File Filter: *.c;*.h
C++ source file:File Filter:*.cpp;*.hpp;*.cxx;*.hxx
X86 asm source file: *.asm;*.inc
你可以把 "Document Type" 理解为具有关联性的几种文件类型的集合。又有点像工程和文档之间的关系,不同的工程(如vb、vc等)可识别一些不同的文档类型(如.frm、.c等等)。
2.2 文档解析器
不同的"Document Type"的文件由不同的解析器解析。
下面是SI的help中关于文档和解析器的简单描述
============================================
Document Types
A document type is a file classification that is defined with the Document Options command. Source Insight uses each file’s name to determine what its document type is.
The file name determines the document type. The document type determines the font, the language type used to parse the file and display it with syntax formatting, and other editing options.
============================================
三、自定义文档解析
进入菜单 Options→Document options...→Language
① 注册一种文档类型:
Add→NewLanguageName:DSP2000 asm file
② 指定关键字:
Keywords...→ 可以一个个添加,或者将x86的关键字导出后修改再导入这里
注:关键字包括dsp2000的指令和编译器伪指令(等)。
导入的关键字列表文件如下(部分)
============================================
ADD, Control
AND, Control
B, Control
CALL, Control
OR, Control
POP, Control
PUSH, Control
RET, Control
SUB, Control
XOR, Control
asect, Control
bss, Control
data, Control
sect, Control
text, Control
bes, Control
bfloat, Control
blong, Control
byte, Control
field, Control
float, Control
int, Control
long, Control
space, Control
string, Control
word, Control
break, Control
else, Control
elseif, Control
endif, Control
endloop, Control
if, Control
loop, Control
...
============================================
③ 指定注释和块标记:
Properties... → Comment and rangees → Add...
Type of rang:Line
Syntax Formating style:Comment Single Line
Range begin with:;(汇编注释符为分号)
④ 定义解析器
Properties...→ Custom Parsing → Add...
symbol type:Constant
pattern:\([0-9]+H\)
功能:hex格式常数识别
hex常量示例:
1234H
symbol type:Variable
pattern:^[ \t]*\([a-zA-Z_][a-zA-Z0-9_]*\)[ \t]+\.set .*
注:
正则表达式中 可用 \s 表示空格;\w 等价于[\s\t]
功能:变量识别
变量定义示例:
var1 .SET 4 ; var1定义在地址0x00000004处
symbol type:Macro
pattern:^\w*\([a-zA-Z_][a-zA-Z0-9_]*\)\w+\.macro .*
功能:宏名识别
宏定义示例:
MacMask .macro DMA,MASK
LACC DMA
AND #(0FFFFh-MASK)
SACL DMA
.endm
symbol type: Custom tags
;
; ng pattern:\.macro\w+\([a-zA-Z0-9_,\w]*\)
; match: all parameters
;
pattern:\.macro\w+\([a-zA-Z0-9_]*\)
功能:识别 param1
;
pattern:\.macro\w+[a-zA-Z0-9_]*\w*,\w*\([a-zA-Z0-9_]*\)
功能:识别 param2
;
pattern:\.macro\w+[a-zA-Z0-9_]*\w*,\w*[a-zA-Z0-9_]*\w*,\w*\([a-zA-Z0-9_]*\)
功能:识别 param3
;
pattern:\.macro\w+[a-zA-Z0-9_]*\w*,\w*[a-zA-Z0-9_]*\w*,\w*[a-zA-Z0-9_]*\w*,\w*\([a-zA-Z0-9_]*\)
功能:识别 param4
...
不一一例举了。
完成以上工作后,当我们新建DSP2000的汇编文件 *.asm_dsp(这是我自定义的文档类型。没用*.asm,避免与 x86的汇编文件类型冲突), 编译代码时si可以实现以下效果:
突显关键字——这个用 Editplus、Ultraedit也可轻易实现。
标识符识别和链接——这是用 Editplus、Ultraedit不能实现的。
提示:
一般地,IDE提供的编辑器不如专用编辑器好用,所以我习惯在si中编辑代码,然后保存,切换到ide时确认重新加载文件,再编译运行。前面我把dsp2000的汇编文件后缀改为*.asm_dsp,这使si与ide配合不协调。你可以将 *.asm 从 x86的FileFilter中暂时删除,并添加到 dsp2000 的FileFilter中。操作如下:
① Alt+T,DocumentType列表中选择 "X86 asm source file",将 *.asm 从FileFilter中删除;
② Alt+T,DocumentType列表中选择 "dsp2000 asm source file",将 *.asm 添加到FileFilter中;
这样当你打开 *.asm 文件时,SI能按 dsp2000 的解析器解析你的汇编代码了。
效果图:
最后,还有一点问题
2个bug:
bug1: 定义变量、宏时 如果顶格写,则符号链接时选择了整行而不是标识符
bug2: 定义变量、宏时关键字(eg. .SET) 后不能直接跟tab,至少要一个空格,否则符号链接时选择了整行而不是标识符。
1个失误:
我不懂dsp汇编,这个si配置是我帮朋友做的。我根据他提供的汇编示例文件和dsp指令表做si的配置,结果发现汇编示例不是dsp2000的——也不知道是哪种芯片的汇编,总之方法差不多~
1个遗忘:
怎么不能识别子函数(标签)啊?Oh,忘记了~
要睡觉了~
88
阅读(2524) | 评论(0) | 转发(0) |