我正在开发一个使用this硬件驱动程序的嵌入式项目。我在这个库周围编写了一个包装器模块(C ++为C,没有对象),可以轻松地将它与我的项目集成。但是,为了简单起见,我将C包装器代码编译为C ++,以便从C语言调用C ++的问题。
基本上我尝试做的是有一个 init 函数,它初始化驱动程序代码并保持静态句柄,以便在同一个翻译单元中使用其他函数。我绝不是C ++专家,但我对目前的问题感到困惑。
这是我正在做的一个例子:
static ILI9341_t3 *tft;
void display_init(void){
ILI9341_t3 _tft = ILI9341_t3(TFT_CS, TFT_DC, TFT_RST, TFT_MOSI, TFT_SCLK, TFT_MISO);
_tft.begin();
_tft.fillScreen(ILI9341_BLACK);
_tft.setTextColor(ILI9341_YELLOW);
tft = &_tft;
}
void display_clear(void){
tft->fillScreen(ILI9341_BLACK);
}
此代码编译没有问题,但 display_init 之后与屏幕的任何交互都没有结果。这种用法是否在C ++中未定义?在离开init函数的范围后,可能导致对象失效的原因是什么?
如果我将整个对象初始化放在静态上下文中,这段代码似乎有效,但我不相信这是最好的选择。