반응형

QuickMenu:

1. 현재 날짜 시간 정보 얻기

2. 시작 시간과 종료 시간 비교하기

3. 현재 Allegro PCB가 설치되어 있는 경로 불러오기 (설치된 경로임!)

4. 현재 작업중인 파일 경로 불러오기 (예, 지금 작업하는 .brd를 어느 경로에서 실행중인지)

5. 현재 작업중인 경로를 바꿔주는 함수

6. Windows OS에게 명령 내리기 함수

 

 

1. 현재 날짜 시간 정보 얻기

결과

2. 시작 시간과 종료 시간 비교하기

  (테스트 start라는 변수에 53분, finish 변수에 55분 결과로 차이가 초(sec)단위로 나옴)

3. 현재 Allegro PCB가 설치되어 있는 경로 불러오기 (설치된 경로임!)

(특이한 점은 \가 2개씩 있다는거 유의)

4. 현재 작업중인 파일 경로 불러오기 (예, 지금 작업하는 .brd를 어느 경로에서 실행중인지)

 

5. 현재 작업중인 경로를 바꿔주는 함수

   인자가 없으면 환경변수의 HOME디렉터리로 이동.

   인자가 있으면 문자열 형태 " "로 path를 넣어줌.

현재 디렉터리 확인 후, changeWorkingDir() 인자없이 넣어보았다.

그랬더니 HOME 디렉터리로 이동함.

그리고 다시 경로를 넣어서 changeWorkingDir("경로")을 하니 변경된것을 확인할 수 있음.

 

6. Windows OS에게 명령 내리기 함수

   sh("실행 파일명") 

   시스템 환경변수로 저장된 프로그램만 실행이 될 것이다.

cadence Tool실행해보기
padstack 실행됨.
pspice 실행됨.

   다른 툴 실행시켜보기.

시스템변수의 PuTTY 확인.

 

 

 

(참고) 현재 사용하고 있는 버전 정보 얻기.

흠.... 그러나,,,,  버전 정보가 나오지 않는다..

옛 버전만 가능한듯 하다...  이건 사용하지 말길..

 

반응형
반응형

1. 파일 쓰기 outfile()

 

OS에게 명령을 내려 파일을 쓰게 할 수 있다.

print() 함수와 println() 함수는 기본적으로 모니터에 값을 출력하는 명령이지만, outfile()함수를 이용하면 출력 대상을 파일로 바꿀 수 있다. 이 두 함수는 2번째 옵션 인자로 포트 정보를 갖고있는 객체를 받는다.

1. outfile() 으로 파일을 생성함.

2. myPort가 그 파일에 대한 포트 정보를 갖고 있음

3. println( 출력값 myPort )  <= 여기서 2번째 인자로 myPort가 그 파일에 대한 포트를 열어줌.

4. close(myPort)  다 사용한 포트는 닫아줌.

결과. 현재경로에 해당 txt파일이 생성됨.

2. 파일 쓰기 옵션 (덮어쓰지 말고 뒤에 추가하기), outfile( 값 "a" )

 

1~5까지 쓰고 뒤에 16~20까지 쓰고 싶지만, 아래와 같이하면 안된다.

덮어 씌워지는 케이스, 

위에 함수가 실행되고 아래 함수가 실행되면, 마지막으로 실행된 파일 쓰기만 남게 된다.

결과

고로 아래와 같이 옵션인자로 "a" 를 outfile()함수의 2번째 인자로 넣어야 한다. append의 약자로 덧붙이다 이다.

그럼 아래와 같이 1~5뒤에 16~20이 이어서 출력된다.

결과

3. 포맷이 정해져있는 파일 쓰기

결과

 

4. 파일 읽고 프린트 하기.

위에서 만든 text파일(3번) 을 불러와서 인터프리터에서 출력한다.

결과

 

반응형
반응형

1.  for문

    c언어와 동일하나 구분자가 space다.

결과
제곱근 결과

2.  foreach문

    리스트에 들어있는 변수를 for문과 결합하여 여러번 비교할때 사용,

   파이썬과 비슷.

결과

 

*(추가) foreach문은 2개의 list도 한번에 리턴이 가능하다.

결과

   (단, 반복의 횟수는 두 list중 갯수가 적은 것이 기준이 된다.)

3개 이상(여러개)도 가능

결과

 

 

3. while문

100까지 반복

반응형
반응형

C언어 비슷한 논리문을 갖는다.

예시

if문 중복사용 (겹치기)

 

그러나 SKILL에서는 C언어와 다르게 when()문과 unless()문이 있다.

(함수가 정상적으로 실행되었으면 t를 반환한다)

when문 조건이 맞을 때

결과 출력후 t반환

when문 조건이 틀릴 때

t만 반환

unless문 조건이 틀릴 때

조건이 틀리니 hello world가 출력됨.

unless문 조건이 맞을 때

결과 t만 반환

 

Case문, 하나씩 비교해보면서 맞는 부분이 실행하고 t를 리턴하며 종료함.

alphabet = "a" 일때

alphabet = "b" 일때

