簡體   English   中英

QT 項目與 USB 連接

[英]QT project and USB connection

FTD2xx 驅動程序有問題。 我在 Fedora 26(64 位)和“2232H”設備的 FTD2xx 的最新版本中使用 QT(C++)。 構建方法也是:

qmake /Address/ProjectName.pro -r -spec linux-g++ CONFIG+=debug CONFIG+=qml_debug

問題:

FT_Status 在 ft_openex(....) 命令返回 0(FT_OK),但對於 FTD2xx lib 的其他功能返回 none_zero(FT_OK); 我的一段代碼:

FT_HANDLE   ftH;
FT_STATUS   ftStatus;
ftStatus = FT_OpenEx(const_cast<char*>("MYDevName"), FT_OPEN_BY_SERIAL_NUMBER, &ftH);
std::cout<<"FTST open:"<< ftStatus<<std::endl;
char a[10];DWORD b;
ftStatus = FT_SetBitMode(&ftH,0xff,0);
std::cout<<"FTST RESET:"<< ftStatus<<std::endl;
ftStatus = FT_SetBitMode(&ftH,0xff,0x40);
std::cout<<"FTST SPEED:"<< ftStatus<<std::endl;
ftStatus = FT_Close(&ftH);
std::cout<<"FTST CLOSE:"<< ftStatus<<std::endl;

And output :
FTST open:0
FTST RESET:1
FTST SPEED:1
FTST CLOSE:1
ftStatus =1 ;means FT_INVALID_HANDLE.
and
Command <<rmmod ftdi_sio >> is using.
and
Lib directory: /dev/local/lib
and
QT setting:
LIBS += -L$$PWD/../../../usr/local/lib/ -lftd2xx
INCLUDEPATH += $$PWD/../../../usr/local/include
DEPENDPATH += $$PWD/../../../usr/local/include

FT_HANDLE是 FT_OpenEx 中的FT_OpenEx參數。 您正確傳遞&ftH以便 function 可以覆蓋ftH

FT_HANDLE是其他函數的輸入參數。 您錯誤地通過&ftH並且應該只通過ftH

FT_Close(&ftH); FT_Close(ftH);

不幸的是FT_HANDLE以松散類型的方式定義:

typedef void* PVOID;
typedef PVOID FT_HANDLE;

由於void**隱式轉換為void* ,編譯器無法幫助您發現此錯誤1 一般來說,不透明句柄類型應聲明為

typedef struct AlwaysIncompleteType * MY_HANDLE;

然后指針和雙指針類型將適當地不兼容。


1更糟糕的是,在 C 中,從void*void**的反向轉換也是隱式的,您可以調用FT_OpenEx(..., ftH)可能會導致立即訪問沖突(也稱為分段錯誤)並可能導致在不可預知的 memory 損壞中。 至少 C++ 做對了……但是void*仍然不利於強類型檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM