微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > PCB设计问答 > Cadence Allegro > Skill学习(菜鸟在成长)

Skill学习(菜鸟在成长)

时间:10-02 整理:3721RD 点击:

向飘过此贴的朋友问好:

如果你和我一样还是个菜鸟,那么我们共同学习;

如果你是个高手,那么请你指教;

先贴个 Skill语法概述(转帖,原帖在二次开发论坛

本节包括特殊字符,注释,空格,圆括号和其它标记法的使用。
    a. 特殊字符
                                      SKill中的特殊字符列表 
字符                    全名          含义 
\                   反斜杠            辅助输出特殊字符 
()                 圆括号           组织数据列表和调用函数列表 
[]               中括号           数组索引,超级右中括号 
{}              大括号           使用progn时组织一系列表达式 
'                 单引号           单引号中的表达式不会被解析 
"                    双引号           字符串分界符 
,                     逗号           列表中可选的元素分界符; 在反引号作用范围内使用强制表达式解析 
;                     分号           行注释 
:                     冒号           位分隔符,范围操作 
.                     点号           getq操作 
+,–,*,/         算术运算 算术运算符; 同时"/*"和"*/"组合也用于多行注释 
!,^,&,|           逻辑运算 逻辑运算符 
<,>,=           关系运算 比较运算,赋值以及位运算 
# #           用在第一列表示信号的特别解析 
@ @           用在第一个字符表示保留字;另外在反引号作用范围内使用将强制表达式解析 
?           问号           如果是第一个字符表示关键字 
`           反引号           引号内的表达式不被解析 
%           百分号  
$           -           保留为将来使用 
        [注]:输出这些特殊字符都需要在字符前加"\"。
<!--Element not supported - Type: 8 Name: #comment-->

ding,studying

概述还没发完公司停电了,今天继续。

b. 注释
      注释有2种方法,
      1. 行注释方法, 使用分号";",注释范围在分号当前行。
      2. 多行注释,使用"/*"和"*/"对,注释范围在这这对符号内。
  c. 空格
      空格的限制比较少,只是要注意下面几个情况
      1. 函数名和跟在后面的圆括号之间不能有空格,如max(4 2)是对的,而max (4 2)则是错的;
      2. 表示负数的符号"-"和数字之间不能有空格,如-5, -(a*b)有效,而- 5,- (a*b)无效;
      3. 表示算术运算的"+ - * /"在2个数字之间的位置要对称,如a - b, a-b有效,而a -b无效。
  d. 圆括号
      圆括号在skill中用于函数调用,分隔多个表达式,控制表达式的解析顺序
      skill中调用函数有2种方式,max(a b)和(max a b)都有效。
  e. 超级右中括号
      在使用了很多"("的表达式后,可以用"]"来代表很多个用于结尾的")"。
      如f1( f2( f3( f4( x ) ) ) )等效于f1( f2( f3( f4( x ]。
  f. 反引号,逗号和逗号加@
      示例1.  y = 1
                  '(x y z)  => (x y z)  ;反引号使得表达式不被解析,所以其中的y不会被1代替
                  '(x ,y z)  => (x 1 z) ;增加一个逗号在反引号表达式中,逗号后面的表达式将被解析
      示例2.  x = 1
                y = '(a b c)
                '(,x ,y z)  => (1 (a b c) z);逗号后的表达式都被解析了
                '(,x ,@y z)  => (1 a b c z) ;",@"的作用和逗号一样,只是被解析对象是列表,且解析出来的元素代替了原来的列表
  g. 续行符"\"
      使用"\"可以让在一行的文字多行表示, 如
      string = "This is \
              a test." => "This is a test."
  h. 初始化列表的最大长度6000
      初始化列表的最大长度是6000,但是在程序运行中列表的长度无限制。 <!--Element not supported - Type: 8 Name: #comment-->

顶了,虽然我看不懂

谢谢小编帮忙转贴!
但是忘了同时提供一个link了吧
原帖在此http://www.pcbskill.com/showforum-7.aspx

www.pcbskill.com

不好意思啊!没加上。

非常感谢二次开发论坛。

开始了解下Skill Function

只是一个个的看下来什么都记不住,所以最好还是用例子不断的尝试,加深了理解,也能提起兴趣。

cons(

      g_element

      l_list

      )

      =>l_result

功能描述:把某个元素(g_element)加在一个列表(l_list)的前面,列表可以为空(nil)。

例如:

Skill > cons(1 nil)
(1)

Skill > cons('a '(b c))
(a b c)

Skill > x=nil for(i 1 100 x=cons(i x))
t
Skill > x
(100 99 98 97 96
    95 94 93 92 91
    90 89 88 87 86
    85 84 83 82 81
    80 79 78 77 76
    75 74 73 72 71
    70 69 68 67 66
    65 64 63 62 61
    60 59 58 57 56
    55 54 53 52 51
    50 49 48 47 46
    45 44 43 42 41
    40 39 38 37 36
    35 34 33 32 31
    30 29 28 27 26
    25 24 23 22 21
    20 19 18 17 16
    15 14 13 12 11
    10 9 8 7 6
    5 4 3 2 1
)

看来我比菜鸟还要菜

上面是天书。

贴一个论坛COPY来的简单程序,可以基于这个程序去理解一个函数的用法,也挺好玩的。

axlCmdRegister( "statusBar" `statusBar)
(defun statusBar () ; Create the status bar
sprintf(string, "00 percent complete")
axlMeterCreate("This is an example...please wait", "", t) ; Update the status bar
x=0
y=100000
while(x<=y percent = round((float(x)/float(y)) * 100)
sprintf(string, "%L percent complete", percent)
axlMeterUpdate(percent, string) x++ );end while ; Remove the status bar
axlMeterDestroy() );end defun statusBar The result of this routine is shown in figure

