블록쌓기 프로그래밍

브로클리프롭 프로그래밍하기

3. 브로클리프롭 함수 및 멀티코어 마이크로프로세서

Contents

브로클리프롭 프로그래밍 실습 세부목차


1. 브로클리프롭 시작하기

2. 프로펠러 간단한 BlocklyProp 프로그래밍

3. 브로클리프롭 함수 및 멀티코어 마이크로프로세서

4. 브로클리프롭 전자회로 실습


본 페이지의 내용은 패럴렉스(Learn.Parallax.com)사의 공식 홈페이지에서 제공되는 자료를 참고하여 작성되었습니다.


아래 세부 내용들을 살펴볼 수 있습니다.

1) 브로클리프롭(BlocklyProp)의 함수

2) 멀티 코어 마이크로컨트롤러에 대한 정보

3) 새로운 프로세서(New Processor) 블록


그림입니다. 원본 그림의 이름: mem000005c41050.png 원본 그림의 크기: 가로 491pixel, 세로 399pixel 사진 찍은 날짜: 2017년 01월 19일 오후 7:55


무엇에 관한 내용인가요?

프로펠러 마이크로 컨트롤러에서 가능한 기능입니다. 각각 자신의 작은 프로그램을 실행할 수있는 별개의 8개 프로세싱 코어("cogs"라고도 함)를 가지고 있습니다. 향후 브로클리프롭(BlocklyProp) 자습서에서 배우게 될 센서 중 상당수는 이러한 코어 중 하나 또는 둘을 사용하여 센서에서 값을 읽고, 사용자가 프로그램에서 사용할 수 있도록 준비합니다. 당신은 여분의 코어도 사용할 수 있으며 이 자습서에서는 그 방법을 보여줍니다.


필요한 하드웨어

이 교육 세트는 프로펠러(Propeller) 개발 보드, 전원 및 USB 프로그래밍 케이블만 필요합니다. 교육내용은 브로클리프롭(BlocklyProp) Starter Kit에 포함된 Propeller Activity Board WX 용으로 작성되었지만 Hackable Electronic Badges도 정상적으로 작동합니다.


시작하기 전에

아래의 두 가지 자습서를 먼저 완료하십시오. 그러면 브로클리프롭(BlocklyProp) 함수 및 멀티코어(Multcore) 자습서를 이해할 수 있는 확실한 기초입니다.


- 브로클리프롭(BlocklyProp) 시작하기

- 프로펠러 간단한 BlocklyProp 프로그래밍


소개한 두가지 내용에 대한 학습이 끝난 후 !


다음 학습을 끝내면 자신 만의 맞춤 함수로 더 강력하고 컴팩트한 브로클리(Blockly) 프로그램을 만들고 멀티 코어 프로펠러 프로세서에서 이러한 기능을 실행할 준비가 됩니다. 당신은 또한 다른 브로클리프롭(BlocklyProp) 블록이 프로펠러의 다중 코어(예 : 다양한 센서용 블록)를 사용하여 프로젝트를 빌드할 때 여러 가지 센서를 위한 용도를 이해하게 되고, 이런 것들이 여러분의 나머지 프로젝트를 완성하는데 도움이 될 것입니다.


1) 브로클리프롭(BlocklyProp)의 함수


함수는 특정 작업을 완료하기 위해 함께 모아 놓은 코드 블록입니다. 하나의 블록과 같이 함수를 생각하고, 여러 번 반복해서 사용할 수 있습니다. 다른 블록과 마찬가지로 프로그램의 원하는 위치에 원하는 만큼 여러 번 넣을 수 있습니다.


브로클리프롭(BlocklyProp)을 사용하면 함수를 만드는 것이 쉽습니다. 아래 예를 살펴보십시오.


그림입니다. 원본 그림의 이름: mem000005c40001.png 원본 그림의 크기: 가로 590pixel, 세로 350pixel 사진 찍은 날짜: 2017년 01월 18일 오후 8:36



