我正在爲運行在stm32上的嵌入式應用程序開發可視化調試器。 因此,調試器將在PC上運行,重複使用與主應用程序相同的代碼,但觸發硬件反應的低級功能除外,並且將爲GUI(QT)發送信號。創建一個類的多個實現,一個發送Qt信號,一個直接與硬件一起工作
我正在尋找一種模式或乾淨的東西,可以讓我在代碼中沒有大的#ifdef。
因此,要舉一個例子:
我有gpio.h和gpio.c文件與STM32低級別的東西打(他們是半產生由stmCube所以我不能完全改變它們)。
(C code)
void GPIO_set_realy_state(int relay, bool state)
{
HAL_GPIO_WritePin(port,relay,state?GPIO_PIN_SETGPIO_PIN_RESET);
}
我有一個C++包裝他們上面(GpioWrapper)每當需要的應用程序來改變一個IO
GpioWrapper::setRealyState(int relay, bool state)
{
GPIO_set_realy_state(relay,state);
}
的狀態。在PC應用程序,被調用時,我想的另一個實施包裝器或類似的東西,而不是上面的那個來發送信號而不是調用使GUI改變圖標的低級功能。
GpioWrapper::setRealyState(int relay, bool state)
{
emit RelayTriggered(relay,state);
}
,我面對的是,發送信號的問題,我的類需要繼承自QObject,它不能因爲這部分有沒有Qt的世界的線索,在使用時,GpioWrapper.h的情況下嵌入式應用程序,如果可能的話,我想避免在我的包裝中使用#ifdef #else。
什麼可能是更清潔的方式來解決?
一般建議是儘量避免混用GUI和應用程序算法。雖然如果您在嵌入式系統中擁有基類,那麼可以通過GPIO驅動程序和GUI同時繼承該基類。在一種情況下,它切換實際的I/O引腳,在另一種情況下,它顯示一些奇特的東西。 – Lundin
確切地說,我想要的是,只有低級別的函數被覆蓋,所有的應用程序邏輯保持不變。所以,是的,正如@ Chajnik-U提出的,我將用一種抽象類來實現兩種不同的方式和一種靜態方法來檢索正確的實現。 –