alphabet = "c" 일때

alphabet = "d" 일때

해당 조건이 맞을때 print문이 출력되고 ++로 해당 변수가 증가함.

그외 조건이 맞지 않을때는 "this is not alphabet"이 실행되고 종료함.

반응형
반응형

1. { } 와 let() 의 차이

 

사용자정의 함수를 만들기전에 { } 와 let() 함수 사용법을 알아야 한다.

두개의 공통점은 1개의 값으로 리턴값이 나온다는 것이다.

그러나 그 리턴값을 } 또는 ) 바로 앞의 값이 계산되어 나온다는 것이다.

아래 예제를 보면 abs( x2 - x1 ) 닫는 괄호 앞에 있으므로 계산되어 나오는 것이다.

결과는 PCB Editor에서 skill load() 로 작성한 스크립트를 출력할 것이다.

Command> skill load("내가만든파일.il") 하면 print내 값이 출력될 것이다.

결과출력

 

let() 함수 사용하기.

지역변수가 필요할때는 let함수를 이용한다.

let( (지역변수명) ) 을 입력하면 된다.

350 - 300 = 50 결과.

지역변수가 없더라도 반드시 let( (공백) ) 으로 둬야한다.

 

 

 

2. 사용자정의 함수만들기

 

위 예제는 delta_x() 라는 사용자정의 함수를 만들고, 그 함수를 사용하는 방법.

결과 실행

 

 

1개의 리스트 변수를 받는 사용자정의 함수 선언

my_list의 값을 바꿔가면서 결과를 출력한다.

띄어쓰기 구분이 안되어 이어서 출력되었다.

 

* 두점 사이 거리를 구하는 함수를 만들어 보았다.

  두 좌표점을 주면 거리를 계산해서 리턴하는 함수이다.

결과값으로 실수형태로 잘 나왔다.

결과값

좌표값을 바꾸면서 함수를 호출해본다.

실행 결과

 

반응형
반응형

리스트를 활용하고 내장된 함수를 이용하여 기본적인 점, 선, 사각박스를 만든다.

 

1. 점(Point) 표현하기.

 

아래와 같이 (300, 400) 포인트를 아주 쉬운 방법으로 좌표값을 저장 하고자 할때, 콜론(:) 을 이용하여 해당 좌표의 리스트를 만드는 방법이 있다. 또한 nth() 함수를 이용하여 x좌표값, y좌표값만 따로 추출 할 수도 있다.

x=300 y=400 좌표

2. 선(line) 및 박스(Box) 표현하기.

 

아래와 같이 (10,50)과 (70,0) 두 좌표만 알아도, Box를 그리거나 이 두지점을 이으면 선분을 만들 수 있다. 두 점간 거리는 피타고라스식을 이용하면 쉽게 구할 수 있고, 해당 박스의 좌표점을 쉽게 인덱싱 할 수 있는 내장 함수들이 지원된다.

두 좌표점과 그 좌표의 값들 인덱싱 내장 함수

 

반응형
반응형

 SKILL문법 List. 파이썬을 써본사람은 알겠지만, List는 여러 index를 입맛에 맞게 통제할 때 좋다.

SKILL에서 리스트는 소괄호로 표시된다. -> ( ) 

 

1. 리스트 만들기.

type( )함수로 해당변수를 찍어보면 list임을 확인할 수 있다.

delimeter(구분자)로는 공백도 되고 쉼표도 된다.

'( ) 는 내부에 연산자가 들어갈 수 없음

list( )는 내부에 연산자를 넣을 수 있음

 

    1-1. 리스트 내 인자 인덱싱(indexing)하기

리스트 내에 있는 값을 적절히 뽑아서 활용해야 한다. 인덱싱 하는방법으로는

nthelem( ) 함수를 쓴다.

변수 선언

* 파이썬과 다르게 0번이 아니라 1번부터 인덱싱을 시작한다.

* 파이썬은 List를 벗어나면 에러를 띄우지만, SKILL은 nil이 출력된다.

 

 

 

2. 리스트 줄 표시(line display) 내장 변수 _itemsperline

Default로 list를 찍어보면, 아래와 같이 한 라인에 표시하는 List 갯수를 제한해 놓았다.

Display방식만 그렇다는 것이다. 데이터가 바뀌거나 하지는 않는다.

아래에서 numlist 변수 내 1 ~ 9개 총 9개의 index가 들어있다.

1~9 리스트 출력

_itemsperline 내장된 변수에 값을 집어넣으면 딱 그에 맞는 List가 화면에 보여진다.

아래 예시는 _itemsperline값으로 2와  10을 넣었을 때, list가 어떻게 표시되는지에 대한 예시.

 

 

 

3. list() 함수 사용하기

   

    3-1. 리스트 만드는 방법중, list() 함수와 '( ) 방법의 차이

1.  list()함수로 만들면 리스트내 변수 속성이 그대로 따라간다.

2.  '( ) 으로 만들면 해당 변수 이름을 떠나 symbol type 으로 저장된다.

 

 

 

 

