概述
在使用keil编译仿真烧录过程中遇到的报错及解决方法,脑子RAM不够加之数据易丢失,故在此记录一下,日后再有这些错误即可快速查看!持续更…
快速导航
- Error 65
- Error: C3906U
- Error:L6050U
- Error: L6200E
- Error:L6218E
- Error: L6406E
- Error: #7
- Error: #77-D
- Error: #127
- Error: #167
- Debugger Error
- STLink上的红灯闪烁并且烧录不了
- Flymcu下载程序失败_1
- Flymcu下载程序失败_2
- Warning: #1-D
- warning: #9-D
- Warning: #111-D
- Warning: #177-D
- Warning: #223-D
- Warning: #1295-D
- 宏错误
- 如何在keil使用三角函数等
- 如何修改工程名称
- 如何在Debug的时候将一个参数添加到窗口
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’…objsystem_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 …】➡️选择一个窗口即可
最后
以上就是有魅力大侠为你收集整理的随手查_Keil编译报错的全部内容,希望文章能够帮你解决随手查_Keil编译报错所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复