함수를 작성하려면 블록 그룹을 define 함수 블록으로 묶은 다음 이름을 지정하십시오. 그 후, FUNCTION 메뉴에서 당신의 프로그램에 사용할 이름의 새 실행 기능(run function) 블록을 볼 수 있습니다. 이 예에서 브로클리프롭(BlocklyProp) 프로그램이 "printAge"실행 기능 블록에 도달하면, 일치하는 define 함수 블록으로 점프하고 그 안에 포함된 코드를 실행합니다. 완료되면 되돌아가서 프로그램이 계속됩니다.


프로그램의 여러 다른 위치에서 동일한 코드를 반복해야 하는 경우 함수가 편리합니다. 반복적으로 여러 블록을 사용하는 대신 이러한 블록을 함수에 배치할 수 있습니다. 그런 다음 프로그램에서 필요할 때마다 하나의 실행 기능 블록만 추가해서 사용하십시오.


- 브로클리프롭(BlocklyProp) 클라이언트가 실행 중이고 보드가 연결되어 있고 전원이 켜져있는 상태에서 브로클리프롭(BlocklyProp)에 로그인했는지 확인하십시오.

- 위에 표시된 블록을 사용하여 새 프로젝트를 만들고 실행하십시오.

- 터미널이 열리면 터미널을 클릭하고 나이를 입력하십시오. 터미널에서 비슷한 것을 보아야합니다.

그림입니다. 원본 그림의 이름: mem000005c40002.png 원본 그림의 크기: 가로 236pixel, 세로 197pixel 사진 찍은 날짜: 2017년 01월 18일 오후 9:40



시도해 보세요!

- 새 꼬임과 새로운 함수를 추가하여, 사용자 나이가 100세가 되려면 몇 년이 걸릴지 계산해 봅시다.

- 프로젝트를 저장한 다음 새 이름으로 다시 저장하십시오.

- 전체 printAge 함수를 복제하고 이름을 oldAge로 바꿉니다.

- 원래 printAge 함수가 끝나면 countdown 이라는 새 변수를 설정하고 100에서 yourAge를 뺀 값과 같게 만듭니다.

- 아래 그림과 같이 텍스트와 카운트다운 변수를 사용하도록 oldAge 함수 블록을 업데이트하십시오.

- 메인 프로그램의 끝에 oldAge 에 대한 실행 기능 블록 추가하십시오.

- 저장하고 프로그램을 실행하십시오. 언제 100 살이 됩니까?

그림입니다. 원본 그림의 이름: mem000005c40003.png 원본 그림의 크기: 가로 537pixel, 세로 553pixel 사진 찍은 날짜: 2017년 01월 18일 오후 9:34


당신은 알고 있었습니까?

Blockly 변수는 글로벌 변수입니다. 변수 항목 카운트다운run function "printAge" 블록 내에서 바로 정의되었음을 확인했습니까? 그게 oldAge 함수 안에서 사용되는 것을 막지는 못했습니다. 브로클리프롭(BlocklyProp)에서 모든 변수는 프로그램의 다른 부분에서 사용할 수 있습니다. 어떤 프로그래밍 언어에서는 항상 그렇지 않습니다. C를 공부하면 배우게 됩니다.


 

당신 차례 !

- 참가자가 태어난 연도를 파악하는 새로운 함수를 추가하고, 나이를 인쇄해 보십시오.

- 참가자가 100 세가 될 연도를 파악하는 새로운 함수를 추가하고, 마지막에 인쇄하십시오.


2) 멀티 코어 마이크로컨트롤러에 대한 정보


이전 학습에서 작성한 함수는 run 함수 블록에 의해 호출되었을 때만 실행되었습니다. 그러나 프로그램의 나머지 부분이 계속 진행되는 동안 백그라운드에서 계속해서 자체적으로 실행하는 기능이 필요한 상황이 있습니다. 이러한 백그라운드 기능은 버튼 누르기 또는 센서 읽기에서 계속 감시할 수 있습니다. 액티비티 보드 (원래 또는 WX 버전)의 프로펠러 칩은 멀티 코어 마이크로 컨트롤러이기 때문에 한 번에 여러 가지 작업을 쉽게 수행할 수 있습니다. 당신은 다음 수업에서 그것을 시도할 것입니다. 하지만 먼저 멀티 코어를 직접 사용하기 전에 멀티 코어를 시각화해 봅시다.


 

