导航:首页 > 源码编译 > keil5编译有一个错误

keil5编译有一个错误

发布时间:2022-08-20 14:37:39

❶ 有一个程序,我在keil上编译的时候有一个错误,但不知道在怎么改,求大神们帮忙看一下!!

链接中给出代码,经过编译,没有显示任何错误。

复制粘贴如下:

#include <reg52.h>

#include <intrins.h>

unsigned char tmp;

unsigned int c=0;

sbit led1=P2^0; //指示灯0

sbit led2=P2^1; //指示灯1

sbit led3=P2^3; //指示灯3

void init(); //串口初始化

void send(unsigned char a); //单字节发送函数

void ctrl(); //接收处理函数

void main()

{

init();

while(1)

{

if(RI==1) //是否有数据到来

{

RI = 0;

tmp = SBUF; //暂存接收到的数据

ctrl();

}

}

}

void init() //串口初始化

{

ES=0; //关中断

SCON = 0x50; // REN=1允许串行接受状态,串口工作模式1,

//10位UART(1位起始位,8位数据位,1位停止位,无奇偶校验),波特率可变

TMOD = 0x20; //定时器1工作于方式2,8位自动重载模式,用于产生波特率

TH1=TL1=0xFD; //波特率9600 (本次测试采用晶振为11.0592)

PCON &= 0x7f; //波特率不倍增

TR1 = 1; //定时器1开始工作,产生波特率

//发送标志位置0

TI=0; //接收标志位置0

RI=0;

//EA=0;

ES=1;

led1=0; //初始化设置3个指示灯全亮

led2=0;

led3=0;

}

void send(unsigned char a) //单字节数据发送

{ //注意:若单片机TXD(P3.1)无上拉能力,必须在P3.1端接上拉电阻。本次测试需要接上拉电阻

TI=0;

SBUF=a;

while(TI==0);

TI=0;

if(c%2) //发送指示灯标志,每接收一次,此灯亮灭交替

led3=1;

else

led3=0;

c++;

}

void ctrl() //接收处理函数

{

switch(tmp)

{

case '1':

led1=1; //收到字符1,指示灯0灭

send(tmp);

break;

case '2': //收到字符2,指示灯1灭

led2=1;

send(tmp);

break;

case '3': //收到字符3,指示灯0、1亮

led1=0;

led2=0;

send(tmp);

break;

case '4': //收到字符4,指示灯0、1灭

led1=1;

led2=1;

send(tmp);

break;

case '5': //收到字符5,指示灯3亮

led3=0;

send(tmp);

break;

default: //其他,灯全灭

led1=1;

led2=1;

led3=1;

send(tmp);

}

}

上述代码,没有任何修改,完全是题目链接里面所给出的。

❷ Keil 5 编译时出错

未定义Display_char等3个函数,调用之前加上定义,可以在文件最前面。

❸ 用keil5 STM32F107系列芯片编译一个指令时提示错误为 A1105E: Area directive missing 怎么解决

STM32调试过程中常见的问题及解决方法 一、 在“Debug选项卡”下设置好仿真器的类型后,下载程序时却提示“No ULINK Device found.”
解决办法: Keil MDK默认使用ULINK仿真器下载程序,在“Project --->Option for Target 'xxx' --->Utilities选项卡”下把编程所使用的仿真器改为相应的类型即可。
二、 编译工程时提示如下信息:
main.axf: Error: L6218E: Undefined symbol __BASEPRICONFIG (referred from stm32f10x_nvic.o).
main.axf: Error: L6218E: Undefined symbol __GetBASEPRI (referred from stm32f10x_nvic.o).
main.axf: Error: L6218E: Undefined symbol __RESETFAULTMASK (referred from stm32f10x_nvic.o).
main.axf: Error: L6218E: Undefined symbol __RESETPRIMASK (referred from stm32f10x_nvic.o).
main.axf: Error: L6218E: Undefined symbol __SETFAULTMASK (referred from stm32f10x_nvic.o).
main.axf: Error: L6218E: Undefined symbol __SETPRIMASK (referred from stm32f10x_nvic.o).
解决办法:工程缺少“cortexm3_macro.s”文件,把cortexm3_macro.s和STM3210x.s全部添加到工程即可。
三、调试器不能连接到STM32的问题与解决办法
很多人都碰到过调试器不能连接到STM32的问题,不管是IAR的J-Link还是Keil的ULink,或者是ST的ST-Link。出现这个问题时,调试软件会提示不能建立与Cortex-M3的连接,或提示不能下载程序,或提示找不到要调试的设备等。
这样的问题都是发生在调试那些可以在CPU不干预的时候自动运行的模块、或在调试低功耗模式的程序的时候。所谓“可以在CPU不干预的时候自动运行的模块”包括:DMA、定时器、连续转换模式下的ADC、看门狗等模块。
--------------------------------------------------------------------------------
这个问题的根源是:
1. 调试器需要在RAM内执行一段程序,对Flash进行擦写操作,如果不停止这些自动运行的模块,它们会干扰程序在RAM中的执行,致使下载失败。比如DMA模块被配置为不停地拷贝一段数据区,而调试器刚好需要使用DMA数据传输的目标区域,这时DMA的操作将会与调试器的操作发生冲突。再比如,如果启动了看门狗而没有执行硬件复位,则在下次调试器需要下载程序时,看门狗超时将触发芯片复位,导致下载操作失败。
2. 低功耗是通过停止CPU的时钟而实现,JTAG调试是通过与CPU的通信实现,停止了CPU的时钟致使调试器会失去与CPU的通信。

