임베디드
이번 RTOS Revealed에서는 Nucleus SE가 지원하는 태스크 간 통신의 가장 간단한 방법인 신호를 살펴보겠습니다. 작업 간에 간단한 메시지를 전달하는 매우 저렴한 수단을 제공합니다.
신호 사용
신호는 자율적이지 않다는 점에서 다른 모든 유형의 커널 객체와 다릅니다. 신호는 작업과 연관되며 독립적인 존재가 없습니다. 신호가 응용 프로그램에 대해 구성된 경우 각 작업에는 8개의 신호 플래그 세트가 있습니다.
모든 작업은 다른 작업의 신호를 설정할 수 있습니다. 소유자 태스크만 신호를 읽을 수 있습니다. 읽기는 파괴적입니다. 즉, 읽기 프로세스에 의해 신호가 지워집니다. 다른 작업은 작업의 신호를 읽거나 지울 수 없습니다.
Nucleus RTOS에는 다른 작업이 하나 이상의 신호 플래그를 설정할 때 실행되는 기능을 작업이 지정할 수 있는 기능이 있습니다. 이것은 인터럽트 서비스 루틴과 다소 유사합니다. 이 기능은 Nucleus SE에서 지원되지 않습니다. 태스크는 신호 플래그를 명시적으로 조사해야 합니다.
신호 구성
Nucleus SE의 대부분의 측면과 마찬가지로 신호 구성은 주로 #define에 의해 제어됩니다. nuse_config.h의 문 . 주요 설정은 NUSE_SIGNAL_SUPPORT입니다. , 기능을 활성화합니다(응용 프로그램의 모든 작업에 대해). 신호 수를 지정하는 데는 문제가 없습니다. 애플리케이션의 각 작업에 대해 8개의 플래그 집합만 있으면 됩니다.
이 활성화 매개변수를 설정하는 것은 신호에 대한 "마스터 활성화"입니다. 이로 인해 데이터 구조가 그에 따라 정의되고 크기가 조정되며 이에 대한 자세한 내용은 이 기사의 뒷부분에서 설명합니다. API 활성화 설정도 활성화합니다.
API 사용
Nucleus SE의 모든 API 기능(서비스 호출)에는 활성화된 #define이 있습니다. nuse_config.h의 기호 . 신호의 경우 다음과 같습니다.
NUSE_SIGNALS_SENDNUSE_SIGNALS_RECEIVE
기본적으로 둘 다 FALSE로 설정됩니다. , 따라서 각 서비스 호출을 비활성화하고 구현 코드의 포함을 금지합니다. 애플리케이션에 대한 신호를 구성하려면 사용하려는 API 호출을 선택하고 활성화 기호를 TRUE로 설정해야 합니다. .
다음은 기본 nuse_config.h에서 발췌한 것입니다. 파일:
#define NUSE_SIGNAL_SUPPORT FALSE /* 신호 지원 활성화 */#define NUSE_SIGNALS_SEND FALSE /* 서비스 호출 인에이블러 */#define NUSE_SIGNALS_RECEIVE FALSE /* 서비스 호출 인에이블러 */
신호 API 기능이 활성화되고 신호 기능이 활성화되지 않은 경우 컴파일 시간 오류가 발생합니다. 코드가 활성화되지 않은 API 호출을 사용하는 경우 애플리케이션에 구현 코드가 포함되지 않았기 때문에 링크 시간 오류가 발생합니다. 물론 신호 지원을 활성화하고 이러한 API를 사용할 수 없도록 하는 것은 의미가 없기 때문에 두 API 기능을 활성화하는 것은 다소 중복됩니다. 활성화는 다른 Nucleus SE 기능과의 호환성을 위해 포함됩니다.
신호 서비스 호출
Nucleus RTOS는 다음 기능을 제공하는 신호와 관련된 4가지 서비스 호출을 지원합니다.
지정된 작업에 신호를 보냅니다. NUSE_Signals_Send()에 의해 구현됨 Nucleus SE에서.
신호를 수신합니다. NUSE_Signals_Receive()에 의해 구현됨 Nucleus SE에서.
신호 처리기를 등록합니다. Nucleus SE에서는 구현되지 않습니다.
신호를 활성화/비활성화합니다. Nucleus SE에서는 구현되지 않습니다.
이러한 각 서비스 호출의 구현을 자세히 조사합니다.
신호 송수신 서비스
작업의 신호 집합에서 수행할 수 있는 기본 작업은 데이터를 작업으로 보내고(모든 작업에서 수행할 수 있음) 데이터 읽기(따라서 소유자만 수행할 수 있는 데이터 지우기)입니다. . Nucleus RTOS와 Nucleus SE는 각각 이러한 작업에 대해 두 가지 기본 API 호출을 제공하며 여기에서 설명합니다.
신호 플래그는 비트이므로 이진수로 가장 잘 시각화됩니다. 표준 C는 역사적으로 이진 상수 표현(8진수 및 16진수만)을 지원하지 않기 때문에 Nucleus SE 배포에는 유용한 헤더 파일인 nuse_binary.h가 포함되어 있습니다. – #define 포함 b01010101 형식의 기호 모든 256개의 8비트 값에 대해. 다음은 nuse_binary.h에서 발췌한 것입니다. 파일:
#define b00000000 ((U8) 0x00)#define b00000001 ((U8) 0x01)#define b00000010 ((U8) 0x02)#define b00000011 ((U8) 0x003)0define b00000101 ((U8) 0x05)
신호 보내기
모든 작업은 응용 프로그램의 다른 작업에 신호를 보낼 수 있습니다. 신호 전송에는 하나 이상의 신호 플래그 설정이 포함됩니다. 이것은 이전에 설정된 플래그에 영향을 미치지 않는 OR 연산입니다.
신호 전송을 위한 Nucleus RTOS API 호출
서비스 요청 프로토타입:
STATUS NU_Send_Signals(NU_TASK *작업, UNSIGNED 신호);
매개변수:
작업 – 설정할 신호 플래그를 소유한 작업의 제어 블록에 대한 포인터
신호 – 설정할 신호 플래그의 값
반품:
NU_SUCCESS – 통화가 성공적으로 완료되었습니다.
NU_INVALID_TASK – 작업 포인터가 잘못되었습니다.
신호 전송을 위한 Nucleus SE API 호출
이 API 호출은 Nucleus RTOS API의 주요 기능을 지원합니다.
서비스 요청 프로토타입:
STATUS NUSE_Signals_Send(NUSE_TASK 작업, U8 신호);
매개변수:
작업 – 설정할 신호 플래그를 소유한 작업의 인덱스(ID)
신호 – 설정할 신호 플래그의 값
반품:
NUSE_SUCCESS – 통화가 성공적으로 완료되었습니다.
NUSE_INVALID_TASK – 작업 인덱스가 유효하지 않습니다.
신호 전송의 Nucleus SE 구현
다음은 NUSE_Signals_Send()의 전체 코드입니다. 기능:
STATUS NUSE_Signals_Send(NUSE_TASK 작업, U8 신호){ #if NUSE_API_PARAMETER_CHECKING if (task>=NUSE_TASK_NUMBER) { return NUSE_INVALID_TASK; } #endif NUSE_CS_Enter(); NUSE_Task_Signal_Flags[태스크] |=신호; NUSE_CS_Exit(); 반환 NUSE_SUCCESS;}
코드는 매우 간단합니다. 매개변수 검사 후 신호 값은 지정된 작업의 신호 플래그에 OR로 연결됩니다. 작업 차단은 신호와 관련이 없습니다.
신호 수신
태스크는 자체 신호 플래그 세트만 읽을 수 있습니다. 그것을 읽는 과정은 파괴적입니다. 즉, 플래그도 지워집니다.
신호 수신을 위한 Nucleus RTOS API 호출
서비스 요청 프로토타입:
UNSIGNED NU_Receive_Signals(VOID);
매개변수:없음
반환값:신호 플래그 값
신호 수신을 위한 Nucleus SE API 호출
이 API 호출은 Nucleus RTOS API의 주요 기능을 지원합니다.
서비스 요청 프로토타입:
U8 NUSE_Signals_Receive(무효);
매개변수:없음
반환값:신호 플래그 값
수신 신호의 Nucleus SE 구현
다음은 NUSE_Signals_Receive()의 전체 코드입니다. 기능:
U8 NUSE_Signals_Receive(void){ U8 신호; NUSE_CS_Enter(); 신호 =NUSE_Task_Signal_Flags[NUSE_Task_Active]; NUSE_Task_Signal_Flags[NUSE_Task_Active] =0; NUSE_CS_Exit(); 반환 신호;}
코드는 매우 간단합니다. 플래그 값이 복사되고 원래 값이 지워지고 API 함수에서 복사본이 반환됩니다. 작업 차단은 신호와 관련이 없습니다.
임베디드
세계 경제의 거의 모든 부분과 심지어 우리의 삶도 디지털화된 시스템에 의존하여 작동합니다. 따라서 디지털 PCB는 시장의 요구를 충족시키는 데 필수적입니다. 전자 제품 제조업체 또는 설계자인 경우 이러한 회로 기판에 대한 심층적인 이해가 있어야 운영 분야에서 관련성을 유지할 수 있습니다. 이 기사에서는 디지털 회로 기판의 세계에 대해 자세히 알아볼 것이므로 계속 읽으십시오! 디지털 PCB란 무엇입니까? 아날로그 PCB와 마찬가지로 디지털 회로 기판에는 트랙, 전도성 패드 및 기타 기능이 포함되어 있습니다. 집합적으로 이러한
거의 모든 ABB 제품과 시스템에는 센서가 장착되어 있습니다. 센서는 물리적 측정을 수행하고 전기 신호로 변환하여 유용한 정보로 처리 및 변환합니다. 센서는 입력 정보를 전달하여 프로세스를 제어하고 시스템을 보호합니다. ABB의 센서 제품에는 실내 및 실외 센서가 포함됩니다. 내부에는 통합 센서, 전압 센서 및 전류 센서가 제공됩니다. 실외용으로는 전압 센서와 스플릿 코어 센서가 제공됩니다. ABB의 Machine Sync는 기계의 움직이는 판에 있는 선형 센서를 사용하여 로봇의 움직임을 동기화합니다. 머신 텐딩 작업 중 기계의