1.有没有Genesis2000盗版软件安装高手?
2.c语言流程图生成器怎么使用?源码
3.第38篇:Checkmarx代码审计/代码检测工具的使用教程(1)
4.keil5程序如何生成主程序流程图以及各子程序流程图?
5.Excalidraw, 一款超赞的开源白板工具
6.可不可以将以下程序改写成流程图
有没有Genesis2000盗版软件安装高手?
Genesis 软件介绍
Genesis 单词本身意思为:创始;起源;发生,生成
Genesis 是个线路板方面的计算机辅助制造软件,它是转流由以色列的Orbotech与Valor的合资公司----Frontline公司开发的,而且它还在不断开发更多功能,程图它还允许你可以自己开发设计适合自己规范的工具功能。
类似Genesis的破解线路板方面的计算机辅助制造软件还有很多,比如CAM、源码查看iframe 源码V、转流GC-CAM、程图U-CAM、工具ParCAM等等,破解但这些软件跟Genesis相比:
1、源码 功能没Genesis强大,转流最突出的程图是Genesis能自动修正许多错误。
2、工具 没Genesis好学,破解学习难度大。
3、 操作起来没Genesis简单,Genesis更形象直观。
由于Genesis的优势太多,被许多大小线路板厂和光绘公司广泛采用,买不起正版的也情愿用盗版的干活。必须明确的是:我们的培训不是教你设计线路板,而是把人家设计出来的线路板,根据厂里的机器能力,用Genesis去处理后,为生产各工序提供某些工具(比如各种菲林、钻带、锣带等),方便生产用,起的是辅助制造作用。也就是说学的是CAM范围,而不属于CAD范围。
一般来说,线路板厂接到客户订单时,客户会以电脑文件的形式提供他自己的样品资料,我们就是修正客户提供的原始资料文件,使它方便自己厂里的机器生产出符合客户要求的线路板。
举个例子说:钻孔部门的钻孔机是先把钻孔文件读进机器里,再按钻孔文件的内容去钻孔。假设客户要求某个型号的线路板上某类孔要钻mil,有时厂里的钻孔机却读不懂客户提供的钻孔文件,因此无法直接用客户的原始文件去生产,即使有时钻孔机能读懂客户提供的原始钻孔文件,直接只钻mil也是不行的,由于线路板制作过程中钻完孔后还要经过的后面几步会使孔壁再加上铜,最后做出来只会小于mil。基于以上原因,我们把孔加大后再把钻孔文件输出为厂里钻机能读懂的文件即可。这就是计算机辅助制造(CAM)的作用,用来帮助实际生产的。
菲林是爆光工序用的,跟生活中的照相底片类似,爆光那道工序就是把底片上的线路图象印到铜面上,然后把不要的铜用药水蚀刻掉,留下有用的铜形成线路。而菲林是光绘机绘出来的,那么光绘机是怎么绘的呢?它是根据光绘文件的内容去做,而光绘文件实际是我们用Genesis做好的资料输出来的,我们的资料又是在客户提供的原始资料的基础上修改的,只不过修改的时候考虑到了厂里的机器能力。菲林按工序可分为内层菲林、外层菲林、防焊菲林、文字菲林。
菲林是感光后有图象的胶片,可以理解为你照相后得到的那张底片,只不过上面的图象不是人相,而是线路图象而已,当然它的大小比你的照相底片要大。
光绘文件是光绘机用来绘制菲林用的电脑文件,你用手摸不到的,存在电脑上,可以通过某种方式提供给光绘机用,它里面的代码内容机器能读懂,是告诉机器怎么控制光线照射,从而形成图象。
钻孔文件(又叫钻带)也是一种电脑文件,你摸不到它的,他里面内容是钻孔机要用的钻刀顺序、钻嘴大小、钻孔位置等
Genesis采用Valor Genesis CAM系统,可将CAM作业流程依不同之层数及工料规格,做成多项标准之模块,自动化分析,编修数据处理,减少人工错误并增加作业效率。
1. D-code及Gerber自动输入,避免人工输入错误的风险。
2. 原稿Net list与工作片Net list比较,避免CAM设计造成之人为疏失。
3. On line DRC(设计规则检查)设计全程,可避免功能信号被更动,线宽、json源码如何使用间距信号,不因编修而变更。
4. 可分析检查PCB Gerber如:
(1) PWR GND断、短路
(2) 钻孔是否遗漏
(3) 焊垫是否遗漏
(4) 防焊是否遗漏
(5) 焊垫是否超出至防焊面
(6) 文字或防焊是否沾到焊垫
5. 制程误差,计算机自动补偿。
6. 特性阻抗,多层搭叠,自动计算分析。
7. CAM工作流程程序化,不因工程师不同而有品质上的差异。资料在转换后传至外围之制程网络设备,如激光绘图机、成型机、钻孔机、计算机网络测试设备和自动比对光学机,皆在计算机数值控制下进行。
8.编写Genesis DFM自动化程式(SCRIPTS)高效、快捷处理资料。
各种CAM文件(比如钻带、锣带、Gerber文件)源代码的解析;
Genesis ERF 文件的源代码了解及其修改;
Genesis Hook 程序的了解和编写;
Genesis 各种操作的代码个性化修改,以提高工作效率,使软件适应自己当前工作;
Genesii Script 程序基础知识和一般编写等。
Genesis特性介绍
1、清晰的管理界面,各个料号的存入方式直观,简单。
2、资料保密性强,每次启动需输入用户名和密码。
3、独立而系统的输入输出。
4、资料结构为二维表格的方式存在,精确的描述压合方式,板字构造及层别的属性定义。
5、Wheel模块及Symbol集中存放,方便任何环境随时调用。
6、人性化的图形编辑窗口和控制面板,有针对性的对成形区域内的部分进行修改。
7、对图形元素的属性极其敏感,有条不紊的按照各种需要进行自动修改和检查。
8、可调试参数任意修改,根据不同需要手动更改其运行的最佳方案。
9、自动而快速的封边程式,省去了整理板边的烦琐。
、安全而高效的钻孔和锣边程式,根据定义的锣刀尺寸、补偿方向可以简单的自动添加锣程式。
、根据不同的菲林尺寸,自动排列,节约菲林成本,增加其利用率
、无论正负叠加多少层,均可放在同一逻辑层。
Genesis 强大的编辑和修改功能:
资料的读入
1、拥有支持多达几种读入格式,如:Gerber、GerberX、Dpf、Dxf、Plt、Excellon…….
2、可以自行调整其读入格式,然后预览其图形,针对Gerber文件的D-code进行Wheel编辑,内置模块可将同种类型的D-code识别出来,减少编译次数,节约时间。
层别属性的定义
1、可以按照板子的组合方式排列层次,定义不同的层次属性,并以颜色区分,层次可以任意增加、删除、拷贝和移动。
2、可以独立放置原稿、单PCS工作稿、SET连片和PANEL。各个集合体系均可浏览和预视,并可以相互按照某种规则产生关联达到虚拟排版。
编辑窗口和工具
1、辅助卡盟源码简捷而方便的交互式面板,让人机沟通更直接,将常用的工具和安全指令设在窗口右边,随手可及。
2、面板上的层次分明,坐标随时监控,状态栏可以清晰显示当前的操作状态和图形数据的参数值。
3、主菜单的编辑栏拥有一般编辑(移动、旋转、镜像、拷贝、删除、追加、恢复、)和扩展编辑(延长、比例放大、排线移动而不改变角度或长度、各层之间的图形转移、尺寸及形状随意改变)。
4、图形及元素属性自由转换,任意调节和替换,正负极性相互转换和工作成形去的定义。
5、细化而强大的选择功能可以自身进行单选、连选、区域选择、非规则区域选择、网络选择、反选;更是对比参考层和层之间的选择,交错、关联、覆盖、被覆盖;还能依据极性、属性、形状大小进行过和追加;还有大铜皮的选择等等。
6、不论是测量还是图象的产生,均可抓取图形的端点、交点、边缘、网络、骨架、中心线、中心点及成形边框。
7、图形元素可以一一罗列,个数、大小、形状、极性一览无余,可以有针对性的图形进行高亮和选择更新。
8、区域切分与填充,可以对板内或板外的图形分割,剪切和填实。
9、专业的画线、填充及文字标识,存在方式多种多样。
、线宽线距可以充分调整,线与线的连接、倒角,方框涨大及缩小,任何图象的复制与粘贴方便快速。
钻孔修改及检查
1、Map 图与孔点图可以相互转换,且一气呵成,强大的钻孔管理器,可以对VIA孔、PTH孔、NPTH孔进行补偿、调节、高亮、刀具合并及每个孔的位置轨迹指示。
2、根据内外层的分布属性,可以检查出孔与孔的电器性能是否导通,还可以报告近孔、重孔、八字孔及每种孔的个数和位置,并判断是否间距离板边太近。
内层修改及检查
1、针对内层的正负片进行不同的修改和优化,根据不同的孔径手动设定自己所需的最小隔离RING边及最优RING边。
2、自动删除独立PAD,当日抓涨停源码可塑性的蜘蛛脚,随意调整。
3、可选择修改区域为成形线以内、可视窗口以内和所有区域,程序运行完后回逐条报告其修改的内容和未修改的内容。
4、自动检验隔离PAD、区域线、线宽、线距等等;自动填充微孔、缝隙,针对钻孔自动校正PAD的位置,加泪滴。
外层修改几检查
1、对照绿油开窗PAD的属性定义SMD,按照自身要求调节参数,可以做PAD加大、PAD缩小、绕线、更改形状,对不满足间距的地方进行削切,然后报告所作动作的结果(可根据尺寸分屏显示)
2、运行线路自动检查功能,可侦测线路的线宽线距、孔环大小、NPTH孔距铜的距离PAD到PAD的间距、PAD到线的间距、铜到板边的距离、端点、PAD、线、弧的个数及位置,同网络的间隙等等。
绿油修改及检查
1、根据绿油覆盖定义PAD的RING环最优值及防止渗油露铜所需的间距参数、桥位大小,
自动运行绿油修改程序,进行自动加大及自动削PAD,其结果会报告出来,以供价值评估。
2、强大的绿油检查功能,可检测出孔的开窗、PAD的开窗及绿油到锡的距离、开窗PAD到PAD的距离、细小缝隙、塞孔情况等等。
排版与拼列
1、强有力的全自动或手动可以根据开料尺寸构成任意的虚拟排版方式,排好后还可以对单个或多个单只自动拷贝、删除、移动、镜像和旋转编辑。
2、对于不同尺寸的菲林,可将各个层次排列起来,一最优的排列方式来体现菲林的利用率。
资料的输出
1、手动指定路径,可输出几十种不同的格式如:Gerber、Cam、Drawing、Drill/Rout、Laser、Drill、Plotters…….
2、输出同样提供旋转、镜像、按比例拉长或缩短、极性反向功能等等。
综上所述,GENESIS的强大功能非一般CAM软件所能比拟的。
Genesis CAM 工序自动化
CAM 工序自动化
虽然CAM系统在PCB业界中不断增加,但是为什么还有很多厂商不愿意把工序自动化呢?有些相信他们现有的CAM软体已可达到要求、并不需要自动化。其它的则缺乏重点,无法界定什么工序需要自动化,或者无法产生他们所需要的自动化软体。无可置疑,一些走在前端的厂商已正在享受工序自动化带来的极大的好处,包括提升产能、增进资料质量和缩短培训时间。
第一个问题要问的是:为什么需要自动化?
为什么CAM系统就不能配备所有所需的自动化功能,而我只需要按正确的键钮来达到自动化?要回答这些问题是很容易的。世上没有一个人是用同一样的方法来做同一件事的。每一个厂商都用很不同的方法来使用CAM系统。举个例子:在排板的时候,每一个厂商都用很不同的符号、靶标、字符等,Java宠物游戏源码放在不同的板边位置。这就是为什么CAM系统只能提供基本的功能,让用户加入这些资料而没有自动化的功能。
CAM工序自动化所带来的好处
提升产量:无论有多少层的排板,自动化可以把一小时的排板时间缩短到三分钟。
资料质量:所有资料都用同一种方法来处理。
操作者的培训:当大部分的工序已经自动化时,培训一个新的操作人员是一件很容易的事情。工作流程和工序都已在软体内定义好,操作人员只要作出几项决定便可完成复杂的工序。一个好的自动化需要什么样的条件呢?明显的,如果CAM系统提供script 功能的话,我们便能完成基本的自动化。自动化可以达到什么样的程度,完全依赖CAM资料库内所能储存的资料质和量。例如要写出把某个钻孔层内的资料分为导通孔和非导通孔的话,只要资料库内已能把导通孔和非导通孔分类,这就变成易如反掌。只要把script 写成为把所有导通孔从该钻孔层拷贝到新的导通孔层便可。这步骤可以重覆用在产生非导通孔层上。一个好的CAM系统可以让用户为钻孔和其他资料定义成不同的参数,好像孔径、座标等。它更可根据不同的客户名称、操作人员或时限来区分不同的料号。这些都是一个好的自动化程式必备的资料,自动化程式员可很容易从资料库内得到正确的资料。
Script 是怎样工作的?
最容易的方法是用line-mode 指令;文字形式的指令已能代替CAM 系统内每一个滑鼠的动作。 如要打开一个料号的话,可用COM open_job,job= 便成。第一部分内的 “COM open_job” 告诉系统要怎么做(在这例子代表打开料号) 。第二部分内的告诉系统要处理什么资料 (在这例子代表料号名称为) 。同样的道理,如要在座标 (4.6; 4.4) 加上mils 的圆盘,可用指令:COM add_pad,x=4.6,y=4.4,symbol=r,polarity=positive 来实现。为了帮助自动化程式员从几千个CAM系统所提供的指令中找出所需的功能,指令记录功能可记录所有执行过的动作,继而把它们变成line-mode 格式,程序员就可以运用把它们化为自动化的内容。
Genesis 指令记录器
现在你已有指令可以在script 内执行。这个script 只有对这一个特定的料号有效;这时,你需要产生一个在每一个料号都可以用的script。这就是script 语言产生的原因。你需要建立一些变数、做一些计算、写一些if-then-else 的句子; 还有产生一些循环、目录、列阵种种。举一个简单的用C-Shell script 语言写的例子,可让大 家了解一下:下面这个程式可从资料库读进排板大小,然后在每一层的左下角和右上角距离0.5mil 板边的地方放一个mil 的圆盘。
DO_INFO -t step -e $JOB/$STEP ## 从资料库中读取有用的资料
MATH x1 = $gPROF_LIMITSxmin + 0.5 #### 计算X 和Y 座标
MATH y1 = $gPROF_LIMITSymin + 0.5 #### 在Xmin 和Ymin 加上0.5
MATH x2 = $gPROF_LIMITSxmax - 0.5 #### 在Xmax 和Ymax 减去0.5
MATH y2 = $gPROF_LIMITSymax - 0.5 #### 结果存在x1, y1, x2 和y2 变数中
### 显示每一层和在已计算的座标上
### 加上 mils 的圆盘
foreach layer ($gLAYERS_LIST)
COM display_layer,name=$layer,display=yes,number=1
COM work_layer,name=$layer
COM add_pad,x=$x1,y=$y1,symbol=r,polarity=positive
COM add_pad,x=$x2,y=$y2,symbol=r,polarity=positive
end
C-shell Script 例子
该用哪个script 语言?你可以用任何一种程式语言来作为script 语言。但最被普遍接受的是通译程式而不是需要被编译的程式。通译程式可直接被执行;但是编译程式(像C、C++、Java 等) 必须在被执行前 先被翻译(编译)成机器语言。它们比较难学,没有line-mode 编辑器,故此是一种难以引起大家兴趣的script 语言。市场上你可以考虑用不同的script 语言:C-shell, Tcl/Tk, Perl 和Python (还有很多其他的语言 ,在此不作探讨)。C-Shell 是被公认为最容易学的语言。它拥有非常简单而有限的指令,足够让你可以写出大部分的自动化程式。偶尔你需要其他的小工具awk 或sed 来帮忙,但整体来说,C-Shell 的标准工具已能符合一般要求。你更可以用Genesis 的表格功能和内含的GUI来设 计用户介面。其他的程式语言,好像Perl, Python 和Tcl/Tk,具备更强大的功能,每一个都提供类似的工具 和能力。我可以再写十页来比较它们的优缺点,但这只会令我们迷路;在CAM自动化程式语言中,它们都是大同小异。这三种语言提供比较好的工具:好像列阵和子程式、还可产生用户介面,让用户预先输入参数和选择。在Tcl/Tk 所产生的用户介面例子。什么工作可被自动化?理论上,你可以把CAM从输入到输出的每一步都可以自动化,问题是当中需要考虑的事情实在太多。制程常常在被改变、输入资料变化无常、更甚者常常会有特殊情况出现,而这一切都末在当初写程式时考虑到的。第一步最容易自动化的是重覆的工序,它们可被定义成流程图,配上固定的步骤和怎样执行每一步便可。典型的步骤包括:
• 生成排板
• 计算铜面积
• 产生覆盖层
• 层内分析 (为报价或量产)
• PCB编辑
• 网路比较
• 输出至不同格式
• 资料库管理及其他
为了简化程序,你可以从CAM流程中的单一的script 开始。然后把每一个小script 连系在workflow上,CAM 工程师只需按正确的次序执行便可。你更可以防止他们在错误的时候按错误的键。就算有些工序需要手动处理,script 也可以预先打开正确画面及显示相关层的资料。当手动处理完成后,script 只需要跑一个检查程式去确认手动处理没有造成新的设计和网路问题。以下例子(图四) 是典型的CAM料号输入流程。左边的按钮是操作人员必须执行的动作,这动
作被连系到script 去执行所需的介入或非介入工序。当完成工序后,该按钮的底盘颜色会改变,操作人员的资料和执行时间都被自动记录在案。你可以用Genesis 的workform来设计用户介面或沿用Tcl/Tk 的介面设计工具亦可。输入流程例子。挂接程式Script 可连系到每一个被执行的指令,这些小script 名为挂接程式。它们可被特殊指令激活(好像:打开料号、加图盘或储存料号等) ,这些挂接程式可改变指令的行为。例如我们可以把一个要求操作员输入密码的script 挂在打开料号指令上,这就可以控制操作员在打开料号时的权限。另举一例:一个跑网路检查的小script 可以挂接在储存料号指令上,这便可保障该料号在储存前网路是正确的。如果网路出现偏差,系统会拒绝储存指令,要求操作员去检查网路。
总结很多PCB制造商已经成功的完成了绝大部份CAM制程的自动化。每一天,他们还是继续投资在自动化上。在程式人员的培训和自动化维护的投资,都已回报在显著增加的生产量,继而引发出更好、更快、更精确的CAM制程和产品。
c语言流程图生成器怎么使用?
使用C语言流程图生成器的一般步骤如下:
1. 选择合适的流程图生成器:在市面上,有许多流程图生成器可供选择,包括一些专门为C语言设计的流程图生成器。选择一个适合你的需求和技能水平的生成器。
2. 编写C语言代码:首先,你需要编写C语言代码,这是你希望生成流程图的源代码。确保代码是清晰、易于理解的,以便在生成流程图时能够准确地表示代码的逻辑结构。
3. 导入代码到流程图生成器:将你的C语言代码导入到所选的流程图生成器中。这通常是通过将代码复制粘贴到生成器的相应区域,或者通过选择文件导入功能来完成的。
4. 生成流程图:在代码导入后,流程图生成器会分析代码并生成相应的流程图。这个过程可能需要一些时间,具体取决于代码的长度和复杂性。生成的流程图将清晰地展示代码的逻辑结构,包括控制流、函数调用等。
例如,假设你有一段简单的C语言代码,它包含一个主函数和两个子函数。你可以使用流程图生成器来生成这段代码的流程图。在导入代码后,生成器将分析代码并生成一个流程图,其中主函数作为起点,通过调用子函数来实现特定的功能。流程图将展示这些函数之间的调用关系以及它们之间的数据流动。
通过使用C语言流程图生成器,你可以更好地理解代码的逻辑结构,从而更有效地进行代码调试和优化。此外,流程图还可以作为文档的一部分,帮助其他人理解你的代码并实现相应的功能。
需要注意的是,不同的流程图生成器可能具有不同的功能和特点,因此在使用时应根据具体需求选择合适的生成器。此外,生成的流程图也需要仔细审查,以确保它们准确地反映了代码的逻辑结构。
总的来说,使用C语言流程图生成器可以帮助你更好地理解和管理C语言代码的逻辑结构。通过生成流程图,你可以更清晰地了解代码的执行流程、函数调用关系以及数据流动情况,从而更有效地进行代码调试和优化。
第篇:Checkmarx代码审计/代码检测工具的使用教程(1)
Checkmarx是一款以以色列研发的代码审计工具,主要针对.NET开发环境,并且需要在Windows操作系统下使用。相较于其他工具,Checkmarx的安装过程复杂,需要额外安装IIS、.NET环境、SQLServer数据库等组件。为了确保安装顺利,建议用户在虚拟机环境中运行,尤其是选择win或win版本。在安装过程中,确保CxJobsManager、CxScansManager、CxSystemManager、CxScanEngine、IIS Admin Service、World Wide Web Publishing Service等服务处于启动状态,等待几分钟,直至所有服务启动完成。对于系统配置,推荐为Checkmarx分配G内存,以满足其对资源的需求。操作系统建议使用win或win版本,最新的可能需要win,但具体情况还需进一步确认。此外,网上存在多个版本的破解版,部分版本在扫描至%或%时会卡住,这可能是破解不完全导致的,需谨慎辨别。
使用Checkmarx进行代码扫描时,用户首先通过桌面的快捷方式启动“Checkmarx Audit”客户端程序,并输入用户名和密码进行登录。接着,点击“New Local Project”按钮,选择需要进行代码扫描的Java代码文件夹,确保包含完整的jar包,以避免扫描失败或结果遗漏。在“Count”选项中可以快速获取代码行数,用于估算代码审计的工作量。勾选“Select Queries Before Loading Project”选项,允许用户手动选择代码审计规则库。在“Run Multiple Queries”界面下,用户可以选择需要使用的代码审计规则库,通常只需选择Java选项。点击“Scan”按钮启动扫描过程,用户可以在“Loading Project”窗口中查看扫描进度。完成扫描后,通过“Results History”查看漏洞结果,并勾选“Hide Empty”选项隐藏无漏洞结果,以便清晰地查看漏洞详情。点击右下角方框预览代码,Checkmarx会提供代码高亮显示。在最右边方框中,展示漏洞污点传播流程图,类似于Fortify的Diagram功能,有助于审计人员识别过滤函数,判断是否存在绕过漏洞的可能性。用户可以保存扫描结果,以便下次重新打开。
另一种使用方式是通过Web界面进行代码扫描。用户点击桌面快捷方式“Checkmarx Portal”,登录Web界面。在“仪表盘”下查看先前使用“Checkmarx Audit”进行的扫描结果,并点击“新建项目”按钮。上传Java源码压缩包时,注意部分版本可能有文件大小限制,可能需要使用CxZip utility进行处理。计算行数以预估审计工作量,之后继续完成项目创建。扫描过程完成后,用户可以看到项目整体漏洞分布情况,点击“打开扫描总结”和“打开察看器”进行详细漏洞查看。点击右下角长方框中的文件路径,可以直接查看Java代码,Checkmarx提供代码高亮显示功能。Checkmarx提供了一个功能,以红色方框标记各种Web漏洞触发流程的交集点,即最佳修复点,简化了修复过程。生成报告时,用户可以手动选择需要报告体现的各种漏洞类型,点击“生成报告”按钮生成最终报告,与Fortify的报告类似,用户需要自行编写代码审计报告。
总之,Checkmarx提供了一套全面的代码审计解决方案,其安装和使用流程相对复杂,需要用户具备一定的系统配置和管理知识。通过客户端和Web界面的不同方式,用户可以根据需求灵活选择进行代码扫描和漏洞分析。在实际操作中,用户应仔细阅读使用说明书,以确保最大程度地利用Checkmarx的工具功能,提高代码审计的效率和准确性。
keil5程序如何生成主程序流程图以及各子程序流程图?
你好!Keil5本身并不提供直接生成流程图的功能,但可以使用一些工具来生成流程图。
下面介绍一些生成Keil5程序流程图和子程序流程图的方法:
使用Doxygen工具
Doxygen是一种自动化文档生成工具,它可以自动分析源代码并生成各种文档,包括流程图。在Keil5中,可以将程序文件导出为一个文件夹,然后使用Doxygen对该文件夹进行分析,生成程序流程图和子程序流程图。具体使用方法可以参考Doxygen的官方文档。
使用GraphViz工具
GraphViz是一种开源的图形可视化工具,它可以生成各种流程图、状态图等。在Keil5中,可以将程序文件导出为一个.dot文件,然后使用GraphViz将该文件转换成流程图。具体使用方法可以参考GraphViz的官方文档。
使用Cscope工具
Cscope是一种代码浏览器,它可以方便地查找函数、变量、宏等。在Keil5中,可以使用Cscope查找程序中的函数和调用关系,然后手动绘制流程图和子程序流程图。
Excalidraw, 一款超赞的开源白板工具
我要向大家推荐一款极具潜力的开源工具——Excalidraw,它不仅能满足你的白板、思维导图、原型设计和流程图绘制需求,而且由于其强大的定制能力,你还可以根据自己的喜好进行深度开发。这款工具目前基于Vite、React、TypeScript等技术栈构建,开源项目在GitHub上得到了k+的星标支持,可见其受欢迎程度。 尽管Excalidraw的界面设计简洁,但功能强大,我曾用它创造出精美的架构图,如Dooring的架构图。它不仅适用于业务流程和设计思路的展现,还能扩展到更多的创新应用场景,我在技术文章中的架构图和流程图几乎都由它绘制,甚至有时用于产品草图设计,操作起来非常便捷。 对于技术爱好者,关注的是如何利用它进行二次开发。首先,你可以在自己的项目中轻松集成,如这样一段简单的安装步骤: 预览你的定制成果,如自定义主题颜色或扩展右侧功能按钮,只需利用其提供的renderTopRightUI函数,例如: 我甚至已将自己定制的Excalidraw组件发布,包括中文支持、欢迎页面和页面控件等,你可以在此基础上进行深入定制。在线体验和源码地址如下: 在线地址 | 开源地址 这款开源工具以其灵活性和可扩展性,让你在图形创作领域拥有无限可能,不容错过。快来试试吧!可不可以将以下程序改写成流程图
您好,在很早期,BASIC还不是一种结构化的编程语言,没有诸如If...End If以及Select...Case这样的结构化语句,更没有函数和子程序的概念。而且——程序依赖行号,程序总是从行号小的地方开始执行,就算你把语句写在后面,只要它行号足够小,它也是先执行。
这导致了一件很尴尬的事情,写程序之前如果不打草稿,你想在两条语句中间插入几行,而这两条语句行号相邻,那么这变得很困难,你不得不调整后面的行号,腾出地方容纳新的语句——别着急,你的程序还有很多GOTO语句呢,它们指向了某些行号,你打算更改行号,不得不连带修改引用这些行号的GOTO语句,这听上去已经能把人晕倒了,别着急,在那个年代,甚至我们还没有一款能上下左右移动光标的全屏幕编辑器……你试试看怎么写程序。再说读程序的人,更加夸张,他看到 IF I > THEN ,然后转到行(注意没有全屏幕编辑器),看到行, IF J < THEN ,好吧,再折返回来,如果是一个多重的判断+循环,那能把人搞死。如果是你遇到这样的代码,你会怎么做?只要你不是足够的蠢,都会想到流程图。
用一系列的箭头描述GOTO的流程,再用方框表示每一个代码块做得事情,流程图可以很直观地表示代码要做什么,它就是那个“草稿”。
如果你用过VB,你就知道,if ... end if, for ... next, select ... case ... end select, function ... end function这样的层次结构把代码和代码之间的关系描述的一清二楚,配合良好的缩进,代码的可读性超过了流程图,你还想画流程图么?如果你想画流程图,就是对此一举——你画流程图需要很久的时间,而我说了,这些东西无论是编码还是作为别人阅读代码的参考都是没有价值的,最糟糕的是,代码经常变动,流程图也要跟着变,一旦两者不同步,反倒引起很多混淆,谁来维护流程图,谁来裁定流程图和代码的不一致,是编码的错误还是流程图的错误,流程图用什么工具维护,产生的文件如何随项目源代码组织?
我们从一个特别的视角来看结构化编程和非结构化编程吧,非结构化编程,我们的代码是一维的,线性的,代码一行一行写下去,虽然GOTO可以改变代码的执行方向,但是这些高层次的结构信息在代码层面是无法体现的。
在结构化编程的时代,我们不需要流程图了,因为流程图包含的信息在代码中已经反映了出来。但是新的问题来了,程序被划分成了很多函数,我们从一个函数调用另一个函数。那么当我们有了很多函数,新的麻烦出现了,我们发现一个大程序的一个函数很好,我们想在另一个程序中利用,于是我们把这个函数代码拷贝了出来,放入新的程序——程序并不能工作,为什么呢?很简单,这个函数中调用了另一个函数,显然这个函数仅仅存在在原来的程序中,好吧,我们在那个程序中搜索了一番,然后把那个函数拷贝了出来,又放入新的程序,程序还是不能运行!你猜到了,这个函数又调用了另一个函数,好吧,忙活了半天,眼看搞好了,突然,你发现了一个大灾难!什么灾难呢,你拷贝的第个函数的函数名和你新程序中一个已经存在的函数的函数名相同,你必须修改其中的一个,而这种修改将会导致调用函数名的地方全部都要修改。于是又得想办法了,我们需要一个调用关系图,或者叫程序模块框图。
到了面向对象的时代,这个问题有了新的解决方式,我们可以用类将功能相关的方法和用到的数据加以组织,面向对象的类的组合、继承和聚合表达了他们之间的依赖关系,又有原本设计层面的信息被包含在代码中了,观察面向对象的程序的代码,不需要什么程序模块框图,也能很清晰看懂程序的组织结构。
还是刚才的视角,我们说结构化代码是二维的,一个维度是代码本身,一个维度则表明了它们的流程和层次,但是模块的依赖关系还是无法体现出来的,那么面向对象就是三维的,第三个维度,模块的依赖和组织被用代码表示出来了。
多说几句,其实还有第四个维度、第五个维度……很多使用VB的程序员也就看到第三个维度了,那么第四个维度是什么呢,对依赖关系和代码流程的复用——一个VB程序员明白如何将“公共”的代码提取成一个方法,而一个方法/函数本身做什么事情是确定无疑的。那么当我们的需求和函数的实现略有差异怎么办呢,一个典型的VB程序员的做法是,给这个函数增加一个参数,把两个不同需求作为这个参数,在函数里面判断。这意味着调用这个函数的用户,必须懂得修改这个函数的方法,并且越俎代庖代替函数的创建者修改它,还要处理现有代码对使用它的冲突。而一个C#程序员可以使用委托,使用委托使得函数编写者可以把细节的完善交给调用者,而他编写的代码只有算法的框架,细节和代码流程的分离在语言层面支持了,代码中不但包含了如何做的信息,还包含了做什么的信息——在此之前,做什么的信息是必须借助额外的文档说明的。
C#程序员也就只能看到第四个维度了,那么还有什么没有被包括进来呢?在C#程序员看来,程序是用来执行的,他们可能会编写一些小工具,把UML图转化为可以执行的程序,或者把程序转化成文档,他们可能会编写一些代码生成器产生那些冗繁而雷同的程序。前面我们说了,程序包含了原本是文档或者图中的信息,现在,我们可以说,既然如此,程序也可以被当作文档或者数据来被程序处理。程序本身只描述了它要做什么,至于它应该在上下文中做出怎样的行为,由它的上下文程序根据它的判断去完善这个程序——比如说,我们用javascript实现了一个算法,我们希望这个程序需要移植到GPGPU中运行,我们不需要人工去改写,我们知道,这个在CPU上运算的算法虽然无法直接在GPU上运行,但是它包含了算法应该如何做的全部信息,我们可以在运行时解析这个程序,而不是执行它,解析的目的是为了产生一个新的程序,新的程序适合我们的上下文(GPGPU),而这种代码变换由机器而不是人去处理——原先程序需要假设它的上下文,现在这些信息也不需要了。
注意,第五个维度是一个分界线——一个程序,去处理一个程序,而不是执行它,你觉得这件事情是编译器/解释器干的呢?还是库函数,用户编写的代码干的?我不知道。我不关心。因此,代码和控制代码运行的解释器/编译器的界限模糊了,这也意味着我们没有办法说它还是某种编程语言上写的一个程序,因为这个程序也可以看做是对这种语言语法的扩展。一种语言可以包含这种语言构成的原语,这意味着什么呢?这种编程语言可以模仿任何编程语言的任何特性,事实上,你可以说它是那种语言的一种方言。
VisustinVisustin介绍
Visustin是一款强大的流程图制作软件,支持种编程语言。其独特之处在于能将源代码转换为流程图,方便开发者直观理解代码逻辑。
Visustin支持的编程语言包括ABAP, ActionScript, Ada, ASP, assembler, BASIC, Batch files, C, C++, C#, Clipper, COBOL, ColdFusion, Delphi, Fortran, Java, JavaScript, JCL, JSP, LotusScript, Matlab, MXML, Pascal, Perl, PHP, PL/I, PL/SQL, PowerBuilder PowerScript, PureBasic, Python, QuickBASIC, REALbasic, Rexx, Ruby, SAS, T-SQL, Unix shell script, VB, VBA, VBScript, VBNET, Visual FoxPro and XSLT。
这使得Visustin成为多语言开发者理想的选择,无论使用哪种编程语言,都能轻松转换为流程图,提高代码理解和维护效率。此外,Visustin的界面友好,操作简便,使得即使是编程新手也能快速上手。
综上,Visustin凭借其广泛的语言支持、直观的流程图展示以及易用性,为开发者提供了强大的代码理解工具,是提升编程效率、优化代码结构的得力助手。