마이크로 컨트롤러 시뮬레이션을 구현하려고합니다. 이 시뮬레이션은 하나의 특정 마이크로 컨트롤러의 클럭 사이클 정밀 표현을 의미하는 것이 아니라 코드의 일반적인 정확성을 확인하는 것을 의미합니다.다른 스레드 (현재 스레드가 아닌 스레드)를 일시 중단하려면 어떻게합니까?
정상적인 코드를 실행하는 "주 스레드"와 ISR 코드를 실행하는 두 번째 스레드가 있다고 생각했습니다. ISR을 실행해야 할 때마다 ISR 스레드가 "주 스레드"를 일시 중단합니다.
물론 인터럽트를 차단하는 기능이 필요합니다. "인터럽트가 차단 된"동안 주 스레드가 ISR 코드를 실행할 때마다 ISR 스레드가 보유하는 뮤텍스를 사용하여이 문제를 해결할 생각입니다.
주 스레드를 일시 중단하지만 죽이고 POR 기능을 실행하는 새 스레드를 시작하여 POR (power on reset)을 구현할 수 있습니다.
windows API는 필요한 기능을 제공합니다. 하지만 posix 스레드 (리눅스에서)를 사용하여 위와 같은 작업을 수행하는 것은 불가능한 것처럼 보입니다.
저는 실제 하드웨어 독립적 인 마이크로 컨트롤러 코드를 변경하고 싶지 않습니다. 보류중인 인터럽트를 확인하기 위해 아무 것도 삽입하지 않아도됩니다.
잘 작동하지 않는 지점에서 인터럽트를 수신하는 것이 바람직합니다. 이는 인터럽트를 차단하지 않는 한 마이크로 컨트롤러에서도 마찬가지입니다.
Linux에서 다른 스레드를 일시 중단 할 수있는 방법이 있습니까? (디버거는 어떻게 든 그 옵션을 사용해야한다고 생각합니다.)
제발,이 말은 나쁜 생각입니다. 나는 그것이 대부분의 상황에서 사실임을 압니다. 그러나 주 코드는 표준 라이브러리 또는 잠금/뮤텍스/세마포어를 사용하지 않습니다.
오, 이런. 다른 스레드를 죽이는 것은 매우 위험한 사업입니다. 프로그램에서 잠 그거나 다른 리소스를 영구히 망칠 수 있습니다. 임의의 지점에서 다른 스레드를 일시 중단해도 그다지 좋지는 않지만 여전히 ... – ephemient
주 스레드 코드는 잠금을 사용하지 않으며 (일시 중단 또는 강제 종료를 막는 설명 된 것을 제외하고) 동적 리소스를 할당합니다. 표준 라이브러리를 사용하지 않습니다. –
이것은 glibc 메일 링리스트 [여기] (http : //sources.redhat.com/ml/libc-help/2010-05/msg00014.html). 그러나 아무런 결과없이. – Albert