OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 总结一些Keil IDE使用下的心得和遇到过的坑

共7条 1/1 1 跳转至

总结一些Keil IDE使用下的心得和遇到过的坑

工程师
2019-07-11 17:53:16    评分

1.Keil C内部延时函数直接调用库函数:
#include<intrins.h>       // 声明了void _nop_(void); 
_nop_();                  // 产生一条NOP指令
NOP指令为单周期指令
//
2.keil C中定义bit变量是有上限的,
查询资料是128个,实际使用时确实遇到过这个问题,多一个变量则编译器则会报错
解决办法:将bit 定义为 char
//
3.Keil C的data,xdata区别
data:内部低128字节RAM,可高速寻址
Xdata:外部扩展RAM,寻址速度较慢
PS:优先使用data,因为速度快,代码空间少( keil中定义变量时使用 idata unsigned char)
//
4.Keil C常量数组的定义(汇编理解的表格)
共2种方式:
const unsigned char tab[] = {  };
数组为只读,存放在RAM中;
code unsigned char tab[] = {  }; 
数组为只读,存放在ROM中;
//




关键词: keil          BUG     总结    

助工
2019-07-11 18:15:04    评分
2楼

我也来补充补充~ 


  1、第一部分 keil  启动代码Startup Code
   Startup code is executed immediately upon reset of the target system. The Keil startup code performs (optionally) the following operations in order:
启动代码是单片机复位后最先执行的代码,keil 中的启动代码通常按顺序 完成以下操作
•        Clears internal data memory (清空内部数据内存)
•        Clears external data memory  (清空外部数据内存)
•        Clears paged external data memory  (清空分页的外部数据内存)
•        Initializes the small model reentrant stack and pointer (初始化小模型可重入栈和指针)
•        Initializes the large model reentrant stack and pointer  
•        Initializes the compact model reentrant stack and pointer
•        Initializes the 8051 hardware stack pointer   初始化8051硬件栈指针
•        Transfers control to code that initializes global variables or to the main C function if there are no initialized global variables  
     将控制权交给全局变量初始代码段,或者如果没有全局代码初始段时交给c语言的main 函数
Following is a list of the startup files that are available. (keil 中可用的启动代码文件)
Startup File        Description
STARTUP.A51        Startup code for classic 8051 devices. (这个就是8051系列的启动代码文件了)
START_AD.A51        Startup code for Analog Devices MicroConverter devices.
START390.A51        Startup code for Dallas DS80C390/400/41x/5240/5250 contiguous mode devices.
START4XX.A51        Startup code for Dallas DS89C420/430/440/450 devices.
STARTLPC.A51        Startup code for NXP LPC700 devices series.
START900.A51        Startup code for NXP LPC90x - LPC93x devices series.
START950.A51        Startup code for NXP LPC95x - LPC99x devices series.
START_MX.A51        Startup code for NXP 80C51MX devices.
START751.A51        Startup code for NXP 80C75x devices.
START_XC.A51        Startup code for Infineon XC800 devices.
STARTUP32.A51        Startup code for ST uPSD32xx devices.
STARTUP34.A51        Startup code for ST uPSD33xx devices.
STARTUP34.A51        Startup code for ST uPSD34xx devices.
Copy the appropriate startup file from the \KEIL\C51\LIB\ folder into your project folder and make any changes to the copy.
Each startup file provides assembly constants you may change to control the operations performed at startup.
启动代码文件位于 \KEIL\C51\LIB\  , 你可以通过修改启动代码文件里的如下常量来匹配自己的程序
2、keil c51 拓展关键字
  To facilitate many of the features of the 8051, the Cx51 Compiler adds a number of new keywords to the scope of the C language:
为了帮助8051实现某些功能,CX51编译器增加了在C语言范围内的一系列关键词。
•        _at_
•        alien
•        bdata
•        bit
•        code
•        compact
•        data
•        far
•        idata
•        interrupt
•        large
•        pdata
•        _priority_
•        reentrant
•        sbit
•        sfr
•        sfr16
•        small
•        _task_
•        using
•        xdata


更多操作



助工
2019-07-11 18:16:59    评分
3楼

经验很好,少掉坑


助工
2019-07-11 18:19:47    评分
4楼

用过 SDCC, 虽然这是个免费的 C51 编译器, 但编译的代码效率于 Keil C51 相去甚远哦.  
不知道现在的新版本, 情况怎么样


助工
2019-07-11 18:23:46    评分
5楼

感谢楼主的分享


助工
2019-07-11 18:24:35    评分
6楼
1:针对STC的Startup.A51,初始化IDATA区,如果要使用STC MCU的芯片序列号,初始化长度改为0xF0,在执行完单片机初始化后,就要将序列号复制出来。
2:新版KeilC,在LX51 Misc页中的Misc Control 中填入"REMOVEUNUSED",可以链接时去除未用的函数。很方便的。



助工
2019-07-11 23:10:22    评分
7楼

可以的


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]