Ich habe an einigen Embedded-Software gearbeitet. Diese Software ist unterteilt in in zwei Hauptteile. Die erste ist die Anwendungssoftware und die zweite ist eine Systemsoftware. Die Systemsoftware besteht aus Treibern und RTOS. Ich habe den Anwendungsteil entwickelt und Ich habe die vorbereiteten Treiber verwendet. Unter den Treibern befinden sich auch Treiber für die CAN-Kommunikation. Eine der Funktionen hat die folgende SchnittstelleTreiber mit Callback-Funktion
result_t can_set_receive_callback (can_receive_callback_t cb);
Zusammen mit dieser Funktion folgenden Definition auch des Zeigers auf Funktion
typedef void (*can_receive_callback_t) (can_message_t msg);
I Problem ist zu verstehen, wie die Treiber-Funktion zu verwenden. Ich weiß, dass ich mit folgenden Schnittstelle
void my_function (can_message_t m);
Ich weiß auch, eine Funktion zu definieren, dass die Funktion wie oben definiert ist, so Callback-Funktion aufgerufen. Aber ich weiß nicht, warum ich die Callback-Funktion definieren muss.
Warum ist es nicht möglich, einfach die Treiberfunktion aufzurufen, ohne dass ein Funktionszeiger als Argument übergeben wird?
Bedeutet das, dass die von mir definierte Callback-Funktion "sagt", wie die empfangenen Nachrichten verarbeitet werden? Welche Informationen sind dem Treiberentwickler unbekannt?
Ich meinte, dass die empfangenen Nachrichten von vorbereiteten Interrupt-Service-Routinen verarbeitet werden, aber keiner der erwähnten Funktionen sieht aus wie ein ISR.
Kann jemand mich auf ein gutes Dokument verweisen, wo diese Art der Arbeit mit Treibern beschrieben wird? Danke vielmals.
Die API möge, dass Sie eine Funktion zu übergeben Zeiger auf eine von Ihnen definierte Funktion. Angeblich wird Ihre Funktion dann ausgeführt, sobald Sie eine CAN-Nachricht erhalten. Es wird vom Treiber aufgerufen, nicht vom Programmierer, daher der Begriff "Rückruf". Dies ist kein standardisiertes Verfahren, sondern etwas, das für Ihren speziellen Fahrer einzigartig ist. Sie müssen die Dokumentation über den Treiber lesen, um die Verwendung zu verstehen. Oder, wenn es keine Dokumentation gibt, verstehen Sie den Code. – Lundin