마이크로 컨트롤러와 멀티 코어에 대한 정보

마이크로 컨트롤러는 “생각”을 실행할 작은 프로세서인 “뇌”와 실행하려는 어떤 일을 기록할 수 있는 “노트” 로서의 기억장치를 포함하는 집적회로입니다. 또한 마이크로 컨트롤러에는 조명, 스위치, 부저, 모터 및 센서와 같은 다른 장치와 전기적 신호를 교환할 수 있는 입력 / 출력 핀들, 간단히 말해서 I / O 핀들이 있습니다.

그림입니다. 원본 그림의 이름: mem000005c40004.png 원본 그림의 크기: 가로 550pixel, 세로 250pixel



싱글 코어 마이크로 컨트롤러는 내부에 단 하나의 프로세서만을 갖습니다. 우리는 싱글 코어 마이크로 컨트롤러가 여러 개의 작업을 나누어서 실행해야 할 때 멀티태스킹이라고 부릅니다. 이때 프로세서는 모든 작업이 진행되도록 하기 위하여, 각각의 작업을 잠시 동안 중단하고 다른 작업으로 전환해야 합니다.


혼자 부엌에서 요리사가 빵을 만들고, 고기를 굽고 소스를 만드는 것을 상상해보십시오. 요리사는 빵 반죽을 15 분간 반죽하고, 매분마다 작업을 멈추고 소스를 저어주고, 온도계가 120 ° F에 도달하자마자 오븐에서 로스트를 꺼내야 합니다. 어느 순간에도 셰프 (프로세서)는 단 하나의 작업만 수행할 수 있고, 동시에 세 가지 프로세스 (반죽, 저어, 로스팅)는 한 번에 모두 진행합니다.


이제 그 요리사가 된 것을 상상해보십시오. 한 번에 해야할 작업이 많을수록 모든 작업을 추적하기가 어려워지고 타이밍을 올바르게 유지하는 것이 더 어려워집니다.

그림입니다. 원본 그림의 이름: mem000005c40005.png 원본 그림의 크기: 가로 550pixel, 세로 250pixel



멀티 코어 마이크로 컨트롤러는 두 개 이상의 프로세서를 내장하고 있습니다. 그것은 각각의 작업에 각각의 프로세서로 실행하는 멀티프로세싱입니다. 이것은 또한 진정한 멀티태스킹이라고도 합니다.


빵을 만드는 것, 고기를 굽는 것 그리고 소스를 만드는 작업을 할 수 있는 3 명의 조수가 있는 주방의 주방장을 상상해보십시오. 요리사가 스토브에 보조자 한 명을 배치하여 매분마다 소스를 저어줍니다. 다른 보조원은 온도계를 주시하고 120 ° F에 도달하면 로스트를 제거합니다. 이제 요리사는 빵 반죽을 15 분 동안 반죽할 수 있습니다. 3 명의 요리사 (프로세서)는 작업 전환 중단없이 온도계가 120 ° F에 도달하는 순간을 놓치지 않고 동시에 3 가지 프로세스 (반죽, 저어, 로스팅)를 동시에 실행합니다. 더 많은 것이 필요할 때 도움을 줄 준비가 되어있는 조교가 있습니다.


여러 코어를 사용하면 한 번에 여러 작업을 보다 쉽게 수행할 수 있습니다. 특히 정확한 타이밍이 필요한 경우 더욱 그렇습니다.

그림입니다. 원본 그림의 이름: mem000005c40006.png 원본 그림의 크기: 가로 600pixel, 세로 225pixel