主要用到的是axlMeterCreate,axlMeterUpdate,axlMeterDestroy() 三个函数。

明天再看看这三个函数的介绍。

可以把红色部分的数字修改下 看看有什么变化?

顶更多请。 www.pcbskill.com

三个函数的说明,不知道理解正确与否,请高手指点:

axlMeterCreate(
           t_title
           t_infoString
           g_enableCancel
           [t_formname]
           [t_infoString2]
           [g_formCallback]
 )->t/nil
功能:创建进度条
参数:t_title  进度条标题
      t_infoString 任何字符(进度条更新的同时被更新)
      g_enableCancel t时允许Stop
      t_formname  窗体名称(可选)
      t_infoString2 默认“”(可选)
      g_formCallback 调用窗体名称(可选)
     
axlMeterUpdate(
           x_percentDone
           t_infoString
           (t_infoStr2)
 ) ->t/nil
 功能:更新进度条或者文字信息
 参数:x_percentDone 进度,百分之 0-100(整数)
       t_infoString  更新进度条文字信息行。nil 保持原样;““清空
       t_infoStr2    (可选)第二行文字信息

axlMeterDestroy(
            )  -> t/nil
功能:结束进度条
 
     

再贴个小程序,试试弹出窗体的函数

procedure( tr_Example_1()

prog( ()                     

;打印一串字符

printf("Let's go today.\n")

;弹出一个对话框

axlUIConfirm("Hello, SKILL...\n")

return(t)

))

然后在SKILL解释器界面下加载SKILL文件如下:
load("C:/test.il") 或者 load("C:\\test.il")
接下来运行 tr_Example_1() , 回车,看看结果吧。

看有窗体弹出吗?

prog( ()                     

;打印一串字符

printf("Let's go today.\n")

;弹出一个对话框

axlUIConfirm("Hello, SKILL...\n")

return(t)

))

然后在SKILL解释器界面下加载SKILL文件如下:
load("C:/test.il") 或者 load("C:\\test.il")
接下来运行 tr_Example_1() , 回车,看看结果吧。

看有窗体弹出吗?

我12楼的问题 没有朋友尝试过吗?

昨天在看FORM的内容,能出现一个界面着实令人兴奋啊。

例子:Example.form(简单的几段文字已经勾勒出我们想要的界面)
   
    FILE_TYPE=FORM_DEFN VERSION=2
    FORM
    FIXED
    ORT 26 20
   
    HEADER "FINDER..."
    TILE
    TEXT "COMPONENT LIST"
    TLOC 1 1
    FSIZE 25 3
    ENDTEXT
   
    FIELD laced_List
    FLOC 1 3
    LIST "" 24 16
    OPTION sort
    ENDFIELD
    FIELD done
    FLOC 9 33
    MENUBUTTON "  OK  " 10 3
    ENDFIELD
    ENDTILE
    ENDFORM
   
3、测试Form的方法
    Form测试接口函数axlFormTest(s_formPath)
   
    示例:
        axlFormTest("C:\\Example.form")
   
    功能:
        利用这个函数可以检查Form文件的语法以及Form的显示效果, 编辑界面时不断使用,使你的界面更加漂亮
        
    Tips:
        A、Allegro所有的Form文件都放在Setup - User references...菜单,选择UI_Path列别中的formpath。
           查看Allegro所有界面文件,很好的界面重用资源
           
        B、将自定义的Form文件放在formpath下可以不用写绝对路径调用,不信试试
<!--Element not supported - Type: 8 Name: #comment-->

二次开发论坛(PCB自动化设计技术共享平台) www.pcbskill.com


1、SKILL语言学习

2、Allegro SKILL学习

3、Allegro知识和SKILL应用

4、Layout知识和流程自动化设计

5、工具和实用代码需求及发布区


http://www.pcbskill.com

非常感谢您对skill事业做出得伟大贡献

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top