본문 바로가기

개발자/Arduino

Portenta H7 Dual Core Processing

반응형

 

 

Portenta H7 Dual Core Processing 

 

이 튜토리얼에서는 두 가지 색상으로 RGB LED를 깜박이는 Portenta 보드의 서로 다른 코어에서 두 개의 클래식 Arduino 깜박임 프로그램을 동시에 실행합니다. 

 

Portenta H7 Dual Core Processing 

 

듀얼 코어 프로세싱

 

Portenta H7에는 코어라고 하는 두 개의 처리 장치가 있는 프로세서가 장착되어 있습니다. 듀얼 코어 처리는 프로세서가 두 개의 다른 코어에서 동시에 명령을 읽고 실행할 수 있는 기능입니다. 즉, 듀얼 코어 프로세서는 두 개의 애플리케이션 (이 경우 두 개의 Arduino 스케치)을 동시에 실행할 수 있습니다. 이 튜토리얼에서는 두 가지 색상으로 RGB LED를 깜박이는 Portenta 보드의 서로 다른 코어에서 두 개의 클래식 Arduino 깜박임 프로그램을 동시에 실행합니다.

 

배울 것

 

  • Portenta의 M7 및 M4 코어에서 애플리케이션을 업로드하고 실행하는 방법.
  • M7 및 M4 코어의 특성에 대해.
  • M7 코어를 통해 M4 코어를 강제 부팅하는 방법과 이것이 필요한 이유.
  • 내장 RGB LED의 색상을 제어합니다.

필수 하드웨어 및 소프트웨어

 

  • Wonders H7 보드
  • USB C 케이블 (USB A-USB C 또는 USB C-USB C)
  • Arduino IDE 1.8.10+ 또는 Arduino Pro IDE 0.0.4+  

 

Cortex® M7 및 M4

 

프로세서 코어는 보드의 기본 처리 장치 내에 있는 개별 처리 장치입니다 (프로세서 코어와 Arduino 코어를 혼동하지 마십시오.). 이러한 코어는 특정 클럭 속도로 명령을 실행하는 역할을 합니다. 온보드 Arm Cortex 프로세서는 아키텍처와 클럭 속도가 약간 다른 2 개의 코어 (Cortex® M7 및 M4)와 함께 제공됩니다. M7은 480 MHz에서 실행되며 아키텍처는 명령 및 데이터 버스를 분리하여 CPU 대기 시간을 최적화하도록 설계되었습니다. M4는 240 MHz로 실행되며 아키텍처는 ART ™ 가속기 (D1 도메인 내부 메모리에 대한 Cortex-M4 코어의 액세스를 가져오는 명령을 가속화하는 블록)를 지원합니다. M7의 클럭 속도가 높기 때문에 데이터 저장, 디버깅 또는 입력 / 출력 주변 장치 처리와 같은 복잡한 처리 작업을 M4에 비해 더 높은 효율성으로 처리하는 데 적합합니다. Portenta H7의 듀얼 코어 프로세서는 진정한 멀티 태스킹을 허용하여 다른 단일 코어 Arduino 보드와 차별화됩니다.  

 

Cortex® M7 및 M4 코어의 아키텍처.

 

M7 및 M4 Core에 액세스

 

듀얼 코어 처리 개념을 가장 잘 설명하기 위해 두 개의 개별 스케치 파일을 실행합니다. RGB LED를 다른 색상으로 깜박이는 각 코어에 하나씩. BlinkRedLed_M7.ino의 스케치는 빨간색으로 보드에 RGB LED에 내장 설정된 500 ms의 지연을 깜박입니다. BlinkGreenLed_M4.ino의 스케치 주도 RGB에서 녹색 LED를 액세스하고 200 ms의 지연을 깜박입니다. 두 코어 모두 해당 스케치 파일을 동시에 실행하고 결과적으로 녹색 및 빨간색 LED가 서로 다른 간격으로 깜박입니다. 

 

서로 다른 코어에서 두 개의 서로 다른 스케치 파일을 실행합니다.

 

1. 기본 설정

 

적절한 USB-C 케이블을 사용하여 Portenta 보드를 컴퓨터에 연결하고 Arduino IDE 또는 Arduino Pro IDE를 엽니다. 보드에서 Arduino 스케치 파일을 처음 실행하는 경우 진행하기 전에 Arduino 용 Portenta H7 설정 방법을 확인하는 것이 좋습니다. 

 

컴퓨터에 연결된 보드의 기본 설정

참고 : 튜토리얼 라이브러리가 설치되면 예제에 액세스 할 수 있습니다. 예제-> Arduino_Pro_Tutorials-> 듀얼 코어 처리 

 

2. LED 색상 설정

 