❹ Keil5编译的时候总是出现这个是什么情况啊

编译出错吧!你把led.c的后缀改成.h
把void LED_Init()的实现放在led.c里面

❺ keil编译时报错:error: L6002U: Could not open file .\***\core_cm3.o

历时好几次的碰壁,我终于解决这个问题了。

根据网络其他答案给的思路,其实就是修改环境变量,因为当前系统TEMP和TMP环境变量存在着中文。但是如果你直接修改 %USERPROFILE% 为其他英文路径开Keil会卡死并闪退(其实是你打开main.c就闪退)!!!

因为修改成别的一个英文文件夹是不行的,你只是在环境变量中修改了文件路径,但是电脑中这些路径并不存在,所以你打开Keil才会闪退。

那么解决问题的关键就是:先在系统C盘中创建好了所有的英文路径,再你创建的文件夹路径修改环境变量!!!


准备工作:先将你的Keil软件关闭


1、在【C盘根目录】创建【UserData】文件夹


点击确定后退出。

再次打开Keil编译即可不再报错,再次愉快写代码吧。


祝愿诸位万事如意。

❻ keil编译中出现错误怎么办

1、打开软件project-new project创建一个工程,并为其选择一个存放目录。

2、对工程进行一些配置(project-options for target ‘target 1’)在output选项下的“create HEX file”前打上对号,工程编译之后能够输出一个可以下载的“HEX”文件。

3、为工程添加.C,.h文件,右键单击“source group 1”,应该就可以了。

❼ 问一个keil5的编译错误的问题

提示指出了4个未定义的符号,在文件中无法识别到。
例如 stm32f4xx_it 中用到了 EXTI_ClearITPendingBit,但是从 stm32f4xx_it 这个模块的角度而言,它查不到你在哪里定义了这个符号,无法判断这个符号究竟是什么,也就无法进行连接。
一般而言都是包含关系有错误,或工程的搜寻路径配置有问题。

❽ keil5,编译出现错误,提示是段太大,怎么办

keil5,编译出现错误,提示是段太大,怎么办?如果是51单片机的话,因为RAM资源很小,所以要尽量节约每一个字节RAM,如果是常量数组就定义成常量,例如 code char datastr[2]={1,2};
如果有外部RAM,则定义到XRAM中,例如:xdata char datastr[2];
能用BIT就不要用char,能用char 就不要用Int。做单片机的话, 还是必须要了解一下其存储结构, 最起码得知道data idata xdata所指的存储区域
idata 指向的片内ram ,大小范围为256字节,所以你一个数组定义在idata段内,不能超过256字节,超过就会报错。
xdata指向的片外ram,大小范围为64KB,你可以将你需要的大容量数组定义在该段内

❾ 用Keil编程序时编译有错误,怎么才能知道错误是什么呢

每个错误都有自己的标号,你可以根据标号在keil提供的帮助文件中搜索有关的详细内容,按下F1会弹出帮助文档,文档都是英文写的。
另外你双击错误时光标会自动跳到keil认为的错误行,实际错误就在那一行的附近
或者你可以把你的错误放在网络里面搜一搜,一般都会得到。

阅读全文

与keil5编译有一个错误相关的资料

热点内容
linuxredis30 浏览:541
狸窝pdf转换器 浏览:696
ajax调用java后台 浏览:904
活塞式压缩机常见故障 浏览:614
break算法 浏览:731
换电池的app是什么 浏览:771
单片机ad采样快速发送电脑 浏览:22
第五人格服务器错误是什么回事儿 浏览:467
查看手机谷歌服务器地址 浏览:191
python操作zookeeper 浏览:706
苹果手机dcim文件夹显示不出来 浏览:430
如何压缩文件夹联想电脑 浏览:583
程序员的学习之旅 浏览:440
apkdb反编译 浏览:922
雪花算法为什么要二进制 浏览:825
在文档中打开命令行工具 浏览:608
android图标尺寸规范 浏览:369
python实用工具 浏览:208
流量计pdf 浏览:936
科东加密认证价格 浏览:532