티스토리 뷰
임베디드 시스템과 SPI와 같은 통신 프로토콜에서 Polling은 데이터를 읽을 준비가 되었는지 등 조건이 충족되었는지 확인하기 위해 하드웨어 레지스터나 플래그를 지속적으로 확인하는 작업을 포함한다. Polling은 간단한 접근 방식이지만, 특히 리소스가 제한적이거나 단일 코어 시스템에서는 한계가 있는 것이 사실이다.
Polling과 Polling이 시스템 성능에 미치는 영향, 그리고 멀티코어 시스템이 이러한 한계를 완화하는 데 어떻게 도움이 되는지 알아보자.
- Polling in SPI and General Case
- SPI 예제에서 Polling은 "data ready" 플래그 (예: SPI_SR_RXNE)가 설정될 때까지 status register를 반복적으로 읽음으로써 데이터가 완전히 수신되었는지 확인하는 데 사용된다.
- 이 방법은 간단하지만 CPU 를 차단해 대기하는 동안 다른 작업을 사용할 수 없게 만든다. 특히 CPU의 처리 능력에 비해 SPI 통신이 느린 경우 비효율적일 수 있다.
- Limitations of Polling
- CPU Blocking
: CPU 가 다른 작업을 수행할 수 없는 상태로 계속 대기한다. 이를 흔히 "busy_wait" 라고 하며, 특히 SPI 전송이 상대적으로 느린 경우 일반적으로 비효율적이다. - Reduced Responsiveness
: Polling은 잠재적으로 중요한 다른 작업에 시간을 빼앗긴다. 실시간 시스템에서 이는 시간에 민감한 다른 이벤트 처리가 지연되는 것을 의미할 수 있다. - Power Consumption
: Busy-waiting 은 CPU 사이클을 지속적으로 사용하므로 저전력 또는 배터리로 작동하는 시스템에서는 전력 소비가 증가해 심각한 문제가 된다.
- CPU Blocking
- Alternatives to Polling
- Interrupts
: 많은 임베디드 시스템에서는 폴링 대신 인터럽트를 사용해 데이터 준비와 같은 이벤트를 처리한다. SPI peripheral에 읽을 데이터가 있으면 인터럽트를 생성해 CPU의 현재 작업을 일시적으로 일시 중지해 데이터를 처리한다. 이를 통해 CPU는 다른 작업에 집중하고 필요할 때만 SPI 이벤트에 응답할 수 있다. - Direct Memory Access (DMA)
: DMA는 CPU의 개입 없이 SPI peripheral 과 메모리 간에 데이터를 전송해 데이터를 자동으로 이동할 수 있다. 이는 CPU 부하를 크게 줄여주며 대량의 데이터를 빠르고 효율적으로 이동해야 하는 시스템에서 일반적으로 사용된다.
- Interrupts
- Multicore Systems and Polling
- 단일 코어 시스템에서 폴링은 사용 가능한 모든 CPU 리소스를 소모해 다른 자업을 처리하지 못하게 한다. 그렇기 때문에 일반적으로 인터럽트 기반 또는 DMA 기반 솔루션이 선호된다.
- 멀티코어 시스템에서는 하나의 코어가 폴링 또는 SPI 통신 처리를 전담하고 다른 코어는 별도의 작업을 처리할 수 있다. 일어한 병렬 처리는 병목 현상을 방지하고 전반적인 시스템 효율성을 개선하는 데 도움이 된다.
- RTOS (Real-Time Operating Systems)가 탑재된 시스템에서는 여러 코어가 서로 다른 작업이나 프로세스를 실행할 수 있다. RTOS 는 task scheduling을 관리해 일부 코어는 통신 프로토콜 (예: SPI)를 처리하고 다른 코어는 computational tasks에 집중할 수 있도록 한다.
- 일부 멀티코어 마이크로 컨트롤러에는 SPI, UART 또는 이너넷과 같은 I/O 작업 처리 전용으로 설계된 특수 코어 또는 주변 장치가 있다. 이러한 코어는 독립적으로 작동하므로 메인 코어가 방해 받지 않고 다른 작업을 수행할 수 있게 한다. 이를 Deticated Peripheral Cores 라고 한다.
Polling vs. Interrupt Drive SPI 예제
- Polling
- 장점
: 간단하고 쉽게 구현할 수 있다. - 단점
: CPU를 차단해 잠재적으로 처리 능력을 낭비하고 전력 소비를 증가시킨다.
- 장점
uint8_t SPI_receive() {
// Wait until the RX buffer is full (indicated by RXNE flag in status register)
while (!(SPI_SR & SPI_SR_RXNE)) {
// Polling until data is ready to be read
}
uint8_t received_data = SPI_DR;
return received_data;
}
- Interrupt-Driven
- 장점
: 데이터를 기다리는 동안 CPU가 다른 작업을 수행할 수 있다. CPU는 SPI 데이터가 도착했을 때만 처리한다. - 단점
: 인터럽트 처리를 설정해야 하므로 구현하기가 약간 더 복잡하다.
- 장점
volatile uint8_t spi_received_data;
volatile bool data_ready = false;
void SPI_IRQHandler() {
if (SPI_SR & SPI_SR_RXNE) { // If data is ready
spi_received_data = SPI_DR; // Read data
data_ready = true; // Set flag indicating data is ready
}
}
// Main function
int main() {
// Initialize SPI and enable SPI interrupt
enable_SPI_interrupt();
// Wait for data to be ready
while (!data_ready) {
// CPU is free to perform other tasks here, as it's not blocked by polling
}
// Process received data
printf("Received SPI data: 0x%02X\n", spi_received_data);
return 0;
}
How Multicore Systems Help
- Parallel Tasking
: 멀티코어 시스템에서는 하나의 코어가 SPI 통신 또는 유사한 작업을 전담하고 다른 코어는 다른 프로세스를 처리할 수 있어 효율성이 향상된다. - Reduced Blocking
: 멀티코어 시스템은 특정 작업에 서로 다른 코어를 할당함으로써 CPU 차단 없이 여러 작업을 동시에 처리할 수 있다. 예를 들어, 한 코어가 SPI 인터럽트 또는 폴링을 관리하는 동안 다른 코어가 주요 애플리케이션 로직을 실행할 수 있다. - Improved Real-Time Performance
: 멀티코어 시스템은 다양한 작업 전용 코어를 통해 실시간 이벤트에 더 빠르게 응답할 수 있으므로 특히 센서 판독, 사용자 인터페이스 또는 다른 디바이스와의 통신과 같은 작업에서 높은 응답성을 보장한다.
반응형
'기술(Tech, IT) > 임베디드 (Embedded)' 카테고리의 다른 글
[Embedded] CAN, SPI, I2C - 2 (0) | 2024.11.12 |
---|---|
[Embedded] I2C (Inter-Integrated Circuit) - 2 (0) | 2024.11.11 |
[Embedded] I2C (Inter-Integrated Circuit) - 1 (0) | 2024.11.10 |
[Embedded] CAN, SPI, I2C - 1 (0) | 2024.11.09 |
[Embedded] SPI (Serial Peripheral Interface) - 1 (3) | 2024.11.08 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 머신 러닝
- Android
- Python
- 투 포인터
- leetcode
- machine learning
- java
- 소켓 프로그래밍
- 리트코드
- The Economist Espresso
- Computer Graphics
- ml
- 오블완
- C++
- defaultdict
- 파이썬
- 안드로이드
- tf-idf
- join
- socket programming
- Hash Map
- The Economist
- 이코노미스트
- vertex shader
- DICTIONARY
- I2C
- 티스토리챌린지
- 딕셔너리
- 이코노미스트 에스프레소
- min heap
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함
반응형