4. cons() 함수 사용하여 List내 인덱스 통제하기

몇가지  Test.

referenceList라는 리스트값을 지닌 변수를 기준으로, 아래와 같이 value(값), valueList(값이 들어있는 리스트), strList(문자열이 들어있는 리스트)를 추가하여 resultList에 대입해보았다.

변수,리스트 선언

 

 

5. reverse( 리스트변수 ),  값의 순서를 뒤집기.

아래를 보면 리스트 인덱스 순서가 뒤바뀐것을 볼 수 있다.

 

6. append( 리스트변수, 리스트변수 ), 두개의 리스트를 합치기

변수값 선언

결과 확인

오류 발생 케이스

1.  2번째 인자로 반드시 list를 넣어야 한다.

2.  1번째 인자로 반드시 list를 넣어야 한다.

3.  인자로는 반드시 2개만 넣어야 한다.

 

 

7. cons() 함수와 append()함수 테스트

 

 

** 리스트 함수 사용을 위한 인덱싱 함수들

리스트 선언, car, cdr 테스트

car cdr을 활용한 box좌표 뽑기

https://ansan-survivor.tistory.com/158?category=390224

 

[Cadence SKILL] SKILL 언어 point(점), line(선), Box(사각박스) 만들기

리스트를 활용하고 내장된 함수를 이용하여 기본적인 점, 선, 사각박스를 만든다. 1. 점(Point) 표현하기. 아래와 같이 (300, 400) 포인트를 아주 쉬운 방법으로 좌표값을 저장 하고자 할때, 콜론(:) 을

ansan-survivor.tistory.com

1번 index 출력, index 초과시 nil
member, lengh함수 Test
홀수 짝수 필터링 함수

8. 문장 String을 단어 String List로 쪼개기

단 여기서 쪼개서 나온 모든 인자는 List의 인덱스 형태로 나오게 된다.

결과

9. String으로 쪼개진 이 단어중 숫자만 골라서 연산하기.

  먼저 100과 200 String을 뽑아낸다.

" " 가 있으므로 이 결과값은 String이다.

String끼리는 서로 연산이 불가능하다.

고로 아래와 같이 evalstring() 함수를 이용해 숫자로 만드는 과정을 거친 후 계산한다.

결과

실수값도 잘 계산이 되는가 테스트 해보았다.

잘된다.

 

<추가> 실용적인 기능들

 - 리스트내 최대값과 최소값 뽑기

https://ansan-survivor.tistory.com/286

 

[Cadence SKILL] List에서 최대값(max)과 최소값(min)을 뽑는 방법. (LISP 문법)

Cadence SKILL은 LISP 언어를 기반으로 한다. 따라서 LISP에서 지원하는 문법들이 통한다. 어떤 리스트내에서 최대값과 최소값을 뽑는다. 최대값은 55, 최소값은 1 이므로 아래와 같이 결과가 리턴 (참��

ansan-survivor.tistory.com

 

 - 리스트 순서 정렬하는 방법 (숫자 또는 문자)

https://ansan-survivor.tistory.com/287

 

[Cadence SKILL] List를 Sorting(sort) 하기 \ 리스트 오름차순, 내림차순 정렬

Cadence SKILL user-reference에서 발췌. sort 함수 sortcar 함수 간단 테스트

ansan-survivor.tistory.com

 

 - 리스트 내부 인자 값을 바꾸는 법

https://ansan-survivor.tistory.com/288

 

[Cadence SKILL] 리스트 내 값을 변경 하기

리스트내 값을 변경하기 위한 함수로, rplaca 와 rplacd 두개의 함수가 필요하다. 테스트 결과

ansan-survivor.tistory.com

 

반응형
반응형

SKILL언어에서 띄어쓰기/공백(Space)는 중요한 요소임으로 주의한다.

 

 

1.

E- *Error* eval: not a function 오류 발생

특히 함수(function)을 만들 때 아래와 같은 사항을 주의.

공백이 있으면 안된다.
오류 테스트

 

2.

E- *Error* eval: unbound variable 오류 발생

특히 함수(function)을 만들 때 아래와 같은 사항을 주의.

 

3.

잘못된 데이터 인자를 넣을 때 발생하는 오류.

E- *Error* strcat: argument #2 should be either a string or a symbol (type template = "S") - 5

(E- *Error* 함수이름: argument #몇번째인자 should be either a string or a symbol (type template = "S") - 수정할 위치)

 

4.

이건 Allegro SKILL 인터프리터의 문제지만... 모르고 있으면 뒤통수 맞기 쉽상이다..

set telskill로 만든 창 크기가 영향이 있다.. (해상도 작은 사람은 답이 없다 ㅠㅠ)

아래 정확히 t값을 리턴하는 작동되는 함수가 있다. 줄이 길어 함수가 옆으로 쭉 늘여져 있는데, 이를 인터프리터 창을 줄이고 실행하면 에러가 발생한다 ;;

에러발생..;; 황당하지만 모르고 왜 안되지 하며 삽질할 수도 있다...

 

 

반응형
1···56789

+ Recent posts