SI技巧Word格式文档下载.docx
《SI技巧Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《SI技巧Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
7.3监视调试输出16
八、附录16
8.1SI的大客户16
8.2表格索引17
8.3图形索引17
一、
前言
SourceInsight(SI)是一个功能强劲的“程序代码编辑器”,他内置对C/C++,Java和x86汇编语言程序的解析功能;
有自己的动态数据库在你编程时提供有用的文本提示,包括有关的函数、宏、参数等。
本文档主要描述SI如何结合ClearCase、ArtisticStyle、Splint和自身的宏功能,实现一个IDE编译器基本的“版本控制”、“代码美化”、代码静态检查、项目编译和代码标准化的功能。
SI的强大功能,甚至可以让用户监视设备调试发出的调试信息。
目标
通过本文档的描述,读者可以将SI变成一个方便的工作平台,并在这个平台上,简化我们日常中的大量重复而且繁重的工作。
预定读者
预定读者是对SI有一定了解的用户,如果是第一次使用SI,请参考文章《SI的功能说明》和《SI常用技巧》。
历史版本
本节描述了文档的历史版本。
1历史版本表
№
日期
作者
说明
01
2005-9-21
黄少文
Draft
参考
本文档参考网络上很多关于SI的文章,同时也应用了其他文档。
2参考列表
参考书目
UsingRationalClearCase
RationalSoftware
02
SplintManual
SecureProgrammingGroup
Version3.1.1
03
SI的功能说明
04
SI常用技巧
05
ArtisticStyleHelp
TalDavidson
06
计算机源代码编写规范
mays
NEU-ALPINE
术语表
3术语表
名称
别名
SourceInsight
SI
软件,代码编辑工具
ClearCase
CC
软件,版本控制软件
CodeFormat
代码整理
代码风格整理,使代码有统一的排版和缩进
ArtisticStyle
AS
代码风格整理工具
ARMDeveloperSuite
ADS
ARM内核开发组件
SkyworksLabTestStudio
Skyworks的综合调试平台
WinTrace
跟踪调试信息工具
二、版本控制功能
这里说的版本控制为RationalClearCase,SI可以利用ClearCase、CVI等软件对代码进行精确的版本控制。
本节描述:
如何对SI的功能进行扩展,以支持CC的某些功能。
配置完成后,效果如下图:
SI版本控制图
使用条件
在SI下正常使用CC功能,需要满足一些条件。
4版本控制使用条件列表
条件
版本控制软件支持命令行
SI通过命令行调用外部命令
已经安装ClearCase
保证ClearCase的系统设置正确
编辑的文件为CC受控文档
文件必须为CC某个Libary下的文档
CheckOut功能
在SI中,点击菜单->
options->
customcommands…
选择[Command:
]->
“CheckOut”
在[Run]下写:
cleartoolco-c"
ModifyFileBySourceInsight:
"
%f
其中的cleartool是CC的命令行工具,%f是SI内部命令,表示当前文件的全路径。
co是参数,表示文件签出,也可以使用checkout代替。
以上参数大小写区分。
-c表示有注释,为后面紧跟的“ModifyFileBySourceInsight:
”是文件Checkout时的描述(Description)。
CheckIn功能
“CheckIn”
cleartoolci-c"
ModifyFileBySI:
-rm%f
参数解释请参考上一节,特殊说明如下:
ci是参数,表示文件签入,也可以使用checkin代替。
-rm表示覆盖原来的文件,不备份原来的文件。
UndoCheckOut功能
“undocheckout”
cleartoolunco-rm%f
ClearCaseExplorer功能
点击[Add]按钮,新的命令叫“RationalClearCaseExplorer”。
clearexplorer.exe%f
点击按钮“menu…”增加这个命令到菜单中。
运行时,SI会调用ClearCaseExplorer并定位到当前文件。
FindCheckOuts功能
本功能可以列出所有正在修改的文件(必须是CC受控文件)。
点击[Add]按钮,新的命令叫“FindCheckOuts”。
clearfindco.exe%j
%j命令是SI的项目主目录,结合CC的ShortSnop快照功能,可以列出所有正在修改的文档。
VersionTree
点击[Add]按钮,新的命令叫“VersionTree”。
clearvtree.exe%f
点击按钮“menu…”增加这个命令到菜单中,如下图:
自定义命令菜单图
Comparewithpreviousvision
本功能可以将本文件和最近提交的版本比较。
点击[Add]按钮,新的命令叫“Comparewithpreviousvision”。
cleardiffbl.exe/ispred%f
运行时,SI会调用CC的文档比较工具进行比较。
三、代码美化
如果您使用过VB,一定会对VB自动排版、自动对齐的功能十分向往。
统一格式的代码不仅方便我们阅读、观赏和小组内交流,也使代码看起来有强烈、统一的风格和特征。
代码整理功能(CodeFormat)推进使用ArtisticStyle(以下简称AS),它是一个自由开源软件。
他可以快速的整理C、C++、C#、Java的源代码。
AS是一个命令行程序,他没有界面。
AS支持多种代码整理风格,如下表:
5AS整理风格表
风格
--style=ansi
标准C的风格,这种风格为我们常用的格式
--style=kr
如雷贯耳的Kernighan和Ritchie的风格,KR是C语言标准的最早制定者,AnsiC的也是在他们的基础上制定的
--style=linux
Linux风格
--style=gnu
GNU风格
SI下正常使用AS需要满足一些条件。
6代码整理使用条件列表
安装AS
将AS复制到一个目录下
点击[Add]按钮,新的命令叫“CodeFormat”。
D:
\astyle\astyle.exe%f
点击按钮“menu…”增加这个命令到菜单中,这里操作和上文差不多,就不再介绍。
四、代码静态检查
静态检查工具,英文名称Lint。
当C语言还在贝尔实验室时(那时它还是B语言),它就已经是单独的一个工具。
不过,现在有些观点认为Lint功能是编译器不可缺少的功能,把它重新集成到编译器中(如GCC)。
Lint功能可以检查出代码中存在的各种问题,如:
内存泄漏问题、野指针,甚至是实参的效率问题。
灵活使用Lint功能,可以大幅提高代码的质量,提高系统的健壮性。
它是一个高阶程序员的必备工具。
Lint工具比较出名的有SpLint、PcLint和微软的CL。
SpLint为开源软件;
PcLint需要收费;
CL为微软的开发工具,他们各有优缺点。
PcLint可以选择代码检查的风格,如Kernighan&
Ritchie风格等,甚至是一些比较出名的书籍建议的风格。
我们使用的是Splint。
SI下正常使用Splint需要满足一些条件。
7代码整理使用条件列表
安装Splint
将Splint复制到一个目录下,如D:
\splint\
正确设置系统变量
系统变量的设置
Splint的系统设置包括:
INCLUDE、LARCH_PATH、LCLIMPORTDIR,系统变量设置的结果如下图。
正确系统变量图
四.1.1INCLUDE系统变量
在控制面板->
系统->
高级->
环境变量(E)…->
系统变量(S)…,点击按钮[新建(W)…]
在[新建用户变量]的[变量名(N)]中输入:
INCLUDE
在[变量(V)]中输入:
\splint\lib
如下图所示:
新增系统变量图
四.1.2LARCH_PATH系统变量
LARCH_PATH
\splint\bin;
\splint\imports
四.1.3LCLIMPORTDIR系统变量
LCLIMPORTDIR
批处理文件的编写
下文以项目A686+的设置来描述如何在SI中正确的使用Splint功能。
这里要强调指出的是:
我们可以通过技巧,能使SI中Splint功能做到通用,如:
在SI的A686+项目、M2项目使用同样的CustomCommand(Build功能也是同理)。
当Splint的静态检查时,需要往往需要了解整个项目的函数、宏的情况。
这决定Splint工作时,需要清楚、准确的知道项目所有相关的头文件的位置。
因此,我们新增一个批处理文件Splint_686PE.bat来处理一些工作,将项目的一些信息告诉我们的Splint。
8Splint_686PE.bat文件解析表
命令
setMMI_INCLUDE=J:
\include\mmi_inc;
…
设置项目库文件路径到MMI_INCLUDE中
setINCLUDE=%INCLUDE%;
%MMI_INCLUDE%
将Splint的库和项目库合并
setMARCO_DEFINE=-D_KEYMAP_I_0_-D…
设置项目的一些宏定义到MARCO_DEFINE
splint.exe%MARCO_DEFINE%%1
将需要静态编译的文件和宏定义传给Splint
Splint_686PE.bat完全文件信息如下:
@echooff
setoldpath=%path%
settmp=c:
\temp
settemp=c:
setARMHOME=C:
\progra~1\ARM\ADSv1_2
setpath=%CD%\PVCS;
%ARMHOME%;
%path%
setARMINC=%ARMHOME%\Include
setARMLIB=%ARMHOME%\Lib
J:
\include\mmiapi_inc;
\include\rtxc_inc
setCMS_INCLUDE=J:
\cms_include\app;
\cms_include\common;
\cms_include\ftp;
\cms_include\inputzi;
\cms_include\medialib;
;
\cms_include\obj;
\cms_include\prodconf
%MMI_INCLUDE%;
%CMS_INCLUDE%
setMARCO_DEFINE=-D__ARM__-DIROM_MEMCPY-D__PRODUCTIZATION__-D_KEYMAP_I_0_-D_COLORLCD_-DSFFS_NOFLASHAPI-DSFFS_MULTIPLE_INSTANCE-DATK_SUPPORT-DMET_FEATURES-D__ENHANCED_EEPROM__-DCPHS_SUPPORT-DAT_DIAL_DISPLAY-DZT_APPLE-DZT_APPLE2-D_MMI_MA2API_-DCMS_SAST_NEW_LCD_SUPPORT-DCMS_HAVE_CAMERA-DCMS_HAVE_VIBRATOR-D_ITAP_H
setMARCO_DEFINE2=-DBOOT_LOCATION=0x1000000-D__IA_DEVICE__=IA_20505_13-D__PMIC_DEVICE__=PMIC_20460-DIIC_OPTIMIZATION=IIC_OPTIMIZATION_DI_DATAOUT-D__SIM_INTERFACE__=SIM_3VONLY-DADC_CAL_DATA=SLOPE_INT_MULT-DSIM_DEBUG=SIM_DEBUG_MAX
setMARCO_DEFINE_HSW=-D_HSW_DEBUG1111-D_SAST_DEBUG111
setTEMP_MARCO=-casebreak-paramuse-compdef-mustfreefresh-compmempass-globstate
\splint\bin\splint.exe%SPLINT_MARCO%%TEMP_MARCO%%MARCO_DEFINE%%MARCO_DEFINE2%%MARCO_DEFINE_HSW%%1
SI的设置
点击[Add]按钮,新的命令叫“Splint”。
\splint\bin\Splint_686PE.bat%r
注意,这里传输的文件参数不是%f,而是%r。
具体区别读者可以自己试试。
其他配置项目编译的配置。
五、项目编译(Build)
SI也可以编译一个项目,方法很简单。
SI下正常编译一个项目需要满足一些条件。
9项目编译条件列表
安装ADS开发环境
环境变量为短文件路径
如ARMHOME=C:
有临时文件路径,并注意这些目录的临时文件不能太多
ADS在默认路径下
Path=C:
\ProgramFiles\ARM\ADSv1_2\bin
如果编译的项目生成的临时文件(包括目标文件)为CC受控文件,请批量去除这些文件的只读属性
如果文件路径太长,导致编译缓冲区溺出(如CC受控文件目录都非常深,会导致执行编译时,出现这个问题),请映射编译路径
SubstJ:
\A686+
注意:
使用Substj:
/d卸载
Update编译项目
“Build”
cmd/c"
\build_ads1.2\cmsbuild.batupdate"
Build设置图
在[Patten]中输入内容为:
^\([a-zA-Z].*\)(\([0-9][0-9]*\)).*
New编译项目
点击[Add]按钮,新的命令叫“ReBuild”。
\build_ads1.2\cmsbuild.batnew"
Clean项目临时文件
“CleanBuild”
\build_ads1.2\cmsbuild.batclean"
六、代码标准化
“代码标准化”就是利用SI的宏,将我们日常的一些操作包装起来,如插入文件头、插入函数头、插入代码修改记录等。
这些操作,我们都可以借助SI的宏功能。
在下文中,将列出我们常用的几个宏的代码。
遵循标准很方便,我们不需要在编程时去查看标准化文档;
也不需要随便找一个类似的文本复制过去,只需要使用SI的内置功能,一个菜单,或者是快捷键(如F2),SI会帮助你,什么都生成拉。
偷懒就是这么简单。
新增宏
,。
1、在菜单->
Project->
OpenProject中,打开BASE项目;
打开BASE项目图
2、找到SI安装目录下的utils.em文件,也可以在“ProjectWindow”中,打开这个文件。
打开utils.em文件图
3、把宏代码添加到该文件的尾部(当然你也可以另建一新文件,记住文件扩展要为.em,且要把它加到SI的Base工程中)。
4、打开菜单->
Options->
MenuAssignments…,在[Command]对话框中输入m(Macrc的缩写);
5、找到Macro:
HswPrintFixMsg(用户新增的函数名称,这个将在下文介绍);
6、在Menu中选择一个你喜欢的菜单,把这个宏命令加到这个菜单中;
加入宏菜单图
7、现在你可以方便地使用这个命令了,当然,对于常用命令,用户最好定义为快捷键。
插入修改日志宏
在修改别人的代码时,需要非常小心。
任何修改都必须着记录,这些记录包括:
修改者、修改原因和修改日期。
“插入修改日志宏”以统一的形式自动生成:
修改者和修改日期信息,免除用户老是输入这些东西。
日志生成后,会自动定位到输入“修改原因”的位置上
如下示范:
/*fixedbyhuangshw2005/09/22:
*/
代码如下:
/*createbyhsw2005/08/17:
自动加入有"
黄少文特征"
的日期修改宏*/
macroHswPrintFixMsg()
{
szTime=GetSysTime
(1)
Day=szTime.Day
Month=szTime.Month
Year=szTime.Year
if(Day<
10)
szDay="
0@Day@"
else
szDay=Day
if(Month<
szMonth="
0@Month@"
szMonth=Month
hwnd=GetCurrentWnd()
lnFirst=GetWndSelLnFirst(hwnd)
lnLast=GetWndSelLnLast(hwnd)
hbuf=GetCurrentBuf()
/*取得用户名称*/
szMyName=getenv(USERNAME)
strPrint="
/*Fixedby@szMyName@@Year@/@szMonth@/@szDay@:
*/"
InsBufLine(hbuf,lnFirst,strPrint)
/*光标定位到注释的中间*/
selection_record=GetWndSel(hwnd)
ichPos=strlen(strPrint)-2
selection_record.ichFirst=ichPos
selection_record.ichLim=ichPos
SetWndSel(hwnd,selection_record)
}
插入文件头
根据《计算机源代码编写规范》中,章节“3.2.1源代码文件的注释”的描述,规范的源文件头由以下内容组成:
10源文件注释规范表
组成元素
版权声明
在文件的头部标明程序名称,它所完成的主要功能
文件的作者,及开始和完成时间
阶段测试结束后,主要修改活动的修改人、时间、简单原因说明列表
维护过程中需要修改程序时,应在被修改语句前面注明修改时间和原因说明。