2012-11-18 6 views
5

하드 실시간 기능이있는 애호가 휴대용 로보틱스 라이브러리 (Windows 및 Linux)를 만들려고합니다. 표준 이더넷을 통해 마이크로 컨트롤러에 연결하고, 펌웨어를 해당 장치에 업로드하고, 필드 버스를 통해 다른 장치에 연결하고, 전용 컨트롤러를 실행하는 다른 마이크로 컨트롤러에 펌웨어를 업로드 할 수 있어야합니다. 어려운 실시간이 필요한 경우 NIC는 RTnet이 지원하는 NIC입니다. 나는 적어도 1kHz, 그러나 바람직하게는 2kHz 이상의 전형적인 서보 속도를 원할 것이다. 오버 헤드가 최소화되고 고속 필드 버스가 포화 상태 일 때 프레임을 수신하거나 전송하지 않도록 완전히 맞춤형 프로토콜 (TCP 또는 UDP over IP가 아닌)을 실행합니다. 그러면 이더넷 프레임의 페이로드를 해석하거나 연결된 장치로 보낼 수 있습니다.휴대용 하드 실시간 C 또는 C++ 원시 이더넷 프로토콜 라이브러리

1) 프로토콜을 C++로 유지하는 것을 선호하지만 "새로운"키워드를 사용하면 실시간 프로그래밍이 작동하지 않습니다. 프로젝트를 C로 변환하는 대신 C++ 언어를 사용하기로 선택하면 다른 한계점은 무엇입니까? 사람들은 C++을 활용하고 실시간으로 기한을 맞추는 방법을 가르치는 책이나 웹 사이트를 추천합니까? 나는 그것이 가능하다는 것을 믿으며, Orocos 프로젝트가 실시간 C++을 사용하기 때문에 C++을 사용할 수 있기를 희망합니다. 나는 C 코드를 사용하지 않는 것을 선호한다.

2) 휴대용 프로토콜 라이브러리 일반 용도를 유지하기 위해 프로그램이 비 실시간 이더넷 어댑터에서 동시에 실행되는 프로토콜을 처리하고 RTnet 이더넷 어댑터를 말하면 어떻게해야합니까?

내가 가지고있는 특정 질문은 boost 또는 Xenomai 뮤텍스를 사용할 수있는 휴대용 Mutex 클래스에 대한 질문 일 것입니다.

해결 방법 1은 다음과 같을 수 있습니다. 응용 프로그램이 Xenomai 라이브러리와 함께 컴파일 된 경우 부울 플래그로 뮤텍스를 구성하여 런타임에 boost (Xenomai) 또는 boost 잠금 및 잠금 해제. 라이브러리가 Xenomai 용으로 컴파일 된 경우에는 boost 뮤텍스와 Xenomai 뮤텍스를 포함 할 수 있습니다. 프로젝트가 Xenomai 용으로 컴파일 된 경우 부스트를위한 뮤텍스와 Xenomai의 private 변수가 포함될 것이므로이 솔루션은 마음에 들지 않습니다.

문제 2의 해결책 2는 다음과 같을 수 있습니다. 순수 가상 인터페이스 메소드의 추상 클래스에서 2 개의 다른 파생 클래스를 뮤트, 즉 boost와 Xenomai에 쓰십시오. 나는이 방법을 더 좋아하지만 런타임에 사용할 클래스를 지정하는 것이 번거롭다. 아마도 부스트와 Xenomai 뮤텍스 풀을 가져야 할 것입니다. 가장 어려운 실시간 C++ 프로그램이이 문제를 해결하는 방법입니까?

뮤텍스 이상의 문제가 있지만 처음부터 잘못된 디자인 패턴을 복제하고 싶지 않으므로 피드백을 보내고 싶습니다.

3) 저는 Beckoff의 TwinCAT이 Windows 7에서 EtherCAT을 실시간으로 실행한다고 생각합니다. 하드 리얼 타임으로 적어도 하나의 NIC를 지원하는 애호가의 손이 닿지 않는 범위에서 Windows 7 이상에서? 어쩌면 오픈 소스 하이퍼 바이저 프로젝트가있을 수 있습니다.

4) 또한 쿼드 코어 컴퓨터가 각 코어의 100 %를 사용하도록 시스템을로드하면 시스템이 하드 실시간으로 실행되지 않는지 확인할 수 있습니다.

+1

이 내용을 작고 간결한 질문으로 나눠야합니다. 이것은 너무 많이 소화 할 수 없습니다. –

+1

네트워크 스택의 어떤 레이어가 충돌 감지 및 회피를 지정합니까? 평범한 랜덤 대기 CD/CA를 사용하는 시스템이 어떻게 하드 실시간 보장을 할 수 있는지 보는 데 어려움을 겪고 있습니다. – dmckee

+2

"하드 실시간"을 수행하려면 "하드 실시간"OS가 필요합니다. Windows 또는 Linux는 해당 범주에 속하지 않습니다. –

답변

2

세부 사항 : 서보 용 1khz 재생주기를 원한다면 왜 하드 실시간을 사용하고 있습니까? 소프트 실시간 (즉, 루트로 실행하지만 순수한 사용자 공간이지만 해당 프로세스의 FIFO 레벨에 스케줄러 정책을 설정하고 모든 것을 메모리에 잠그고 스왑 공간을 사용하지 않도록 설정하면 ...) 하나만 놓치지 않고도 1khz를 쉽게 얻을 수 있습니다. 달리는 전체 년에있는 메시지.

이 시점에서 이더넷 프로토콜에 원시 소켓을 사용하고 하루 만 부릅니다.

관련없는 질문에 대해서는 이더넷 CD/CA가 요즘 하드웨어로 구현됩니다. 그냥 무시하십시오.

+0

이것은 소프트 실시간을 시작하는 데 도움이되었습니다. 일반적으로 백그라운드 프로세스를 실행하는 동안 100μs 미만의 대기 시간으로 작동합니다. 현재 하드 실시간이 작동 중이고 RTnet이있는 Xenomai는 커널 설정을 많이 수정하지 않고도 약 50μS의 상한선이있는 것으로 보입니다. – Edward