ARM7에서 C로 프로그래밍 된 임베디드 애플리케이션 (이식성 요구 사항 포함)은 현재 상용 우선 순위 기반의 선점 형 RTOS를 사용하므로 고객 위임 사항 당 RTOS 및 모든 RTOS 종속성을 제거해야합니다. 우리는 많은 HW 인터페이스, 절전 모드, I2C 통신을 사용하는 8 가지 작업을 가지고 있습니다. RTOS없이 타이밍 요구 사항을 관리 할 수 있지만 SW는 코드 단순화를 위해 RTOS 기능을 잘 사용합니다.RTOS 제거에서 명시 적 스택의 대안은 무엇입니까?
여러 곳에서 호출되는 루틴을 비롯한 여러 함수는 현재 I2C 드라이버 함수, 절전 명령문 등을 호출하는 일련의 차단을 구현합니다. I2C 호출/절전에서 폴링이 허용되지 않는다는 전제에 기반합니다 고객은 이러한 호출을 차단하지 않고 반환해야합니다. 문제는 I2C가 완료되거나 수면 시간이 경과했을 때 최상위 수준의 작업 항목에서 4 번 호출 될 수있는 "진술"에 "돌아 오는"것입니다.
나는 위에 간단한 스케줄러와 함께 각 작업에 대한 계층 적 상태 머신 디자인으로 수렴하고 있습니다. 그러나 여러 개의 루틴을 처리하는 데 사용되는 여러 개의 루틴은 각 호출마다 여러 개의 함수 호출 깊이에서 호출 될 수있는 상태 시스템이되며 각 태스크에 대해 명시 적 스택 기능이 필요합니다. 하위 상태 머신을 시작할 때마다 해당 프로세스의 상태를 할당하고 해당 상태의 "상태 스택"에 밀어 넣을 수 있습니다. 그러면 해당 작업에 대한 다음 스케줄러 호출이 모든 상태를 종료 할 수 있습니다. 계층 적 상태는 "중단 된"위치에서 계속 처리합니다.
문제에 적용 할 수있는 다른 디자인 아키텍처, 비 선점 패러다임으로 코드를 빠르게 이식 할 때 고려해야 할 사항 또는 생각이 풍부한 리소스와 "RTOS 제거"기술 및 디자인에 대한 토론을 볼 수 있습니까?
세 가지 대답은 모두 함께 다시 발명 바퀴를 방지하기 위해 상태 머신 기반의 개발 관련성과 관련 도구의 좋은 그림을 그릴. 우리 고객은 GPL을 포함한 어떤 종류의 라이센스도받지 않습니다. 답변을 통해 RTOS없이 계층 적 상태 머신을 사용하고 폴링 호출을 금지하려는 경우 캐싱 상태를 둘러 볼 방법이없는 것으로 보입니다. 계층 적 SM은 구조를 보존하여 기존 코드를 이식하는 데 도움이되므로 (루틴에 대한 함수 호출은 하위 상태 시스템 호출), 필자는 제공된 도구를 좋은 예제로 사용하여 이러한 방식으로 진행할 것입니다. - 감사.