2013-07-02 2 views
-3

안녕하세요 저는 임베디드 프로그래머입니다. 최근 멀티 스레딩을 사용해야하는 프로젝트가있었습니다. 내가 자바에서 동일한 사용했지만 8051 내 임베디드 코드를 구현할 수 없습니다. 어떤 시체를 도와주세요 날 도와 줄래?어떻게 임베디드 프로그램에서 멀티 스레딩을 할 수 있습니까?

+2

가능한 답변이 너무 많거나 좋은 대답은이 형식에 비해 너무 길다. 응답 집합의 범위를 좁히거나 몇 단락에서 대답 할 수있는 문제를 찾아내는 세부 정보를 추가하십시오. – Kermit

+0

적절한 태그를 추가하십시오. – SLaks

+0

Google : * coroutines *를 사용하십시오. 근본적인 문제를 더 많이 표현해야합니다. 왜 스레드가 필요하다고 생각하니? 8051에서이 작업을 수행하거나 이전에 8051로 코딩했으면합니다. –

답변

4

스레딩을 사용하면 일반적으로 스케줄러라고하는 스레드를 전환 할 수있는 메커니즘이 필요합니다.

대체로 협업과 선제의 두 가지 유형의 스레딩이 있습니다.

협업 스레딩에서 각 스레드는 일부 작업을 수행 한 다음 제어를 다시 스케줄러에 전송합니다. 이는 거의 while (1) {} 루프를 프로그램 구조로 사용하는 것과 같으며, 태스크의 독립성이 더 높아진다 (개발 중에 만). 한 가지 작업으로 인해 CPU가 호깅되거나 다른 프로그램이 실행되지 못하도록 막을 위험이 있습니다. 실제로 작업 간의 독립성은 개발자에게 환영 또는 조직 추상화 일뿐입니다. 선제 멀티 태스킹에서

, (가능성이 타이머 인터럽트에서 구동) 스케줄러 주기적으로 , 하나 개의 스레드에서 실행을 잡는 상태를 저장하고 다른 냉동 스레드를 다시 시작하여 작업의 변화. 이것은 설치하는 것이 다소 까다 롭지 만 훨씬 더 신뢰할 만합니다.

종종 두 가지 방법 중 하나를 사용하여 처음부터 인프라를 작성하지 않고 대신 원시 운영 체제 또는 다른 사람이 개발 한 스케줄러 루틴을 사용합니다.

매우 작은 임베디드 시스템의 경우 인터럽트 서비스 루틴이 특정 간략 및/또는 긴급한 작업을 처리하기 위해 대체 스레드와 유사한 기능을 제공 할 수 있다고 생각할 수도 있습니다. 직렬 인터럽트가 발생하면 다른 문자에 의해 편리한 시간에 나중에 해석 할 수 있도록 일부 문자를 가져 와서 저장합니다. 많은 작업은 인터럽트를 사용하여 즉각적인 부분을 처리 한 다음 나중에 while (1) {} 유형 프로그램 구조에서 결과 작업을 수행하여 구현할 수 있습니다.

어떤 사람들은 8051에서 실행되는 스케줄러에 대해 웃을 지 모르지만 - 이상한 이유로 8051 상당의 저렴한 코어는 오늘날 상당히 복잡한 특수 목적의 칩으로 끝납니다 (일반적으로 방대한 양의 뱅킹 된 메모리 및 강력한 주변 장치 엔진을 사용하여 실제 작업을 수행 할 수 있습니다.) 따라서 동적 태스크 생성 기능이 구현 된 멀티 스레딩 솔루션이 장치에서 수행되는 모든 작업을 관리하기 위해 실제로 구현되는 것은 드문 일이 아닙니다.

+0

OK, 8051 threads/preemption. 지금 웃고 ... :) –

+0

+1, [Rtos on 8051] (http://stackoverflow.com/questions/14632355/basic-requirements-to-be-called-rtos-for-8051). 제 생각에 Simon Tatham [co-routine page] (http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html)도 가치가있을 것입니다. 이것은 * threads *가 아니지만 협업 컨텍스트 스위칭의 원시 버전을 허용합니다. –

0

8051의 아키텍처는 합리적인 선점 예약에 적합하지 않습니다. 온 칩 RDATA/IDATA의 스택은 적어도 XDATA로 스왑 아웃되어야하며, 아마도 더 복잡 할 것이다.

8051은 토스터/세탁기 컨트롤러에 적합합니다.

사전 예약자와 같은 기능이 필요하거나 필요하면 ARM으로 이동하십시오.

+0

이것은 답변이 아닙니다. 또한 선택의 여지가 없을 수도 있습니다 - 라디오, USB FIFO와 같은 흥미로운 기능의 장치가 8051 코어를 중심으로 구축됩니다. 이는 ASIC 설계자가 던져 놓을 수있는 쉽고 저렴한 CPU 블록이기 때문입니다. 일반적으로 이것이 완료되면 펌웨어는 높은 성능 * 일 필요는 없지만 (데이터 흐름이이를 우회 할 수 있기 때문에) 놀랍도록 높을 필요가 있습니다 * 복잡성 *. 그렇습니다. 이러한 설계가 모두 ARM 코어 또는 이와 유사한 제품으로 재 구현되면 좋겠지 만, ASIC의 라이센스 비용은 더 비쌉니다. –

+0

음 ... OP는 '멀티 스레딩을 사용하도록 강요했습니다. 8051 용 임베디드 코드를 구현할 수 없습니다.' 그 도구가 요구된다면, 8051은 제가 경험 한 최악의 임베디드 플랫폼에 관한 것입니다. 물론 ARM은 더 비싸고, 선점 형 mutitasker를 필요로하지 않는 많은 작업에 8051 벌금을 부과합니다. –

+0

요점은 포스터가 프로세서를 자유롭게 변경할 수 있다고 가정 할 수 없다는 것입니다. 그들이 있다면, 당신은 확실히 논쟁이 있습니다. 그러나 현재 출하되는 8051 코어의 대부분은 독립형 MCU에서 출하되는 것이 아니라보다 최신의 흥미로운 특수 칩 내부에 내장 된 프로그래머블 컨트롤러로 출하됩니다. 그런 칩을 사용한다면, 슬레이브처럼 취급하고 좋아하는 ARM의 시리얼 채널을 통해 마이크로 관리 할 수 ​​없다면, 8051 코어가 붙어 있습니다. –

관련 문제