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、内存溢出,像诸如方法的递归调用、数据量太大、以及偶然性内存溢出。
解决办法:首先多运行几次,如果都出现异常错误,就可排除偶然性内存溢出。如果不是偶然性内存溢出,你就得查看源代码那些可能导致内存溢出的地方,并纠正。