본문 바로가기

[Portenta H7] Dual Core 사용하기

by rudals.kim 2021. 10. 18. 댓글 개
반응형

Arduino Portenta H7 보드에는 Cortex M7/M4 두 개의 프로세서(M7 Core는 480MHz/M4 Core는 240MHz에서 동작)가 탑재되어 있습니다. 적절히 시스템 리소스를 양쪽 Core에 분산시켜 동시에 사용 할 수 있습니다

 

아래 Portenta H7 Tutorial의 Dual Core 게시글을 참고하여 테스트해 보았습니다.

 

Dual Core Processing | Arduino Documentation | Arduino Documentation

Dual Core Processing In this tutorial you will run two classic Arduino blink programs simultaneously on different cores of the Portenta board that blinks the RGB LED in two different colours. Overview The Portenta H7 is equipped with a processor that has t

docs.arduino.cc

아래 그림은 Portenta H7의 각 Core의 기능별 블록을 보여주고 있습니다.

https://docs.arduino.cc/3d451085dcdeb4ffa1f3941f2bf2dfee/por_ard_dcp_m4_m7_architectures.svg

아래는 Dual Core의 사용법을 간략히 보여주는 이미지인데 각 Core별로 소스코드를 작성하여 업로드하여 동작시키는 구조입니다. 최신 버전의 소스코드에서는 CORE_CM7/CORE_CM4의 define이 제공되어 각 각의 소스코드를 생성하지 않고 하나의 소스에서 위 define으로 구별하여 작성하는 방법도 있습니다.

아래 테스트된 소스에서는 이 define을 사용하여 하나의 파일로 테스트 해 보았습니다.

https://docs.arduino.cc/fed27636e2dab3daa0343ddb6437b4ec/por_ard_dcp_tutorial_overview.svg

우선 아래와 같은 소스코드를 작성합니다.

int myLED;

void setup() {
  randomSeed(analogRead(0));

#if defined(CORE_CM7)
  bootM4();
  myLED = LEDB; // built-in blue LED
#elif defined(CORE_CM4)
  myLED = LEDG; // built-in green LED
#endif

  pinMode(myLED, OUTPUT);
}

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

 

소스 코드 작성이 완료되었으면 먼저 Portenta 보드의 M4 코어를 선택 후 업로드를 합니다.

정상적으로 업로드가 완료되었으면 이번에는 M7 코어를 선택 후 업로드 해 줍니다.

위 소스의 Main Core와 Sub Core의 소스가 거의 동일하며 setup 함수에서 Main Core의 define에 bootM4 함수만 다른데 이 함수는 부팅 시 Sub Core를 실행시키는 함수입니다. 따라서 위의 소스 코드는 두 개의 Core에서 개별적으로 LED를 랜덤 시간만큼의 딜레이를 가지고 on/off 시키는 동작하는 코드입니다.

 

아래는 테스트된 동영상인데 랜덤 시간에 맞춰 파란색/녹색 LED가 깜박입니다.

반응형

댓글