문제

실시간 시스템용 프로그래밍 언어에 대한 유용한 정보를 찾지 못했습니다.내가 찾은 건 실시간 시스템 및 프로그래밍 언어:Ada 95, 실시간 Java 및 실시간 C/POSIX (여기 PDF 좀), 실시간 시스템을 위한 Java 및 C의 확장에 대해 이야기하는 것 같습니다(읽을 책이 없습니다).또한 이 책은 2001년에 출판되었으므로 현재는 더 이상 사용되지 않는 정보일 수 있습니다.

따라서 이러한 언어가 실제 응용 프로그램에서 사용되는지, 아니면 실제 실시간 시스템이 DSL과 같은 다른 언어로 만들어지는지 의심스럽습니다.

두 번째 옵션이 귀하에게 해당된다면 귀하가 사용하는 언어의 뛰어난 특징은 무엇입니까?

도움이 되었습니까?

해결책

Java의 실시간 사양에는 이제 몇 가지 상업용 등급 구현이 있습니다.

이 제품은 컴파일에서 네이티브 코드 (Aonix), J2ME (AICAS, ApoGee), 전체 J2SE (SUN, IBM)까지 연속체에 걸쳐 있습니다. 전부는 아니더라도 대부분은 소수의 안전 또는 미션 크리티컬 시스템에 배치를 보았지만 모멘텀이 구축되고 있습니다. 예는 포함됩니다 Eglin AFB의 우주 감시 레이더 현대화 그리고 미국 해군의 RTSJ 사용 DDG-1000/Zumwalt 구축함. Sun은 또한 금융 거래 처리 도메인의 배치를 주장합니다.

RTSJ에 관심이 있다면 Peter Dibble의 제안 실시간 플랫폼 프로그래밍, 또는 웰링스 교수 ' 자바의 동시 및 실시간 프로그래밍.

관련 참고로, RTSJ의 하위 집합으로 구축 된 Java 프로그래밍 언어에 대한 안전 중요 프로파일을 제공하기위한 작업이 진행되고 있습니다. 또한 전문가 그룹이 분산 된 RTSJ DRTSJ를 탐색하기 위해 결성되었지만 작업은 정지되었습니다.

다른 팁

저는 항공 전자 소프트웨어 엔지니어입니다. 여러 개발 프로젝트에 참여할 수있었습니다. 이 프로젝트에서 사용한 언어는 다음과 같습니다. C, C ++ 및 실시간 Java.

C는 훌륭합니다. C ++는 그렇게 나쁘지 않지만 C/C ++는 DO-178B와 같은 안전 고려 사항에 대한 엄격한 코딩 표준이 필요합니다.

실시간 Java가 갈 길이라고 생각하지만 아직 많은 항공 전자 응용 프로그램이 보이지 않습니다.

한국 제트 트레이너 T-50에는 HUD 및 MFD 디스플레이를 제공하는 RT Java 애플리케이션을 실행하는 미션 컴퓨터 및 모든 미션 크리티컬 기능이 있습니다.

이 책은 ADA 95, Java 실시간 시스템 및 실시간 POSIX 확장 (C로 프로그래밍)의 사용을 다룹니다. 이들 중 어느 것도 직접 도메인 특정 언어가 아닙니다.

ADA 95는 90 년대 후반에 일반적으로 사용되는 프로그래밍 언어이며 (AFAIK) 방어 및 항공 우주 산업의 실시간 프로그래밍에 여전히 널리 사용됩니다. ADA 위에 제작 된 DSL 이상이 하나 이상 있습니다. Sparkada - 프로그램 검증 도구에 대한 시스템 특성을 설명하는 주석 시스템입니다.

이 인터뷰 2006 년 4 월 6 일의 경우 Java 실시간 시스템을 구성하는 일부 클래스 및 가상 머신 변경 사항을 나타냅니다. 도메인 특정 언어 확장을 언급하지 않습니다. 실시간 시스템에서 Java를 사용하지는 않았지만, 내가 찾을 것으로 예상되는 시스템의 종류를 보지 못했습니다 (C ++, Fortran 및 Ada 인 항공 우주 시뮬레이션에서 일합니다. 실시간 내부 루프 시스템의 경우).