프로펠러 마이크로 컨트롤러에는 8 개의 코어가 있으므로 진정한 멀티태스킹이라고 하는 멀티 프로세싱을 수행할 수 있습니다. 코어는 모두 동일합니다. 그것은 32 개의 I / O 핀을 가지고 있으며 모두 동일합니다. 각 코어는 모든 I / O 핀과 함께 작동할 수 있습니다. 이것은 모든 프로펠러 코어와 I / O 핀이 수행해야 하는 모든 작업에서 동등하다는 점을 의미합니다. 각 코어에는 자체 메모리가 약간 있습니다. 각 코어는 정보를 공유할 수 있는 더 큰 주 메모리 (큰 "메모장")에 차례로 액세스합니다.

그림입니다. 원본 그림의 이름: mem000005c40007.png 원본 그림의 크기: 가로 550pixel, 세로 300pixel



알아차렸나요? 이제 새로운 프로세서 블록을 사용하여 자체 Propeller 코어에서 기능을 실행 해봅시다.


3) 새로운 프로세서(New Processor) 블록


이전 페이지에서 작성한 함수는 실행 함수 블록에 의해 호출되었을 때만 실행되었습니다. 그러나 프로그램의 나머지 부분이 계속 실행되는 동안 백그라운드에서 자체적으로 계속 실행되는 기능이 필요한 상황이 있습니다. 이러한 백그라운드 기능은 버튼 누름 또는 센서 판독 값에서 계속 감시할 수 있습니다. 프로펠러 칩은 멀티 코어 마이크로 컨트롤러이기 때문에 한 번에 여러 가지 작업을 쉽게 수행할 수 있습니다.


프로펠러 멀티 코어 및 브로클리프롭(BlocklyProp)

브로클리프롭(BlocklyProp)을 사용하면 CONTROL> new processor 블록을 통해 자체 코어에서 기능을 실행할 수 있으며 나머지 프로그램은 동시에 실행됩니다. 


아래 예제는 프로그램이 실행된 시간을 추적하기 위해 새로운 프로세서를 시작합니다. 별도의 프로세서가 실행 시간을 추적하는데 사용되기 때문에, 프로그램이 실행된 시간을 표시하기 전에 사용자가 키를 누를 때까지 메인 프로그램은 중지하거나 기다릴 수 있습니다.


- 아래 표시된 블록을 사용하여 새 프로젝트를 만들고 실행하십시오.

그림입니다. 원본 그림의 이름: mem000005c40008.png 원본 그림의 크기: 가로 555pixel, 세로 485pixel 사진 찍은 날짜: 2017년 06월 12일 오후 6:05


- 터미널이 열리면 아무 키나 클릭하십시오. 터미널에서 비슷한 것을 보아야 합니다.

그림입니다. 원본 그림의 이름: mem000005c40009.png 원본 그림의 크기: 가로 436pixel, 세로 188pixel 사진 찍은 날짜: 2017년 01월 18일 오후 9:57


어떻게 동작 하는가?

새로운 프로세서 블록은 프로세서에서 타이머라고 이름 붙여진 함수를 실행합니다. 메인 프로그램의 코드 실행이 계속되면 함수도 계속 repeat forever 루프를 실행합니다.


함수 타이머가 계속 실행되면 counter 라는 변수가 1 초마다 증가합니다. 프로그램의 나머지 부분은 단순히 키를 누를 때까지 기다리고, 프로그램이 몇 초동안 실행되었는지와 같은 값을 counter 에 표시합니다.


시도해 보세요!

다음에 만들 프로그램은 기본적인 시계입니다. 새로운 프로세서를 사용하여 시간을 추적합니다. 아무 키나 누르면 시간이 터미널에 표시됩니다.


- 새 프로젝트를 만들고 아래 프로그램을 작성하십시오.

- 프로그램 상단에서 변수 "시간" 및 "분"을 현지 시간으로 설정하는 숫자 값 블록을 변경하십시오.


