在TouchGFX中使用C代碼
您可能已經知道,TouchGFX是用C ++實現的,而TouchGFX API也是C ++。這意味着至少直接與UI相關的代碼必須是C ++代碼。但是,並不需要整個系統都以C ++實現。
本文介紹了如何在應用程序中混合使用C ++和C。
基於任務的C和C ++分離
一個好的方法是在應用程序的UI任務中使用C ++,在所有其他任務中使用C。
UI任務顯然將與TouchGFX API緊密聯系在一起,因此主要是C ++代碼。如文章 “將UI連接到系統”中所述,我們建議使用OS提供的任務間通信機制在UI任務和其余系統之間傳遞數據。通常,這意味着在任務之間發送以C結構表示的消息/郵件。這樣的結構在C和C ++中都可以理解,因此可以在UI任務(C ++)和系統中的任何其他任務(C或C ++)之間提供方便且可移植的接口。
使用這種方法,您可以使系統中的所有非GUI代碼均為常規C代碼,而只有GUI任務為C ++。
從C ++調用C函數
如果確實需要從C ++代碼中調用C函數,則可以通過添加由extern "C"
以下內容包圍的函數聲明來輕松實現:
Codefile.cpp:
extern "C" { // function prototypes int func(); // OR include header files containing C function declarations #include <example.h> } /// func() and any functions in example.h can now be called from C++ code.
從C調用C ++函數
走另一條路需要更多的工作。嚴格來講不可能從C代碼調用C ++,因此您將需要創建一個使用C樣式名稱修飾的C ++包裝函數,從而使其可以從C調用。
Codefile.cpp:
// The extern declaration makes cpp_func callable from C extern "C" void cpp_func(); // C++ wrapper function implementation. void cpp_func() { // C++ code HAL::getInstance()->someFunction(); } mycode.c:
// Declaration of wrapper function void cpp_func(); //cpp_func() is callable from this C code file.
【來源】