실시간 posix POSIX 운영 체제 시설에 대한 연장 세트입니다. OS 확장자로서 언어로 특정한 것은 필요하지 않습니다. 즉, 임베디드 시스템을 설명하기위한 하나의 C 기반 DSL을 생각할 수 있습니다. Systemc -하지만 임베디드 시스템을 생성하는 데 익숙한 지 모르겠습니다.

이 책에서 언급되지 않았습니다 MATLAB, 지난 몇 년 동안 시뮬레이션 도구에서 실시간 시스템을위한 모델 구동 개발 시스템으로 이동했습니다. MATLAB/SIMULINK는 사실상 선형 프로그래밍, 상태 기계 및 알고리즘을위한 DSL입니다. Matlab이 생성 할 수 있습니다 또는 HDL 실시간 및 임베디드 시스템. 일부 Matlab 경험이 필요하지 않은 항공 전자, EW 또는 기타 방어 산업 실시간 구직을 보는 것은 매우 드 rare니다. (나는 Matlab에서 일하지 않지만 업계에서 실제로 얼마나 유비쿼터스인지 강조하기는 어렵습니다)

실시간 지원은 거의 모든 언어로 이루어질 수 있습니다.그러나 환경(운영 체제, 런타임 및 런타임 라이브러리)은 실시간 제약 조건을 준수해야 합니다.대부분의 경우 실시간이란 항상 어떤 일이 발생하는 결정론적인 시간이 있음을 의미합니다.결정론적 시간은 일반적으로 마이크로초/밀리초 범위의 매우 낮은 시간 값입니다.

실시간 시스템은 사양에서 일반적으로 '매 x(기간)(뭔가를 수행 | 무언가를 확인)'와 같이 명시하므로 이 기준에만 의존합니다.일반적으로 이는 시스템이 외부 센서와 인터페이스하여 생명을 구하거나 생명을 위협하는 시스템을 제어하는 ​​경우에 발생합니다.

저는 실시간 내비게이션 및 미디어 재생을 제공하기 위해 실시간 제약 조건을 충족하도록 특별히 구성된 운영 체제를 사용하여 대부분 C/C++로 개발된 차량 내 내비게이션 및 인포테인먼트 시스템을 작업하고 있었습니다.

그러나 이것이 실시간 시스템의 전부는 아닙니다.일반적으로 전체 시스템의 알고리즘 선택은 주로 선형 또는 상수 시간을 사용하는 Big-O 표기법에 따라 결정적인 런타임을 갖도록 만들어집니다.다른 모든 것은 비결정적인 것으로 간주되므로 실시간 시스템에 사용할 수 없습니다.

내가 함께 일한 모든 실시간 시스템은 주로 C로 작성되었으며, 약간의 어셈블러가 있거나 C의 비트가 거의없는 어셈블러로 작성되었습니다. 그러나 제가 작업 한 실시간 시스템 중 일부는 특별한 자체 제작 코드 생성기를 사용했습니다.

실시간 지향 언어?

실시간이란 무엇입니까?

먼저 우리는 무엇을 정의해야합니다 실시간 평균.

물론 도구가 물리적 환경에 대해 어떻게 작동하는지에 따라 순수한 실시간 많은 타사 종속성이 있기 때문에 효과적으로 수행 할 수 없었습니다.

마이크로 컨트롤러를 사용하여 임베드 물건을 구축하는 경우 아르두노, 사용하는 언어는 하드웨어에 의해 제한되지만 더 복잡한 것들이 있습니다. 라즈베리 파이, 언어 선택은 매우 넓습니다.

세분성

이것은 당신이 측정하는 것에 따라 다르고, 당신이 작업하는 경우 :

  • 날씨 기온, 하나는 10 분마다 읽는 것만으로도 충분할 수 있습니다
  • 사람 키 또는 체중, 하나 또는 4 명은 낮에 읽습니다
  • 서버 상태, 고급 디버깅의 경우 1 초, 조용한 중요하지 않은 보조 서버의 경우 약 1 시간 사이.
  • 원자 충돌 계수: 더 미세한 ...

이벤트 기반 독서

데이터 수집에 대한 올바른 (더 나은) 방법은 가치 변경 이벤트... 장치가 허용 할 때마다.

당신의 도구는 할 필요가 없습니다 투표 장치의 값이지만 장치는 변경할 때 도구로 값을 보내야합니다.

