Arduino Portenta H7 보드에는 Cortex M7/M4 두 개의 프로세서(M7 Core는 480MHz/M4 Core는 240MHz에서 동작)가 탑재되어 있습니다. 적절히 시스템 리소스를 양쪽 Core에 분산시켜 동시에 사용 할 수 있습니다
아래 Portenta H7 Tutorial의 Dual Core 게시글을 참고하여 테스트해 보았습니다.
아래 그림은 Portenta H7의 각 Core의 기능별 블록을 보여주고 있습니다.
아래는 Dual Core의 사용법을 간략히 보여주는 이미지인데 각 Core별로 소스코드를 작성하여 업로드하여 동작시키는 구조입니다. 최신 버전의 소스코드에서는 CORE_CM7/CORE_CM4의 define이 제공되어 각 각의 소스코드를 생성하지 않고 하나의 소스에서 위 define으로 구별하여 작성하는 방법도 있습니다.
아래 테스트된 소스에서는 이 define을 사용하여 하나의 파일로 테스트 해 보았습니다.
우선 아래와 같은 소스코드를 작성합니다.
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가 깜박입니다.
'Hardware > Arduino ( AVR )' 카테고리의 다른 글
[Portenta H7] Wi-Fi Access Point로 사용하기 (0) | 2021.10.20 |
---|---|
[Portenta H7] WiFi 예제 업로드시 에러가 발생될 경우 (0) | 2021.10.19 |
[Portenta H7] LED BLINK 예제 실행하기 (0) | 2021.10.17 |
[Portenta H7] 제품 살펴보기 (0) | 2021.10.16 |
SMD NRF24L01 Wireless Module 테스트 (0) | 2021.10.06 |
댓글