因为DEP是数据执行保护机制,它的保护下,应用程序的有些 *** 作是不允许执行的。编译生成的文件:plg;编译器编译结果hex和bin;可执行文件:map和lst。
程序员将产品的逻辑 *** 作抽象为C代码,然后通过编译器的编译和链接,生成微处理器可执行的机器码。
在典型的应用程序中,编译器或汇编器将程序的源代码(例如C或汇编语言)转换为机器代码,并将其输出到一个文件中。然后,这个文件由程序员导入,以将机器代码“烧录”到ROM中,或传输到目标系统以进行加载和执行,这个存放机器码的文件就是烧录文件。在C语言里,如果直接写P10,C编译器并不能识别,而且P10也不是一个合法的C语言变量名,所以得给它另起一个名字,这里起的名为led,可是led是不是就是P10呢?你这么认为,C编译器可不这么认为,所以必须给它们建立联系,这里使用了Keil C的关键字sbit来定义
但sbit 要在最外面定义,就是说必须定义成外部变量因此不能放到main函数里面,这样就是局部变量了。
望采纳!点击全局编译按钮
,完成后在相应目录文件夹(之前存放hex文件的路径)下即可看到生成的ethernetlib文件。
6、lib文件生成后,还需h文件,h文件有两种方式,一种是保留之前c文件对应的h文件,继续照常使用,另一种是可将单独的h文件合并成一个新的etherneth,直接在mainc调用etherneth即可。
7、将lib文件剪切放到Ethernet文件路径下,将之前的socketc、w5500c等文件删除掉,头文件换成etherneth,工程里将ethernetlib加入到group(ethernet文件夹)里。
8、将取消编译的文件重新打开,将编译后文件类型改回hex文件,然后全编译,没有错误即完成。
另外,若想将一个c文件生成一个lib文件,只需保留该c文件进行编译,h文件也保持不变,将工程中原先的c文件替换成lib文件即可。
用心写好每篇文章,分享给需要的你☺,如果对您有用希望能留下您的脚印(点赞/评论/收藏)!
stm32
c语言
keil mdk
嵌入式
注意!注意!你有一个手机待领取
巨摩互动
广告
Keil对lib封装库反汇编成C语言pdf
502下载·22评论
2013年5月6日
把c++的exe工程编译为动态库dll静态库lib,并实现调用(超详细)
2087阅读·0评论·1点赞
2020年8月28日
源代码封装成库Lib的方法
504阅读·0评论·0点赞
2022年10月14日
STM32/keil把多个c文件编译为静态库lib
2190阅读·0评论·6点赞
2021年1月5日
C/C++ 静态库(lib)的概念和使用方法
3432阅读·0评论·4点赞
2022年5月2日
Keil 下生成LIB库文件以及如何使用LIB库文件
732阅读·1评论·0点赞
2020年12月19日
注意!注意!你有一个手机待领取
巨摩互动
广告
C语言 之 编译自己的lib库
1457阅读·0评论·1点赞
2020年8月7日
CMake交叉编译简单教程
32W阅读·2评论·14点赞
2018年9月7日
如何将c语言封装成dll文件,封装动态库dll与静态库lib(原理及简单实例)
2069阅读·0评论·1点赞
2021年5月21日
keil C对lib封装库反汇编成C语言,Keil软件“C语言”及“汇编”混编 —— 相关知识整理doc
1587阅读·0评论·0点赞
2021年5月21日
keil 加密:编译代码成lib库
454阅读·0评论·0点赞
2022年7月28日
Keil C 里面Lib库文件的生成与调用
11下载·0评论
2020年8月4日
keil C对lib封装库反汇编成C语言
101下载·4评论
2011年4月8日
C语言编译lib库手动添加
1888阅读·0评论·0点赞
2017年6月18日
基于Keil下多文件打包生成Lib库文件的具体 *** 作
2667阅读·3评论·2点赞
2020年1月18日
Windows DOS命令行编译C/C++程序----库文件lib的链接
1752阅读·0评论·0点赞
2019年2月21日
keil把源代码生成lib的方法
2754阅读·0评论·6点赞
2022年1月25日
keil 编译生成 lib文件
2244阅读·4评论·1点赞
2018年1月8日
keil多文件编译
724阅读·0评论·1点赞
2022年4月3日
在keil中将文件封装为lib库文件需要注意的地方
1395阅读·0评论·0点赞
2021年11月15日
去首页
看看更多热门内容
评论1
YJer
赞
你好,第6点中提到的,将单独的h文件合并成一个新的etherneth,你只是打开了源文件,但是没有将源文件导入你的工程,所以提示这个错误
导入文件的选项在右边project框里面,右键点Source Group 1,选Add Files 添加你的源文件就行了这问题我之前也遇到过,估计是你的keil c的版本问题,现在的keil c90应该没有这个问题了,你可以试一下。 另外,估计跟你的软件代码的长短也有问题,如果软件代码很大的话,那编译起来也是需要点时间的喔,希望能帮到你!链接中给出代码,经过编译,没有显示任何错误。
复制粘贴如下:
#include <reg52h>
#include <intrinsh>
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 (本次测试采用晶振为110592)
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(P31)无上拉能力,必须在P31端接上拉电阻。本次测试需要接上拉电阻
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);
}
}
上述代码,没有任何修改,完全是题目链接里面所给出的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)