A. Keil 編譯STM32 遇到異常怎麼解決
這個問題一般出現在移動庫,或者將兩個程序合並的時候報錯
原因是舊版的庫與新版的庫發生沖突了,沖突的原因是舊版和新版都定義了同一個東西,比如「s32」,於是就會發生重定義的報錯
解決這個問題的方法其實也不難,因為編寫程序的時候有一個防止重定義的宏,在新版的庫裡面添加這樣的一個宏就可以消除大部分的錯誤了
我們先找到從定義的地方,雙擊錯誤跟蹤到報錯的地方我們可以看到這里就是type定義的地方,看到上面有一個「#ifndef __STM32F10x_TYPE_H」,這個就是舊版的宏,只要將這個宏在新版的相應位置定義一下就好
到新版的庫文件中,注意要消除只讀的設置,從錯誤來看,是「s32」發生了重定義,那麼就是說,新版的庫應該也是有「s32」的定義,於是用搜索功能,找到「s32」定義的地方
然後在這個定義的上方補充定義這個宏就可以解決一部分的問題了,添加這樣一段
#ifndef __STM32F10x_TYPE_H//補充定義舊版的宏
#define __STM32F10x_TYPE_H
#endif
#47-D: incompatible redefinition of macro "SCS_BASE" 的錯誤解決方法也差不多,補充定義舊版宏即可解決大部分問題,這次是在core_cm3.c文件中,注意解鎖
B. CompilationFailedException解決
在Gradle版本升級後,編譯運行項目時,提示org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed;但沒有列出錯誤的具體原因。我們無法根據現有的編譯log找陵槐出錯誤所在,如下:
根據報錯內容,可以看出是執行compileDebugjavaWithJava任務時報的錯誤。異常為:TaskExecutionException(任務執行錯誤)並被告知編譯失敗異常(CompilationFailedException)。
我們可以使用gradlew命令在命令行中來單獨執行報錯任務,並列印出具體錯誤信息,我遇到的報錯的taskName為compileDebugJavaWithJavac,那麼命令如下:
運行後會尺搭友看到具體的錯誤,如下:
我這邊遇到的問題單獨執行報錯任務後,也沒有具體詳細的錯誤信息(大部分異常可以直接看到詳細的錯誤信息)
但是可以看到lib_common模塊下databinding相關的報錯信息,於是解決android.databinding.tool.expr.Expr.resolveListeners(Expr.java:211)相關的異常,這個異常是因為在xml文件中使用了get()方法,去掉get()方法後重新編譯,編譯成功。
android.databinding.tool.expr.Expr.resolveListeners異常解決鏈接:
在編譯時遇到CompilationFailedException,並沒有詳細報錯信息時,單獨執行報錯任務
然後獲取到具體報錯信息後,解決相應的枝喊報錯問題,重新編譯。
C. 請問, 由於編譯過程中出現異常...異常消息為: 值不能為 null。 參數名: format。最後怎麼解決的
重新編譯一下!應該就能解決問題
D. 調試編譯程序都顯示沒有錯誤,可剛讓其運行就顯示該程序已停止工作,請高手指點這是怎麼回事。謝謝啦
有以下幾種情況供你參考,
1、JVM虛擬機出現錯誤,即Java開發環境出現錯誤,與你的程序無關,
解決辦法:只能試著重新安裝Java開發環境。
2、出現RuntimeException,像NullPointerException、等等,這類的錯誤在編譯時不顯示,運行才可能出錯。
解決辦法:根據異常信息尋找可能出現錯誤的地方。
3、內存溢出,像諸如方法的遞歸調用、數據量太大、以及偶然性內存溢出。
解決辦法:首先多運行幾次,如果都出現異常錯誤,就可排除偶然性內存溢出。如果不是偶然性內存溢出,你就得查看源代碼那些可能導致內存溢出的地方,並糾正。