1、7.3 监视调试输出 16八、 附录 168.1 SI的大客户 168.2 表格索引 178.3 图形索引 17一、 前言Source Insight(SI)是一个功能强劲的“程序代码编辑器”,他内置对C/C+,Java和x86汇编语言程序的解析功能;有自己的动态数据库在你编程时提供有用的文本提示,包括有关的函数、宏、参数等。本文档主要描述SI如何结合Clear Case、Artistic Style、Splint和自身的宏功能,实现一个IDE编译器基本的“版本控制”、“代码美化”、代码静态检查、项目编译和代码标准化的功能。SI的强大功能,甚至可以让用户监视设备调试发出的调试信息。目标通过本文
2、档的描述,读者可以将SI变成一个方便的工作平台,并在这个平台上,简化我们日常中的大量重复而且繁重的工作。预定读者预定读者是对SI有一定了解的用户,如果是第一次使用SI,请参考文章SI的功能说明和SI常用技巧。历史版本本节描述了文档的历史版本。1 历史版本表日期作者说明012005-9-21黄少文Draft参考本文档参考网络上很多关于SI的文章,同时也应用了其他文档。2 参考列表参考书目Using Rational ClearCaseRational Software02Splint ManualSecure Programming GroupVersion 3.1.103SI的功能说明04SI
3、常用技巧05Artistic Style HelpTal Davidson06计算机源代码编写规范maysNEU-ALPINE术语表3 术语表名称别名Source InsightSI软件,代码编辑工具ClearCaseCC软件,版本控制软件Code Format代码整理代码风格整理,使代码有统一的排版和缩进Artistic StyleAS代码风格整理工具ARM Developer SuiteADSARM内核开发组件Skyworks Lab Test StudioSkyworks的综合调试平台WinTrace跟踪调试信息工具二、 版本控制功能这里说的版本控制为Rational ClearCase
4、,SI可以利用ClearCase、CVI等软件对代码进行精确的版本控制。本节描述:如何对SI的功能进行扩展,以支持CC的某些功能。配置完成后,效果如下图:SI版本控制图使用条件在SI下正常使用CC功能,需要满足一些条件。4 版本控制使用条件列表条件版本控制软件支持命令行SI通过命令行调用外部命令已经安装ClearCase保证ClearCase的系统设置正确编辑的文件为CC受控文档文件必须为CC某个Libary下的文档CheckOut功能在SI中,点击菜单-options-custom commands选择Command:-“Check Out”在Run下写:cleartool co -c Mo
5、dify File By Source Insight: %f其中的cleartool是CC的命令行工具,%f是SI内部命令,表示当前文件的全路径。co是参数,表示文件签出,也可以使用checkout代替。以上参数大小写区分。-c表示有注释,为后面紧跟的“Modify File By Source Insight:”是文件Checkout时的描述(Description)。CheckIn功能“Check In”cleartool ci -c Modify File By SI: -rm %f参数解释请参考上一节,特殊说明如下:ci是参数,表示文件签入,也可以使用checkin代替。-rm表示覆
6、盖原来的文件,不备份原来的文件。Undo CheckOut功能“undo check out”cleartool unco -rm %fClearCase Explorer功能点击Add按钮,新的命令叫“Rational ClearCase Explorer”。clearexplorer.exe %f点击按钮“menu”增加这个命令到菜单中。运行时,SI会调用ClearCase Explorer并定位到当前文件。Find CheckOuts功能本功能可以列出所有正在修改的文件(必须是CC受控文件)。点击Add按钮,新的命令叫“Find CheckOuts”。clearfindco.exe %j
7、%j命令是SI的项目主目录,结合CC的ShortSnop快照功能,可以列出所有正在修改的文档。Version Tree点击Add按钮,新的命令叫“Version Tree”。clearvtree.exe %f点击按钮“menu”增加这个命令到菜单中,如下图:自定义命令菜单图Compare with previous vision本功能可以将本文件和最近提交的版本比较。点击Add按钮,新的命令叫“Compare with previous vision”。cleardiffbl.exe /ispred %f运行时,SI会调用CC的文档比较工具进行比较。三、 代码美化如果您使用过VB,一定会对VB
8、自动排版、自动对齐的功能十分向往。统一格式的代码不仅方便我们阅读、观赏和小组内交流,也使代码看起来有强烈、统一的风格和特征。代码整理功能(Code Format)推进使用Artistic Style(以下简称AS),它是一个自由开源软件。他可以快速的整理C、C+、C#、Java 的源代码。AS是一个命令行程序,他没有界面。AS支持多种代码整理风格,如下表:5 AS整理风格表风格-style=ansi标准C的风格,这种风格为我们常用的格式-style=kr如雷贯耳的Kernighan和Ritchie的风格,KR是C语言标准的最早制定者,Ansi C的也是在他们的基础上制定的-style=linu
9、xLinux风格-style=gnuGNU风格SI下正常使用AS需要满足一些条件。6 代码整理使用条件列表安装AS将AS复制到一个目录下点击Add按钮,新的命令叫“Code Format”。D:astyleastyle.exe %f点击按钮“menu”增加这个命令到菜单中,这里操作和上文差不多,就不再介绍。四、 代码静态检查静态检查工具,英文名称Lint。当C语言还在贝尔实验室时(那时它还是B语言),它就已经是单独的一个工具。不过,现在有些观点认为Lint功能是编译器不可缺少的功能,把它重新集成到编译器中(如GCC)。Lint功能可以检查出代码中存在的各种问题,如:内存泄漏问题、野指针,甚至是
10、实参的效率问题。灵活使用Lint功能,可以大幅提高代码的质量,提高系统的健壮性。它是一个高阶程序员的必备工具。Lint工具比较出名的有SpLint、PcLint和微软的CL。SpLint为开源软件;PcLint需要收费;CL为微软的开发工具,他们各有优缺点。PcLint可以选择代码检查的风格,如Kernighan&Ritchie风格等,甚至是一些比较出名的书籍建议的风格。我们使用的是Splint。SI下正常使用Splint需要满足一些条件。7 代码整理使用条件列表安装Splint将Splint复制到一个目录下,如D:splint正确设置系统变量系统变量的设置Splint的系统设置包括:INCL
11、UDE、LARCH_PATH、LCLIMPORTDIR,系统变量设置的结果如下图。正确系统变量图四.1.1 INCLUDE系统变量在控制面板-系统-高级-环境变量(E)-系统变量(S),点击按钮新建(W)在新建用户变量的变量名(N)中输入:INCLUDE在变量(V)中输入:splintlib如下图所示:新增系统变量图四.1.2 LARCH_PATH系统变量LARCH_PATHsplintbin;splintimports四.1.3 LCLIMPORTDIR系统变量LCLIMPORTDIR批处理文件的编写下文以项目A686的设置来描述如何在SI中正确的使用Splint功能。这里要强调指出的是:我
12、们可以通过技巧,能使SI中Splint功能做到通用,如:在SI的A686项目、M2项目使用同样的Custom Command(Build功能也是同理)。当Splint的静态检查时,需要往往需要了解整个项目的函数、宏的情况。这决定Splint工作时,需要清楚、准确的知道项目所有相关的头文件的位置。因此,我们新增一个批处理文件Splint_686PE.bat来处理一些工作,将项目的一些信息告诉我们的Splint。8 Splint_686PE.bat文件解析表命令set MMI_INCLUDE=J:includemmi_inc;设置项目库文件路径到MMI_INCLUDE中set INCLUDE=%I
13、NCLUDE%;%MMI_INCLUDE%将Splint的库和项目库合并set MARCO_DEFINE=-D_KEYMAP_I_0_ -D设置项目的一些宏定义到MARCO_DEFINEsplint.exe %MARCO_DEFINE% %1将需要静态编译的文件和宏定义传给SplintSplint_686PE.bat完全文件信息如下:echo offset oldpath=%path%set tmp=c:tempset temp=c:set ARMHOME=C:progra1ARMADSv1_2set path=%CD%PVCS;%ARMHOME%;%path%set ARMINC=%ARMH
14、OME%Includeset ARMLIB=%ARMHOME%LibJ:includemmiapi_inc;includertxc_incset CMS_INCLUDE=J:cms_includeapp;cms_includecommon;cms_includeftp;cms_includeinputzi;cms_includemedialib;cms_includeobj;cms_includeprodconf%MMI_INCLUDE%;%CMS_INCLUDE%set MARCO_DEFINE= -D_ARM_ -DIROM_MEMCPY -D_PRODUCTIZATION_ -D_KEY
15、MAP_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 set MARCO_DEFINE2=-DBOOT_LOCATION=0x1000
16、000 -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_MAXset MARCO_DEFINE_HSW=-D_HSW_DEBUG1111 -D_SAST_DEBUG111set TEMP_MARCO=-casebreak -paramuse -compdef -mustfreefres
17、h -compmempass -globstatesplintbinsplint.exe %SPLINT_MARCO% %TEMP_MARCO% %MARCO_DEFINE% %MARCO_DEFINE2% %MARCO_DEFINE_HSW% %1SI的设置点击Add按钮,新的命令叫“Splint”。splintbinSplint_686PE.bat %r注意,这里传输的文件参数不是%f,而是%r。具体区别读者可以自己试试。其他配置项目编译的配置。五、 项目编译(Build)SI也可以编译一个项目,方法很简单。SI下正常编译一个项目需要满足一些条件。9 项目编译条件列表安装ADS开发环境环境
18、变量为短文件路径如ARMHOME=C:有临时文件路径,并注意这些目录的临时文件不能太多ADS在默认路径下Path=C:Program FilesARMADSv1_2bin如果编译的项目生成的临时文件(包括目标文件)为CC受控文件,请批量去除这些文件的只读属性如果文件路径太长,导致编译缓冲区溺出(如CC受控文件目录都非常深,会导致执行编译时,出现这个问题),请映射编译路径Subst J: A686+注意:使用Subst j: /d 卸载Update编译项目“Build”cmd /c build_ads1.2cmsbuild.bat updateBuild设置图在Patten中输入内容为:(a-z
19、A-Z.*)(0-90-9*).*New编译项目点击Add按钮,新的命令叫“ReBuild”。build_ads1.2cmsbuild.bat newClean项目临时文件“Clean Build”build_ads1.2cmsbuild.bat clean六、 代码标准化“代码标准化”就是利用SI的宏,将我们日常的一些操作包装起来,如插入文件头、插入函数头、插入代码修改记录等。这些操作,我们都可以借助SI的宏功能。在下文中,将列出我们常用的几个宏的代码。遵循标准很方便,我们不需要在编程时去查看标准化文档;也不需要随便找一个类似的文本复制过去,只需要使用SI的内置功能,一个菜单,或者是快捷键(
20、如F2),SI会帮助你,什么都生成拉。偷懒就是这么简单。新增宏,。1、 在菜单-Project-Open Project中,打开BASE项目;打开BASE项目图2、 找到SI安装目录下的utils.em文件,也可以在“Project Window”中,打开这个文件。打开utils.em文件图3、 把宏代码添加到该文件的尾部(当然你也可以另建一新文件,记住文件扩展要为.em,且要把它加到SI的Base工程中)。4、 打开菜单-Options-Menu Assignments,在Command对话框中输入m(Macrc的缩写);5、 找到Macro: HswPrintFixMsg(用户新增的函数名
21、称,这个将在下文介绍);6、 在Menu中选择一个你喜欢的菜单,把这个宏命令加到这个菜单中;加入宏菜单图7、 现在你可以方便地使用这个命令了,当然,对于常用命令,用户最好定义为快捷键。插入修改日志宏在修改别人的代码时,需要非常小心。任何修改都必须着记录,这些记录包括:修改者、修改原因和修改日期。“插入修改日志宏”以统一的形式自动生成:修改者和修改日期信息,免除用户老是输入这些东西。日志生成后,会自动定位到输入“修改原因”的位置上如下示范:/*fixed by huangshw 2005/09/22: */代码如下:/*create by hsw 2005/08/17: 自动加入有黄少文特征的日
22、期修改宏*/macro HswPrintFixMsg() szTime = GetSysTime(1) Day = szTime.Day Month = szTime.Month Year = szTime.Year if (Day 10) szDay = 0Day else szDay = Day if (Month szMonth = 0Month szMonth = Month hwnd = GetCurrentWnd() lnFirst = GetWndSelLnFirst(hwnd) lnLast = GetWndSelLnLast(hwnd) hbuf = GetCurrentBu
23、f() /*取得用户名称*/ szMyName = getenv(USERNAME) strPrint = /*Fixed by 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 源文件注释规范表组成元素版权声明在文件的头部标明程序名称,它所完成的主要功能文件的作者,及开始和完成时间阶段测试结束后,主要修改活动的修改人、时间、简单原因说明列表维护过程中需要修改程序时,应在被修改语句前面注明修改时间和原因说明。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1