이것은 An을 사용하여 수행 할 수 있습니다 하드웨어 인터럽트 트리거 또는 포트 프로토콜을 사용하여 RS-232 샘플을 위해 직렬 포트에서 계속 듣고 있습니다.

모니터링 환경

마지막으로 경고해야 할 것은입니다 합법적 인 사용자가 어떻게 상호 작용할 것인가.

MEDED 독립형 장치를 구축하는 경우 로봇, 그래픽 라이브러리를 사용하여 터치 스크린과 상호 작용할 수 있습니다.

웹 기반 모니터를 구축하는 경우 클라이언트가 기존이 될 수 있음을 명심해야 할 수도 있습니다. 800x600 인터넷 연결 불량 및 소규모 프로세서를 사용하는 흑백 화면 ... 그러나 클라이언트와 상호 작용할 수있는 최종 목표에 따라 강력한 하드웨어와 강력한 인터넷 연결을 보장 할 수 있습니다. 어쨌든 서버와 클라이언트 간의 통신 지연을위한 Connexion Losing 및 이벤트를 관찰해야합니다. 대부분 타사 종속성이 있습니다.

어떤 프로그래밍 언어?

거기에서 언어 선택은 넓고 분명히 의존합니다.

  • 당신의 지식.
  • 과립성이 요청되었습니다 (물론 이벤트 기반도 사용하여)
  • 도구를 구축 해야하는 시간 (돈;)
  • 지연, 동료 ...
  • 종류의 장치
  • 종류의 모니터링
  • 다른 정치적 이유

사용하여 실시간 모니터링 엔진을 구축 할 수 있습니다 그리고 만, 나는 그 아래에 지어진 정교한 엔진을 보았습니다. 만 ... 개인적으로 웹 기반 태양 에너지 모니터를 사용하여 구축했습니다. , 그리고 .

실시간 안전 크리티컬 시스템에 널리 사용되는 LabView 프로그래밍 언어를 언급 한 사람은 아무도 없다고 믿을 수 없습니다. RT 시스템을위한 건축 및 구현을위한 광범위한 라이브러리와 잘 알려진 설계 패턴이 있습니다.

또한 National Instruments는 실시간 응용 프로그램을 위해 설계된 다양한 하드웨어 (CRIO, PXI 등)를 만듭니다.

우리는 안전한 크리티컬 환경에서 사용되는 Fracking (유압 파쇄)에 LabView를 사용합니다.

그건 그렇고, LabView는 비 RT 응용 프로그램에도 사용됩니다.

PLCS는 옵션이 너무 제한되어있어 예측할 수없는 런타임 성능을 초래하는 방식으로 프로그래밍하기가 어렵다는 점에서 실시간 DSL 인 Ladder 및 FBD 코드를 실행합니다.

C 언어를 실시간 프로그래밍 및 모든 관련 문제 (예 : Parallel Programming)에 대한 실제로 의도적 인 응용 프로그램은 내 킥 스타터가 제공합니다.http://www.kickstarter.com/projects/767046121/crawl-space-computing-with-connel그것은 "넓은 프로그래밍"이라고하며 나는 대부분의 내 인생을 해왔습니다. 보상에는 소프트웨어 라이브러리와 책이 포함되어 있으며 유용하도록 설계되었습니다.

2003 년부터 일한 회사는 SCADA/MES 플랫폼을 개발하고 배포하고 있습니다. 원래 구현은 1993 년에 시작되었으며 OS/2에서 Modula2를 사용했습니다. 나중에 (1998)은 ADA95와 Windows로 포팅되었습니다. 현재 (2019)는 Adacore의 ADA 컴파일러를 사용합니다. 우리의 시스템은 포팅되었으며 32/64 Windows, HPUX, OpenVMS (및 최근 라즈베리에도)에 배치되었습니다. 우리는 중부 유럽 (가스 산업, 정유소, 공장, 발전소)에 여러 번 설치하고 있습니다. 우리는 ADA의 기능이 우리 시스템이 높은 수준의 신뢰성을 제공하고 C와 같은 언어를 사용하면 쉽게 고정 될 수있는 많은 오류를 방지한다고 생각합니다. 내 블로그도 참조하십시오.https://www.ipesoft.com/en/blog/what-language-is-the-d2000-written

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top