在使用keil编译仿真烧录过程中遇到的报错及解决方法,脑子RAM不够加之数据易丢失,故在此记录一下,日后再有这些错误即可快速查看!持续更…

Error 65

Error 65: access violation at C:0x0144 : no ‘execute/read’ permission

Solve:
仿真时出现的问题,对于C:0x0144区域没有读的权限
在调试界面,菜单栏选择Debug,选择Memory Map…
按照Map Range的格式写入需要启动权限的区域,勾选可操作的权限后点击Map Range即可。
在这里插入图片描述

在这里插入图片描述

Error: C3906U

Error: C3906U: Malformed via file’…\obj\system_stm32f4xx.__i’.
Solve:原因是因为使用了中文路径,改为英文路径(文件夹全部改为英文名称)即可解决问题。

Error:L6050U

Error: L6050U: The code size of this image (35032 bytes) exceeds the maximum allowed for this version of the linker.

Solve:详见这位大佬的解决方法

Error: L6200E

Error: L6200E: Symbol ov2640_yuv422_reg_tbl multiply defined (by yuv422.o and ov2640.o).

Solve:
问题是结构体ov2640_yuv422_reg_tbl被多次定义,原因是ov2640_yuv422_reg_tbl 是在ov2640cfg.h定义,而这个头文件被包含了两次(ov2640和yuv422)。头文件中最好不要定义变量或函数,若定义了,那么该头文件最多只可被包含一次。头文件一般用来声明函数或声明extern变量等。

Error:L6218E

Error:Undefined symbol DMA_Cmd (referred from usart2.o).

Solve:在工程的库里添加stm32f10x_dma.c文件即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后找到stm32f10x_dma.c添加进去就可以

Error: L6406E

Error: L6406E:No space in execution regions with .ANY selector matching usart.o(.bss).

Solve:
这个错误是因为空间不够,解决方法来着这位大佬
魔法棒---->C/C++ ---->optimization
调整优化选项,优化后编译器会自动识别在这个文件中用到的东西来进行编译,没有用到的部分就不会进行编译了,这样编译链接的数据量就会小很多,空间不够的问题即可迎刃而解。
在这里插入图片描述

Error: #7

Error: #7: unrecognized token
Solve:
这个错误是copy-paste的时候,中间有中文、其他不能识别的字符或某些看不见的字符导致keil 编译的时候出错。
找到那一行,删除那些不可见的字符或者替换变量名称即可。

Error: #77-D

Error: #77-D: this declaration has no storage class or type specifier

Solve:
意思是此声明没有存储类或类型说明符,我出现这个问题的原因是在函数外给变量赋值。
只有在定义全局变量时才可以在函数外给变量赋值(定义的同时赋值),其他情况变量的赋值不可再函数外。

Error: #127

Error: #127: expected a statement
在这里插入图片描述
Solve:
一般来说,如果if后面有多个语句是一定需要加括号的;但如果只有一个的话可加可不加。However,将if后面的语句加上花括号就好了😂
在这里插入图片描述

Error: #167

Error: #167: argument of type “XXX” is incompatible with parameter of type "YYY”

Solve:
参数类型不匹配,调整参数的类型即可

Debugger Error

Debugger Error:
Internal command error./Error while accessing a target resource.The resource is perhaps not available or wrong access was attempted.
在这里插入图片描述
在这里插入图片描述
Solve:
ST-Link下载烧录程序出现这样的问题时,若要使得可以下载只需按住复位键,点击load后再松开即可下载。
我出现这个问题的原因是程序只执行一次停在了最后,这时再main函数的最后加一句
while(1);
下次烧录该程序便不会出现这样的问题。

STLink上的红灯闪烁并且烧录不了

Problem:
STLink上的红灯闪烁并且烧录不了,打开Option——>Debug——>STLink Setting发现并没有识别到STLink
在这里插入图片描述
Solve:
(1)(因为我是用了集线器,所以)拔了集线器再重新插入就可以了//(直接接电脑的)可以拔掉再重新插入电脑
(2)上述不行的话就重启电脑

Flymcu下载程序失败_1

Problem:如下图所示,一直下不了
在这里插入图片描述
Solve:
最后发现是单片机我用其他供电,所以我就只用RXD、TXD与电脑通信,再接个地,使单片机与电脑共地就好了!

Flymcu下载程序失败_2

Problem:
下载了几次,出现的错误不尽相同
读芯片信息出错1
写入出错在 X KB,……
在这里插入图片描述
在这里插入图片描述
Solve:
单片机供电不足(供电电池电量过低,充个电回来就好了)

Warning: #1-D

Warning: #1-D: last line of file ends without a newline
Solve:
这个问题不大
文件的最后再加一个空行就可;
或明明最后有个空行但是还是会报错,这就有可能最后一行处有一或多个空格,删去即可。

warning: #9-D

Warning: #9-D: nested comment is not allowed
Solve:
不允许嵌套指令
原因是重复注释了

Warning: #111-D

Warning: #111-D: statement is unreachable
Solve:
该语句实现不到,可能是算法逻辑的问题

Warning: #177-D

Warning: #177-D: variable “i” was declared but never referenced
Solve:
问题是变量“i”定义了但没有使用
可能是此变量没有用到,那就直接删去即可,不删问题也不大。
也可能是变量在使用的时候拼写错误,改正过来即可。

Warning: #223-D

Warning: #223-D: function “LED_Init” declared implicitly
Solve:
在头文件中声明了该函数,但在main函数中引用的时候出现了这个问题
(1) 头文件忘记添加路径
(2) 头文件内容错误,比如我曾经:
在这里插入图片描述
改为⬇⬇⬇就解决问题了
在这里插入图片描述

Warning: #1295-D

Warning: #1295-D: Deprecated declaration MPU6050_Init - give arg types

Solve:
原因是这个函数在声明时没有加入 void 空白名

void MPU6050_Init();

改为⬇⬇⬇就解决问题了

void MPU6050_Init(void);
宏错误

宏定义时参数只能写一行,写多行时虽然不会报错但出现一个红色的×。在每一句的后面加上一个“\”即可。

#define Example(a)	
		if (a)	\
		GPIO_SetBits(GPIOB,GPIO_Pin_12);\
		else		\
		GPIO_ResetBits(GPIOB,GPIO_Pin_12)
如何在keil使用三角函数等

直接 #include “math.h”
该头文件包含的数学函数可见链接

如何修改工程名称

可以参考一下这个大佬的方法,很nice!

如何在Debug的时候将一个参数添加到窗口

开启Debug后,选择参数,【右键】➡️【Add XXX to …】➡️选择一个窗口即可

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