이전 튜토리얼에서 매크로 정의 LED_BUILTIN을 통해 내장 RGB LED에 액세스 하는 방법을 배웠습니다. 또한 각각 LEDR, LEDG 및 LEDB 매크로 정의를 통해 별개의 적색, 녹색 및 청색 LED를 제어할 수 있습니다.

 

다른 Arduino 보드와 달리 Portenta H7의 내장 RGB led 핀은 LED가 켜지도록 접지로 당겨야 합니다. 즉, 전압 레벨이 LOW이면 LED가 켜지고 전압 레벨이 HIGH이면 LED가 꺼집니다.

 

다음 스케치는 M7 코어에 의해 제어되는 200ms 간격으로 빨간색 LED를 깜박입니다. 스케치를 BlinkRedLed_M7로 저장하고 스케치 파일을 컴파일합니다. 

 

// the setup function runs once when you press reset or power the board
void setup() {
    // initialize digital pin LEDR as an output.
    pinMode(LEDR, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
   digitalWrite(LEDR, LOW); // turn the red LED on (LOW is the voltage level)
   delay(200); // wait for 200 milliseconds
   digitalWrite(LEDR, HIGH); // turn the LED off by making the voltage HIGH
   delay(200); // wait for 200 milliseconds
}

 

 

 

3. M7 Core에 스케치 업로드

 

보드 메뉴에서 Arduino Portenta H7 (M7코어)을 선택하고 Portenta가 연결된 포트 (예 : /dev/cu.usbmodem141101)를 선택합니다. BlinkRedLed_M7.ino 스케치를 업로드합니다. 이렇게 하면 미리 스케치가 자동으로 컴파일됩니다. 스케치가 업로드되면 보드의 RGB LED가 빨간색으로 깜박이기 시작합니다. 

 

BlinkRedLed_M7 스케치를 M7 코어에 업로드

 

4. LED가 녹색으로 깜박이기

 

보드의 RGB LED가 녹색으로 깜박이는 또 다른 스케치를 작성해 보겠습니다. 새 스케치 파일을 열고 이름을 BlinkGreenLed_M4.ino로 지정합니다. LEDG500 ms의 지연 시간으로 변수로 표시된 LED 녹색으로 깜박이는 다음 프로그램을 복사하여 붙여 넣습니다. 이번에는 깜박임이 M4 코어에 의해 제어됩니다.  

 

// the setup function runs once when you press reset or power the board
void setup() {
    // initialize digital pin LEDG as an output.
    pinMode(LEDG, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
   digitalWrite(LEDG, LOW); // turn the LED on (LOW is the voltage level)
   delay(500); // wait for half a second
   digitalWrite(LEDG, HIGH); // turn the LED off by making the voltage HIGH
   delay(500); // wait for half a second
}

 

이 시점에서 스케치를 M4에 업로드하면 아무것도 변경되지 않습니다. 그 이유는 M4 코어가 자체적으로 시작되지 않기 때문입니다. M4 코어가 LED를 녹색으로 깜박이게 하려면 다음 단계가 더 필요합니다. M4를 강제로 부팅합니다.

 

5. M4 코어 강제 부팅

 

H7 보드의 부트 로더는 M7 만 자동으로 부팅되도록 구성됩니다. 그 이유는 간단한 사용 사례의 경우 M4가 필요하지 않을 수 있으므로 프로그래밍되지 않고 전원을 공급받을 필요가 없기 때문입니다. 이러한 경우 중 하나는 M7에 M4의 초기화를 자동으로 처리하는 적절한 펌웨어가 없는 경우입니다. 결과적으로 스케치를 실행할 수 있도록 M4를 강제로 부팅해야 합니다. bootM4() 보드에 전원이 공급될 때 M4를 부팅하는 특수 명령을 사용하여 M7을 통해 그렇게 할 수 있습니다. 

 

M7 및 M4 코어는 스케치가 저장된 플래시 메모리를 공유합니다.

 

M4 코어 용 코드를 플래시 메모리에 업로드하기 전에 M7 코어에서 업로드하고 실행 bootM4( )하는 BlinkRedLed_M7.ino 스케치 파일에 명령을 추가해야 합니다. BlinkRedLed_M7.ino 스케치 bootM4( )의 setup( ) 기능 내에 다음 명령을 복사하여 붙여 넣고 스케치를 M7에 다시 한번 업로드합니다. 

 

// the setup function runs once when you press reset or power the board
void setup() {
    // initialize digital pin LED_BUILTIN as an output.
   bootM4();
   pinMode(LEDR, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
   digitalWrite(LEDR, LOW); // turn the LED on (LOW is the voltage level)
   delay(200); // wait for 200 miliseconds
   digitalWrite(LEDR, HIGH); // turn the LED off by making the voltage HIGH
   delay(200); // wait for 200 miliseconds
}

 

이 스케치가 M7 코어에서 실행되면 M4 코어를 부팅하고 해당 스케치를 실행할 수 있습니다.

 

6. M4 Core에 업로드

 

마지막 단계는 M4를 위해 준비한 스케치를 업로드하는 것입니다. 이제 IDE 메뉴에서 Tools> Boards를 열고 보드에서 Arduino Portenta H7 (M4 코어)을 선택합니다. BlinkGreenLed_M4.ino를 보드에 업로드합니다. M7이 직렬 통신을 처리하므로 포트 메뉴에 M4에 대한 별도의 직렬 포트가 나열되어 있지 않습니다. 현재 빨간색으로 깜박이는 RGB LED는 500ms 간격으로 동시에 녹색으로 깜박이기 시작합니다. 깜박임이 겹치면 빨간색과 녹색 표시등의 혼합이 노란색으로 인식됩니다. 

 

BlinkGreenLed_M4를 M4 코어에 업로드

 

하나의 스케치로 두 코어 프로그래밍

 

지금까지 별도의 스케치 파일을 사용하여 다양한 코어를 프로그래밍했습니다. 전 처리기 지시문 '#ifdef'를 활용하여이 두 스케치 파일을 하나로 결합할 수도 있습니다. 이렇게 하면 동일한 프로그램을 사용하여 두 코어에 대해 서로 다른 동작을 프로그래밍할 수 있습니다.

 

이 방법을 사용하여 더 큰 응용 프로그램을 프로그래밍하면 만들어야 하는 프로그램의 난이도가 높아질 수 있습니다.

 

이제 임의의 순서로 두 LED를 모두 깜박이는 새 스케치를 만들어 보겠습니다. 이렇게 하면 매우 간단한 프로그램을 사용하여 두 LED에 대해 서로 다른 동작을 명확하게 볼 수 있습니다. 

 

1. M7 코어 설정 프로그래밍

 

새 스케치를 열고 이름을 BlinkBothCores.ino로 지정하여 시작하겠습니다. 그런 다음다음 코드 줄을 추가해 보겠습니다. 

 

int myLED;

void setup() {

   randomSeed(analogRead(0));

 #ifdef CORE_CM7  
     bootM4();  
     myLED = LEDB; // built-in blue LED
  #endif

 

#ifdef CORE_CM7와 사이의 코드 #endif는 M7 코어가 M4 코어를 부팅하여 해당 스케치를 실행할 수 있도록 만 적용되며, 코드의 해당 부분은 M7 코어가 보드의 파란색 LED를 제어할 수도 있습니다.

 

2. M4 코어 설정 프로그래밍

 

그런 다음 setup() 기능 내부뿐만 아니라 M4 코어의 녹색 LED를 올바르게 구성하려면 다음 라인을 포함해야 합니다. 

 

#ifdef CORE_CM4  
     myLED = LEDG; // built-in greeen LED
  #endif   

 

3. setup ( ) 함수 완료 및 loop ( ) 프로그래밍

 

완료하려면 setup( ) LED를 출력으로 초기화해야 합니다. 그런 다음 loop() 기능에 LED를 깜박이는 순서를 포함해야 합니다. 이렇게 하려면 바로 뒤에 다음 코드 부분을 추가합니다 #endif. 

 

pinMode(myLED, OUTPUT);
}

void loop() {
   digitalWrite(myLED, LOW); // turn the LED on 
   delay(200); 
   digitalWrite(myLED, HIGH); // turn the LED off 
   delay( rand() % 2000 + 1000); // wait for a random amount of time between 1 and 3 seconds.
} 

 

이제 스케치를 Portenta H7의 두 코어에 개별적으로 업로드할 수 있습니다. 이 스케치를 사용하면 두 코어 (M4 및 M7)를 통해 LED를 제어할 수 있으며 Portenta 보드의 파란색 및 녹색 LED가 다른 순서로 깜박이는 것을 볼 수 있습니다.

 

결론

 

이 튜토리얼은 듀얼 코어 프로세싱의 개념을 소개하고 M7 및 M4 코어를 사용하여 내장 RGB LED의 다양한 색상을 제어함으로써 개념을 설명합니다. 이 간단한 예에서는 M7 및 M4 코어에 액세스 하는 방법만 설명합니다. 다음 자습서에서는 듀얼 코어 처리의 잠재력을 활용하여 더 복잡한 작업을 수행하는 응용 프로그램을 만드는 방법을 배웁니다.  

 

문서의 출처 원문은 여기을 참고 하세요.

 

 

 

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^