環境:vscode+clangd+EIDE開發開發單片機(C51 keilMDK?IAR)。
? ? ? ? vscode+遠程+clangd+arm-linux-gcc(交叉編譯工具鏈)。
(1)首先clang(clangd)是兼容gcc的,也就是兼容arm-linux-gcc(交叉編譯工具鏈),所以使用第三方軟件bear追蹤make編譯uboot或者內核源碼生成的compile_commands.json文件是完全可以被clangd識別的。
(2)clangd與kei C51的兼容性。經過我的測試使用vscode+EIDE+clangd導入C51工程后,生成的compile_commands.json文件雖然也能夠被clangd識別,但是存在好多錯誤例如找不到str、sbit這些關鍵字的定義,無法找到某些函數。我咨詢過EIDE論壇。他們的說法是clang并不兼容C51、ARMGCC(keil MDK的編譯器)、IAR編譯器(iccarm.exe),但是clang是兼容gcc的,因此建議我還是使用vscode的c/c++插件來追蹤keil c51的相關全局變量或者函數等。
我發現使用clangd插件追蹤vscode+keil C51工程在涉及到reg51.h頭文件中定義的內容或者keil C51軟件再帶的配置例如“code”關鍵字,clangd無法追蹤,另外需要自己在.clangd文件中添加頭文件路徑。其他的情況還好。
vscode的使用EIDE+c/c++插件對keil c51的函數追蹤效果也不好,有時候也找不到對應頭文件中函數聲明對應的函數定義。(可能是c/c++插件的一個bug,我發現只要打開函數定義所在的源文件,c/c++插件會形成一個緩存文件在“C:\Users\Administrator\AppData\Local\Microsoft\vscode-cpptools”中,這樣右鍵定義的時候就可以找到函數定義了,而不是跳轉到函數聲明。我找了好久也沒有好的辦法,不過可以通過安裝c/c++ GNU global或者c++ intellisense插件,環境變量PATH添加GNU Global的路徑就可以了。詳情請參考:https://zhuanlan.zhihu.com/p/680392005)。不過也需要使用c/c++插件。
vscode使用EIDE+Clangd插件導入keil C51工程無法找到<REG51.H>頭文件的問題 - Embedded IDE Forum
(3)vscode+EIDE+IAR+clangd。這個環境我最近也在測試,發現雖然clang不兼容IAR的編譯器,但是使用clangd追蹤過程中未發現明顯錯誤。因此我現在暫時還未使用c/c++插件。
(4)vscode+EIDE+Keil MDK+clangd。這個環境我最近也在測試,也是暫時未發現嚴重與clang的兼容型問題。因此我現在暫時還未使用c/c++插件。