_at_关键词用于在定义变量时指定变量所在地址。
_at_关键词使用示例如下:
struct link
{
struct link idata *next;
char code *test;
};
struct link list idata _at_ 0x40; /* 定义位于内部RAM低128字节区0x40地址处的 结构体 */
char xdata text[256] _at_ 0xE000; /* 定义位于外部RAM 0xE000地址处的 数组 */
int xdata i1 _at_ 0x8000; /* 定义位于外部RAM 0x8000地址处的 整型变量 */
volatile char xdata IO _at_ 0xFFE8; /* 定义地址为 0xFFE8的外部IO */
char far ftext[256] _at_ 0x02E000; /* 定义位于外部RAM 0x2E000地址处的数组 */
void main ( void ){
link.next = (void *) 0;
i1 = 0x1234;
text [0] = 'a';
IO = 6;
ftext [0] = 'f';
}
在一个.c文件中如上定义,在另一个.c文件中可用如下方法引用这些变量:
struct link
{
struct link idata *next;
char code *test;
};
extern struct link idata list;
extern char xdata text[256];
extern int xdata i1;
extern volatile char xdata IO;
关键字:Keil C51 _at_
引用地址:
Keil C51对C语言的关键词扩展之一: _at_
推荐阅读最新更新时间:2024-03-16 16:06
keil提示仿真器SWD/JTAG Communication Failure的问题解决
问题现象 在使用CMSIS-DAP仿真器的时候,经常出现连不上仿真器,很烦人,就算你重启MDK或者重启电脑,插拔主板的电源或者仿真器的usb连接线都无济于事。错误提示: 问题分析: 把可能出现硬件问题都一遍遍排除了,剩下就是软件问题了,莫非是MDK的配置问题,打开仿真器的设置 ,上面的设置似乎也没啥问题,只提示仿真器通讯错误。心里想:莫非是工程配置文件的问题?于是打开其他工程,下载,仿真,果然没问题。再打开刚才出问题的工程,问题依旧。这样可以确定是项目配置文件的问题,可能是之前仿真出错,强制关闭Keil导致项目配置文件出错了。 问题解决 最后定位到一个以“uvoptx”后缀的配置文件,把它拷贝到有问题的工程项目里,替换原
[单片机]
C51独立键盘按键检测示例
独立按键检测很简单.就是检测单片机的i/o口哪个是低电平然后就能判断是哪个键被按下了.当然还要去抖动,也就是要延时.不然会有很多误动作. 效果图: 电路图: 说下程序实现的功能: SW16是数码管+1 SW17是数码管-1 SW18是数码管清零 SW19是数码管自动+1 源代码 #include reg52.h #define uchar unsigned char #define uint unsigned int sbit key1=P3^2; sbit key2=P3^3; sbit key3=P3^4; sbit key4=P3^5; sbit P20=P2^0; sbit P21=P
[单片机]
使keil5支持51单片机
需要用到的工具:https://download.csdn.net/download/qq_33160790/10302877 PS:两个工具都是要用管理员身份运行。 keil5默认不支持51,51单片机的工程放到keil5会报错: keil5 --- Error: failed to execute 'G:keilC51BINC51.EXE' 安装方法: 1.运行c51v954a.exe,将路径选成之前keil5的安装路径。 2.使用keygen.exe破解License PS:管理员身份打开keil5 破解步骤: 将CID复制到破解机。 将生成的LIC拷贝至keil5。
[单片机]
Keil中Memory Model和Code Rom Size说明
C51中定义变量时如果省略存储器类型,Keil C51编译系统则会按编译模式SMALL、COMPACT和LARGE所规定的默认存储器类型去指定变量的存储区域,无论什么存储模式都可以声明变量在任何的8051存储区范围i,但是把最常用的命令如循环计数器和队列索引放在内部数据区可以显著地提高系统性能。以下介绍一下Keil编译选项Target中的Memory Model和Code Rom Size的设置。 Memory Model(存储器模式) SMALL模式 在本模式中所有的变量在缺省的情况下位于8051系统的内部数据区(这和用data存储类型标识符明确声明的一样,因此对这种变量的访问数据最快),在本模式中,变量访问非常有效,然
[单片机]
【单片机】Keil+Proteus流水灯(模块化编程)
本篇文章: 主要是Keil的模块化编程,同时实现了一个小实验,通过Keil模块化编程来实现流水灯(设计了三种流水方式)。 进入正文: 一、Proteus仿真图 1)在编写代码的时候,我们首先要做的就是绘图,绘制好模型图之后,才可以编写对应的代码。首先,在Proteus创建一个工程(PS:新手请看:Proteus和Keil分别创建单片机工程) 2)根据自己的要求,绘制指定的图形。此次做的是流水灯,请看图: (PS:如果对画图有难度的话,请查看:Proteus画图) 3)绘制好Proteus之后,开始Keil部分。 二、Keil的模块化编程 Keil模块化编程:对代码分开管理,每一部分都是一个完整的代码,需要使用的时候,最
[单片机]
C51问答
一、#pragma asm是什么意思? #pragma asm MOV P1,R7 NOP NOP MOV P1,#0 #pragma endasm 实际上就是一个在C51中内嵌汇编语言的开关 二、一个 hex to bcd 的算法程序 HEX_BCD:CLR A MOV 30H,A MOV 31H,A MOV 32H,A MOV R2,#15 H_B0: MOV A,R1 RLC A MOV R1,A MOV A,R0 RLC A MOV R0,A MOV A,32H RLC A ACALL BCD_ADJ
[单片机]
使用Keil MDK以及标准外设库创建STM32工程
1.1 使用Keil MDK以及标准外设库创建STM32工程 通过上一节对标准外设库的介绍,想必各位读者对标准外设库已经有了基本的认识,然而由于标准外设库中文件众多,很多初学者在开始很长一段时间内甚至都无法完全自己建立一个工程,很多人只是依赖标准外设库或给定的工程模板。本节就介绍怎样利用Keil MDK开发环境和标准外设库来搭建自己的工程。 建立一个基于标准外设库其实并不复杂,网络上也有很多关于怎样在Keil MDK下建立工程的教程,方法也各异,本节所介绍的方法本着少改动、便于使用、方便更换器件等原则,给大家介绍怎样在Keil中创建一个工程,并以一个最简单的例子来说明怎样下载和调试程序。 1.1.1 开发工具与开发环境 1. 软件
[单片机]
Keil模式设置和编程事项
深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一。因为大多数扩展功能都是直接针对8051系列CPU硬件的。大致有以下8类: 8051存储类型及存储区域 , 存储模式 , 存储器类型声明 , 变量类型声明 , 位变量与位寻址 ,特殊功能寄存器(SFR) ,C51指针 l 函数属性 具体说明如下(8031为缺省CPU)。 第一节 Keil C51扩展关键字 C51 V4.0版本有以下扩展关键字(共19个): _at_ idata sfr16 alien interrupt small bdata large _task_ Code bit pdata using reentrant xdata
[工业控制]