저는 임베디드 소프트웨어를 사용하고 있습니다. 이 소프트웨어는 두 개의 주요 부분으로 나뉩니다. 첫 번째는 응용 프로그램 소프트웨어이고 두 번째는 일부 시스템 소프트웨어입니다. 시스템 소프트웨어는 드라이버 세트와 RTOS로 구성됩니다. 나는 응용 프로그램 부분을 개발했으며 준비된 드라이버를 사용하고 있습니다. 드라이버 중에는 CAN 통신을위한 드라이버도 있습니다. 기능 중 하나는 기능 I 드라이버 기능을 사용하는 방법을 이해하는 문제가콜백 함수가있는 드라이버
typedef void (*can_receive_callback_t) (can_message_t msg);
에 다음 인터페이스를 또한 포인터의 정의가 다음되는이 기능과 함께
result_t can_set_receive_callback (can_receive_callback_t cb);
있습니다. 나는
void my_function (can_message_t m);
가 나는 또한 위에서 정의 된 함수가 너무 콜백 함수라고 알고 인터페이스를 다음과 같이 몇 가지 기능을 정의 할 필요가 알고있다. 그러나 왜 콜백 함수를 정의해야하는지 모르겠습니다.
함수 포인터를 인수로 전달하지 않고 단순히 드라이버 함수를 호출하는 것은 왜 불가능합니까?
나를 정의한 콜백 함수가 "받은 메시지를 처리하는 방법을 말합니다. 드라이버 개발자에게 알려지지 않은 정보는 무엇입니까?
은 수신 메시지가 준비된 인터럽트 서비스 루틴에 의해 처리되었지만 언급 된 함수 중 어느 것도 ISR처럼 보이지 않는다는 것을 의미합니다.
아무도 좋은 문서를 참조 할 수 있습니까? 이런 유형의 드라이버가 설명되어 있습니까? 고마워.
의 특수성과의 프로토콜을 기반으로 수신 된 데이터를 관리하는 콜백 (등 구조, 타이밍, ...) 설정해야합니다 당신이 정의한 함수를 가리키는 포인터. CAN 메시지를 받자 마자 귀하의 기능이 실행됩니다. 프로그래머가 아니라 드라이버에 의해 호출됩니다. 따라서 "콜백"이라는 용어가 사용됩니다. 이것은 표준화 된 절차는 아니지만 특정 드라이버에 고유 한 것입니다. 사용법을 이해하려면 드라이버에 대한 설명서를 읽어야합니다. 또는 문서가 없으면 코드를 이해하십시오. – Lundin