그림입니다. 원본 그림의 이름: mem000005c4000a.png 원본 그림의 크기: 가로 530pixel, 세로 737pixel 사진 찍은 날짜: 2017년 01월 18일 오후 10:30


- 프로그램을 RAM에 로드하십시오.

- 터미널이 열리면 아무 키나 눌러 시간을 표시한 다음 잠시 기다렸다가 다시 누릅니다. 아래 이미지와 유사해야 합니다.

그림입니다. 원본 그림의 이름: mem000005c4000b.png 원본 그림의 크기: 가로 196pixel, 세로 268pixel 사진 찍은 날짜: 2017년 01월 18일 오후 10:29


어떻게 동작하나요?

메인 프로그램은 시간변수를 초기화합니다. 그 다음 내 시계(My clock) 함수를 시작합니다. 그 다음 repeat forever loop 는 키가 눌러졌을 때 시간을 표시합니다. 이 값은 끊임없이 자체 코어를 실행하는 내 시계 기능에서 시간 정보를 가져옵니다. 이것이 다시 터미널에서 키를 누를 때 시간 값이 항상 최신 상태인 이유입니다.


내 시계 기능은 60 초마다 변수에 1을 추가합니다. 변수가 59를 지나갈 때, 시간 변수에 1을 더하고, 변수를 다시 0으로 설정합니다.


알고있나요?

변수는 여전히 글로벌! 변수 카운터가 새 프로세서에서 실행되는 함수 안에 설정되어 있더라도 메인 프로그램에서 계속 액세스할 수 있습니다. 모든 변수가 공유될 수 있는 프로펠러 중간에 있는 큰 노트 패드에 모든 변수가 적혀있기 때문에 이를 시각화할 수 있습니다.


메인에서 인쇄하십시오! 터미널 블록은 새로운 프로세서 블록과 함께 실행되는 함수에서 사용할 수 없습니다. OLED 디스플레이 모듈 블록에서도 마찬가지입니다 .


시간을 조금 추가해요! 새 프로세서에서 변수 항목의 값을 업데이트하는 경우 해당 변수의 값을 터미널에 인쇄하기 전에 메인 프로그램에 일시 중지를 추가하십시오. 그렇지 않은 경우 드물기는 하지만 메인 프로그램은 새 프로세서가 스핀 업하고 업데이트하기 전에 이전 값을 인쇄합니다.


새 프로세서가 시작되었는지 확인하기

프로펠러 마이크로 컨트롤러에는 8 개의 프로세서가 있습니다. 메인 프로그램은 그 중 하나를 사용하므로 자신의 용도에 맞게 사용할 수 있는 최대 7 개의 추가 프로세서를 남겨둡니다. 그렇지만 약간의 어려움이 있습니다. 일부 센서 및 장치용 블록은 자체 프로세서를 사용하여 작동하므로 추가 프로세서의 7 개가 거의 사용되지 않고 남겨집니다.


전역 변수 덕분에 새 프로세서가 시작되었는지 확인할 수 있습니다. 메인 프로그램 상단에 변수 항목을 추가하고 새 프로세서 기능의 시작 부분에서 변수 항목을 업데이트한 다음 다시 메인 프로그램. 변수가 변경되면 프로세서가 시작되었음을 알 수 있습니다.


당신 차례 !

- 메인 프로그램의 맨 위에 proof 라는 세 번째 세트 변수(set variable) 블록을 추가하고 이를 0으로 초기화하십시오.

- 해당 블록을 복제하고 내 시계(My Clock) 함수의 첫 번째 항목으로 repeat forever 루프 위에 추가한 다음 첨부된 값을 1로 변경합니다.

- 메인 프로그램의 새 프로세서 블록과 repeat forever 블록 사이에 터미널 인쇄 텍스트 블록이 이어지는 일시 중지(pause) 1000 블록을 추가하십시오.

- 새 터미널 인쇄 숫자 블록을 구성하여 proof 값을 인쇄하십시오.



이전 페이지로       다음 페이지로