해보기는 했어?

오늘 안됐다고 포기하지 말고 용기내서 내일 다시 해 보자.

임베디드

FreeRTOS - 2

롬돌이 2023. 1. 2. 12:00
반응형

< 이 공간의 내용은 개인적인 공부를 위한 것입니다. 틀릴 수도 있습니다. 참조만 하시고, 틀린 부분이 있으면 알려주시길 바랍니다. 정중히 요청드립니다. >

 

FreeRTOS 상업용 라이센싱

 

FreeRTOS의 전략적 파트너인 WITTENSTEIN high integrity systems에서 제공한다.

OpenRTOSTM   보증과 주기적인 지원을 포함하는 FreeRTOS 커널의 상업적인 라이선스 버전이다.

FreeRTOS OpenRTOS 같은 코드 기반을 공유한다.

OpenRTOS AWS의 전략적 파트어인 WITTENSTEIN high integrity systems에의해 AWS 라이선스에 따라 제공된다.

 

 

SAFERTOSTM  is a derivative version of the FreeRTOS kernel that has been analyzed, documented and tested to meet the stringent requirements of industrial (IEC 61508 SIL 3), medical (IEC 62304 and FDA 510(K)) automotive (ISO 26262) and other international safety standards.

SAFERTOSTM  FreeRTOS 파생버전이고, 엄격한 산업 요구사항(IEC 61508 SIL 3), 자동화(ISO 26262)  의료기기(IEC 62304 and FDA 510(K)) 그리고, 다른 세계적인 안전 기준들에 대해 분석 테스트 것이다.

SafeRTOS 독립적으로 감사된 안전 수명 주기 문서가 포함되어 있다.

SafeRTOS AWS 전략적인 파트너사인 WITTENSTEIN high integrity systems에서 제공한다.

 

FreeRTOS 커널 라이선스 비교

  FreeRTOS kernel
MIT license
OpenRTOS
Commercial license
Is it free? Yes No
Can I use it in a commercial application? Yes Yes
Is it royalty free? Yes Yes
Is a warranty provided? No Yes
Can I receive professional technical support on a commercial basis? Yes Yes
Is legal protection provided? No Yes, IP infringement protection is provided
Do I have to open source my application code that makes use of the FreeRTOS services? No No
Do I have to open source my changes to the FreeRTOS kernel? No No
Do I have to document that my product uses FreeRTOS? No No
Do I have to offer to provide the FreeRTOS code to users of my application? No No

FreeRTOS는 세계를 선도는 회사들과 18년이상 함께 일하고 있으면서 개발 되고 있다. FreeRTOS 마이크로컨트롤러와 작은 마이크로프로세서를 위한 시장 주도형 리얼타임오퍼레이팅시스템이다.

 

코딩 기준(표준)/MISRA 규정 준수

중요 FreeRTOS 소스파일들(모든 포트들에 공통이 되나 포트레이어는 아니다) MISRA 코딩 표준 가이드라인들에 적합하다.

규전 준수는 lint 설정파일들과 함께 pc-lint 이용해서 확인된다.

표준은 매우 길고 많기 때문에, 그리고 작은 비용으로 MISRA로부터 구매할 있기 때문에 여기에서 모든 규칙을 다시 설명하지는 않는다.

 

MISRA 표준과 틀린 부분은 아래와 같다.

    두 개의 API 함수들은 하나보다 많은 탈출 포인트를 갖는다.

    중요한 효율성의 이유를 위해 가지의 편차는 허용이 된다.

    타스크를 만들 , 소스코드는 생성되는 타스크를 위한 스택의 위치를 위해 시작과 주소를 위치시키는 메모리 어드레스를 조작한다.

     

