从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述).与ANSI-C稍有不同,它只分SAMLL.COMPACT.LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果. 在51系…
引言    8051内核单片机是一种通用单片机,在国内占有较大的市场份额.在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功.由于51内核单片机的存储结构的特殊性,Keil C51中变量的使用与标准C有所不同.正确地使用变量,有利于获得高效的目标代码.下面详细介绍Keil C51中变量的使用方法. 1 CPU存储结构与变量的关系    变量都需要有存储空间,存储空间的不同使得变量使用时的工作效率也不同.    标准C的典型运行环境是8086(含IA-32系列)内核,其存储结构是CP…
指针是C语言中比较难的一个内容,Keil C51在指针方面有和标准C不一样的地方,今天看了一些资料学习了一下Keil C51 中指针的使用. keil51的指针,包含两种指针:普通指针,兼容标准C:内存特殊指针 1 普通指针 char * ptr; //指针占3字节,第一字节是标识存储类型,第二字节是存储地址高位字节,第三字节是低位字节 char * xdate ptr; //指针存储在片外,xdate 是修饰ptr的 char * idate ptr; //指针存储在片内,指针指向的数据可以是…
从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述).与ANSI-C稍有不同,它只分SAMLL.COMPACT.LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果. 在51系…
转自关于keil中data,idata,xdata,pdata,code的问题 ‍从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述).与ANSI-C稍有不同,它只分SAMLL.COMPACT.LA…
从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述).与ANSI-C稍有不同,它只分SAMLL.COMPACT.LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果. 在51系…
C51单片机中data.idata.xdata.pdata的区别 data: 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小. idata: 固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同.idata是用类似C中的指针方式访问的.汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好) xdata: 外部扩展RAM,一般指外部0x0000-0xff…
从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的pdata类型,使用不同的存储器,将使程序执行效率不同,在编写C51程序时,最好指定变量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述).与ANSI-C稍有不同,它只分SAMLL.COMPACT.LARGE模式,各种不同的模式对应不同的实际硬件系统,也将有不同的编译结果. 在51系…
在51系列中data,idata,xdata,pdata的区别: data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码 也最小. idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访 问的方式不同.idata是用类似C中的指针方式访问的.汇编中的语句为: mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好). xdata:外部扩展RAM,一般指外部0x0000-0xf…
引言 8051内核单片机是一种通用单片机,在国内占有较大的市场份额.在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功.由于51内核单片机的存储结构的特殊性,Keil C51中变量的使用与标准C有所不同.正确地使用变量,有利于获得高效的目标代码.下面详细介绍Keil C51中变量的使用方法. 1 CPU存储结构与变量的关系 变量都需要有存储空间,存储空间的不同使得变量使用时的工作效率也不同. 标准C的典型运行环境是8086(含IA-32系列)内核,其存储结构是CPU内部有寄存器,外…
最近写一个关于单片机播放音乐的程序,出现如下错误: *** ERROR L107: ADDRESS SPACE OVERFLOW ... ... Program Size: data=167.6 xdata=0 code=5314 Target not created 仔细想想,我用的是AT89C52,片上RAM有256字节,应该不会overflow啊,如果将Keil的编译模式选用compact或large则编译可以顺利通过,但生成的HEX文件无法使用. 关于此问题,网上的有关信息如下: Kei…
如何在 KEIL C51(v6.21) 中调用汇编函数的一个示例 有关c51调用汇编的方法已经有很多帖子讲到,但是一般只讲要点,很少有对整个过程作详细描述,对于初学者是不够的,这里笔者通过一个简单例子对这个过程进行描述,希望能对初学者有所帮助.几年来,在这个论坛里笔者得到很多热心人指导,因此也希望藉此尽一点绵薄之力. 在这个例子里,阐述了编写c51程序调用汇编函数的一种方法,这个外部函数的入口参数是一个字符型变量和一个位变量,返回值是一个整型变量.例中,先用c51写出这个函数的主体,然后用SRC…
函数指针在C语言中应用较为灵活.在单片机系统中,嵌入式操作系统.文件系统和网络协议栈等一些较为复杂的应用都大量地使用了函数指针.Keil公司推出的C51编译器是事实上80C51 C编程的工业标准,它针对8051系列CPU硬件在标准ANSI C的基础上进行了扩展:但由于编译器及8051体系结构的限制,造成了在使用函数指针时有很多与ANSI C不同的地方.下面举例说明在不同的情形下函数指针的使用.以下代码均在Keil μVision3.v8.08 C51.默认优化等级的开发环境下验证通过. 1.指向…
code是KEIL C51 扩展的关键字,用code修饰的变量将会被放到CODE区里.但C语里的const关键字好像也有定义不能改变的变量的功能,这两个关键字有什么区别呢?在帮助手册里查找const,可以找到以下的描述1 Variables declared with the const type qualifier alone are stored in the memory area (data, idata, xdata, and so on) associated with their…
一.引言 单片机软件开发过程中,软件调试遇到的各种问题常令初学者感到不知所措.实际上.各种仿真开发软件的程序调试基本方法和技巧大同小异,掌握正确的程序调试基本技巧.对于排查这些程序错误问题可以起到举一反三.事半功倍的效果.软件调试是单片机技术人员必须掌握的重要基本技能. 下面以单片机常用开发软件Keil为例,通过一个项目任务实例来介绍单片机软件仿真与调试的方法. 二.Keil仿真与调试 点击运行软件Keil uVision2.其调试操作步骤大体可以分为5步: 1.创建工程 在项目开发中,并不是仅…
摘要:散列(hash)是一种重要的存储方法,也是一种常见的查找方法.它是指在记录的存储位置和它的关键字之间建立一个确定的对应关系.本文以射频卡门禁控制器为例,说明用射频卡卡号作为关键字,用Hash查找法确定此卡能否开门,并给出对应的Keil C51程序. 单片机应用系统中,经常要涉及到数据的存储和查找.以射频卡门禁系统为例,见图1.系统由51系列单片机.射频卡(RF卡)读卡电路.存储单元24C256.继电器等部分组成.其基本原理为:用户刷卡后,RF卡读卡电路读出卡号,通过I/O口线送入单片机.单…
本文是网上转载,版权所有. Keil环境中建立带FreeRTOS的STM32L项目 1.先把source文件夹复制至project目录,然后在keil中添加RTOS文件,如图: 其中heap_2.c按需选择,可以是heap_1.c等,若需croutine型任务则还需添加croutine.c文件. 2.添加include目录,位于source下的include文件夹. 3.把FreeRTOSConfig.h文件复制到source下的include文件夹,或者其他用户文件夹下也可,这是FreeRTO…
当本地安装的excel(2013版) 是64-bit时:出现的以下两种错误 解决: 1. excel 导入数据库 , 如果文件是2007则会出现:“The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine” , (文件是1997-2003类型的没有问题) 2.  SSIS 中 excel data source 建立数据源无法识别其中的sheet ==>解决办法都是 需要去微软官方网站下载并安装驱…
在keil 4中添加stc系列芯片的方法: 1.从官网下载uv3.cdb的文件网址是:http://www.stcmcu.com/ 2.下载好后把uv3.cdb文件改成STC.cdb:3. 然后将[STC.cdb]放入[keil4]--[UV4]中:4.有些 keil 4 可能只有[ARM]和[UV4]这两个文件夹,那么我们之前安装过 keil 3 的朋友里面找到[c51]的文件夹将其复制到[keil 4]中,于此同时,下面这一步是很重要的,最好备份一下你的[TOOLS.INI]文件, [UV2…
在Realview MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件.虽然这两个格式的文件非常有利于ULINK2仿真器的下载和调试,但是ADS的用户更习惯于使用*.bin格式的文件,甚至有些嵌入式软件开发者已经拥有了*.bin格式文件的调试或烧写工具.为了充分地利用现有的工具,同时发挥Realview MDK集成开发环境的优势,将*.axf格式文件或*.hex格式文件转换成*.bin格式的文件是十分自然的想法.本文将详细的探讨这种转换方法. 在Rea…
关于真机调试DDMS中的data文件夹打不开的解决方法 今天在开发的时候需要导出程序中的数据库文件查看数据,数据库文件默认就在/data/data/应用包名/databases/数据库名 这个路径下,我就去DDMS下面去找.就发现死活打不开data文件夹,最后查出来是因为data文件夹的权限问题.需要修改文件夹的权限.具体步骤如下:…
谈谈WCF中的Data Contract(3):WCF Data Contract对Collection & Dictionary的支持 在本篇文章上一部分Order Processing的例子中,我们看到原本已Collection形式定义的DetailList属性(public IList<TDetail> DetailList),在Data Contract中却以Array的方式体现(public OrderDetail[] DetailList).我们现在就来详细地讨论一下基于C…
首先得说一下,以前都没有遇到过类似的问题,但是看到有个同学曾经满篇的乱码那叫个心疼. 这里我所说的办法其实只是格式转换的问题,对于其他原因造成的,可能会在以后遇到的时候再来处理了.另外,在将代码文件转换成UTF-8之前还要把Keil的环境也设置成UTF-8的模式,方法是:“Edit”——〉“Configuration...”——〉“Encoding”,选择“Encode in UTF-8 without signature”——“OK”即可. 接下来的方法也很简单,随便使用一款代码编辑器(!=W…
在KEIL C中,有多个源文件使用到全局变量时,可以在一个源文件中定义全局变量,在另外的源文件中用extern 声明该变量,说明该变量定义在别的文件中,将其作用域扩展到此文件. 例如:有以下两个源文件test1.c,test2.c //test1.c char aaa; //定义aaa func1() { char bbb; aaa = bbb; } //…… //test2.c extern char aaa; //把aaa的作用域扩展到此 func2() { char ccc; aaa =c…
keil A51中条件编译指令IF与$IF的区别:1.IF和$IF是不等价的,不要混淆了;2.带前缀$的条件编译$IF用法:(汇编器指示命令Assembler Directive)只能用来测试由$SET和$RESET指令定义的符号.$SET使用方法:Options — A51 — Set. SET (symbol <<= number>> << ,symbol <<= number >> ... >>) $RESET使用方法:Opti…
刚才看到一位很牛的师兄写的一篇日志中提到了Keil C51中using这个关键字的用法,粗心的我本来一直都没有留意它是用来干嘛的(因为我一般看见它都是在中断服务函数的定义开头处,好像没有了它也可以中断呀,所以才没怎么管),然而在日志中有看到这个关键字,所以也考究了一下,突然发现,原来这个东东和我最近在帮一个同学调的一个程序的时候突然遇到一个很怪的问题是有关系的,而且就是因为它才搞得程序莫明奇妙的出错(因为编译通过了,看起来也没什么错误,按C语言的逻辑分析也分析不出个什么所以然来,所以才怪). 后…
keil MDK版本:V4.03 PC-lint版本:  V8.0 关于pc-lint的强大作用,网上有很多,这里不想再复述,只说一句:能通过pc-lint检验的程序不一定没有问题,但通过了pc-lint检验的程序,质量的提高也是不言而喻的. 首先安装keil MDK和PC-lint这两个软件,网上的PC-lint大多是安装好的压缩包,直接解压到C盘即可.请支持正版!!(咳,心虚中...) 方法十分简单,因为keil MDK中已经给出了pc-lint对应keil ARM编译器的配置文件:CO-K…
源:keil mdk中如何确保某一段程序不被优化掉 使用mdk编程,假如有一个有用的函数你定义了但是没有显式的调用,mdk在默认方式下,将会把这个函数从整个程序总删除掉,以节省ROM. 比如,你在ROM的0x00002000处定位了一个函数,假设为void test(void),然后使用函数指针来调用它: void (*UserProgram)();          //函数指针 UserProgram = (void (*)()) (0x00002000);//定位到指定的入口地址0x000…
今天查看一些网站的css中发现了 background-image:url(data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAABIdFAMAAAAGXR FWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJRE FUeNo8zjsOxCAMBFB/KEAUFFR0Cbng3nQPw68ArZdAlOZppPFIB hH5EAB8b+Tlt9MYQ6i1BuqFaq1CKSVcxZ…
1.进入Eclipse工具,打开Data Source Explorer.Window==>Show View==>Data Source Explorer(注:如果找不到请选择Other寻找.) 2.按照第一步操作后会出现如下视图: 3.选中Database Connections,右键点击New. 4.按照步骤3操作后弹出如下图框.这里我连接的数据库是MySQL,所以选择MySQL,命名可以随意,建议取一个简单有明确意义的名称.之后点击“Next”按钮进入下一步. 5.继续操作后进入下图:…