코드는 모든 8, 16, 20, 242, 32비트 버스들을 사용하는 아키텍쳐들을 포함하는 FreeRTOS 포트된 아키텍쳐들에서 사용된다.

    이것은 필연적으로 포인터 연산이 요구된다.

    포인터 연산이 사용될때, 연산 결과는 정확한지를 프로그램 방식으로 확인한다.

    트레이스(추적) 매크로들은 기본적으로 비어 있기 때문에 어떤 코드도 발생시키지 않는다.

    그러므로, MISRA 규정 확인은 더미 매크로 선언으로 동작한다.

    MISRA 규칙은 적절하다고 확인될 해제된다. (규칙 준수가 준수하지 않을 보다 적합하지 않다면 라인에 대해 규칙을 있다.)

    각각의 이러한 발생은 특별한 pc-lint MISRA 주석 표시 구문과 함께 정당성이 동반된다.

    FreeRTOS 많은 다른 컴파일러로 빌드되며, 어떤 것들은 다른 것들보다 우수하다.

 

이러한 이유 대문에 FreeRTOS C99 표준부터 또는 후에 소개된 특징 구문의 어떤 것도 사용하지 않는다.

가지 예외는 stdint.h헤더파일을 사용하는 것이다.

당신의 컴파일러가 자체 제공하지 않는 경우 FreeRTOS/Source/include 디렉토리에는 stding.readme라는 파일이 있다. FreeRTOS 빌드하기 위해 필요한 최소의 stdint 타입 선언을 제공하기 위해 파일은 stdint.h 변경될 있다.

 

테스트

절에서는 일반적인 코드에서( 코드는 모든 FreeRTOS 커널 포트에 의해 만들어지는 FreeRTOS/Source 디렉토리에 위치한다.) 테스트가 동작하는 것과 포터블 레이어 코드에( 코드는 FreeRTOS/Source/portable디렉토리의 서브 디렉토리에 위치한다.) 대해 테스트하는 것을 설명한다.

  • 일반적인 코드

표준 데모/테스트 파일들은 결정에 따라 True/False경로를 모두 실행하는지 확인하는 분기 테스트 범위를 제공하기 위해 시도된다.

대부분의 경우 특히 목적을 위해 커널의 코딩 스타일이 고의적으로 조건을 단순하게 하기 때문에 실제적으로 조건 범위를 달성하게 된다.

else 경로가 비어있는 경우 분기의 범위를 측정하기 위해 if() else 패스에 있는 NOP 명령어에 mtCOVERAGE_TEST_MARKER() 매크로를 정의하는 것으로GCOV 사용한다.

mtCOVERAGE_TEST_MARKER() 테스트 범위를 측정할 때만 정의 되어야 한다. 일반적으로 이것은 어떤 코드도 생성하지 않는 비어있는 매크로이다.

 

  • 포트레이어

포트레이어 코드는 ‘reg 테스트태스크를 이용하여 테스트 된다. 그리고 포트를 위하여 인터럽트를 지원하기 위해 인터럽트 태스크도 사용된다.

‘reg test’ 태스크는 다중(일반적으로 2) 태스크로 생성된다. 처음에는 모등 CPU레시스터에 알려진 값으로 채우고 다른 태스크가 연속적으로 동작하는 동안 모든 레지스터에서 알려진 값이 유지가 되는지 연속적으로 확인한다. (담금테스트?)

인터럽트 태스크는 적어도 3개의 깊이를 포함하는 서로 다른 우선순위의 인터럽트에 대한 테스트를 실행한다.

매크로들은 요구되는 테스트 범위를 달성하는 것이 확실시하기 위한 코드 범위에서 적절한 위치에 인위적인 딜레이를 추가하는데 사용한다.

매크로는 테스트목적을 달성하기 위한 적절한 위치에 인위적인 딜레이를 추가하기 위해 사용된다는 ?

 

여러 경우에 있어서 이러한 테스트의 철저함이 실리콘에서 버그를 찾는데 책임이 있다는 점은 주목할 가치가 있다.

이러한 테스트를 철저히 하는 것이 IC 있는 버그를 찾을 있다는 점에서 주목할 만한 가치가 있다는 것이다.

반응형

'임베디드' 카테고리의 다른 글

시리얼 통신 모니터링  (0) 2023.01.18
FreeRTOS - 3  (0) 2023.01.03
FreeRTOS - 1  (0) 2022.12.30
마이크로프로세서로 KEY 입력 받는법  (0) 2022.11.05
마이크로프로세서 제대로 공부하기  (0) 2022.11.05