自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 单片机中断子程序注意事项

跟我之前一样,对中断,定时器了解的不够透彻,被老师训了之后查资料搞实验后终于搞清楚了,下面说说我的看法:千万不要在中断函数中做多余的事!!!只能做最基本的操作,比如置标志位,让一个数加一等,与延时有关的操作千万不要做!你10ms进一次中断,在里面又扫描按键,又显示液晶,这里面花的时间远远地超过10ms,它肯定死在中断里出不来啊,因为你不关闭中断的话它一直10ms进去,最好在中断里设置几个标志位,进...

2020-03-29 22:59:37 782

转载 函数名并不是函数地址的代表,平时我们不都是把函数名作为函数的地址吗?函数名可以作为函数的地址,从函数到指针的隐式转换是函数名在表达式中的行为,就是说,这个转换仅在表达式中才会发生

函数名并不是函数地址的代表,这种误解与数组名就是指针一样犯了相同的错误。函数名是函数实体的代表,不是地址的代表,当然,你马上就会有疑问,平时我们不都是把函数名作为函数的地址吗?是的,我可以告诉你,函数名可以作为函数的地址,但是,绝大多数人都忽略了一个条件,从函数到指针的隐式转换是函数名在表达式中的行为,就是说,这个转换仅在表达式中才会发生,这仅是函数名众多性质中的一个,而非本质,函数名的本质就是函...

2020-03-28 11:27:29 3963 3

转载 普通变量、引用变量和指针变量作函数形参的区别。

普通变量是直接传值指针变量传递地址引用变量是隐式传地址,如void f(int &x),实际传递的是x的地址p,但是函数内部使用x时会自动变成*pvoid f(int &x) {x++}; 会变成void f(int *p) {(*p)++};...

2020-03-28 10:46:04 1390

原创 BCD码借用十六进制形式表示引出的单片机存储数据,数据数制,数据类型,数据编码分析

单片机存储数据都是二进制存储的。数据数制:二进制、十进制、十六进制等。数据类型:字符类型(一个字节)、整型(两个字节)、浮点类型(四个字节)。有无符号。数据编码:8421码,ASCII码,LED等显示字形编码。...

2020-03-25 11:06:17 790

原创 浮点型数据转换和共用体

如果已将数存入EEPROM,要将其取出合并,方法也是一样,可参考下面的程序。#define uchar unsigned char#define uint unsigned intvoid CtoF(void){ float a;uchar i,*pxuchar x[4]={56,180,150,73};void *pf;px=x;pf=&a;for(i=0;i<...

2020-03-25 09:04:03 1391

转载 51单片机学习9-keil4与proteus7.8的联调步骤(VDM51.DLL,TDRV8,use romote debuger monitor)

这篇我们keil4和proutes7.8的联调,为后续虚拟51开发板的搭建及调试准备,为学习51单片机开发培养兴趣。这里再次说下仿真软件是验证调试程序的,后续学习还是要用实物,至于是买开发板还是自己做,这个因人而异,个人整个学习下来还是推荐自己焊接。毕竟整个硬件和软件都走一遍,可能理解的更加透彻。言归正传,这里我们按照顺序先说下仿真软件的使用及调试。安装这两个软件,网上下载keil 4和pro...

2020-03-24 14:09:12 1138

转载 新型的按键扫描程序,仅三行程序 异或可以字节取反

新型的按键扫描程序,仅三行程序 异或可以字节取反新型的按键扫描程序不过我在网上游逛了很久,也看过不少源程序了,没有发现这种按键处理办法的踪迹,所以,我将他共享出来,和广大同僚们共勉。我非常坚信这种按键处理办法的便捷和高效,你可以移植到任何一种嵌入式处理器上面,因为C语言强大的可移植性。同时,这里面用到了一些分层的思想,在单片机当中也是相当有用的,也是本文的另外一个重点。对于老鸟,我建议...

2020-03-23 16:53:54 539

原创 KEIL 中C51编译器的限制

2020-03-23 10:29:25 402

原创 KEIL中 附录C51代码优化-局部变量Cx51编译器在优化时候总是企图用通用工作寄存器存放局部变量

2020-03-21 14:57:59 318

原创 C和C++共用头文件的extern "c"{}链接C标准规范而不是C语言

2020-03-21 14:38:37 381

转载 C语言头文件条件编译避免重复引用

C语言头文件条件编译避免重复引用原创xr_zy1110 最后发布于2016-04-14 17:35:54 阅读数 4849 收藏展开条件编译:条件编译属于三种宏定义中的一种,条件指示符的最主要目的是防止头文件的重复包含和编译,例如:一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误。 指令 用途...

2020-03-21 14:14:40 1269

转载 Keil C51 之LST文件,类似MDK.map文件

Keil C51 之LST文件原创昵称90天可改最后发布于2014-01-11 12:30:21阅读数 5559收藏展开 Keil C51编译器在编译程序时,会生成一个扩展名为LST的列表文件,也被称为listing file。 这个文件包含了有关编译过程的丰富信息,该文件由多个段组成,其中Symbol Listing 和 Module Informatio...

2020-03-21 09:51:36 2107

原创 中断系统开篇就说明因为查询降低CPU效率,为了解决快速CPU和慢速外设矛盾,发展了中断概念。表明原则上中断都可以用查询方式只是效率低

2020-03-20 09:22:37 238

原创 KEIL C51通用寄存器传递参数的规则,超出的参数需要在RAM中设定参数传递段,类似模拟通用寄存器传递

2020-03-19 16:54:06 1233 1

转载 基于Keil C的覆盖分析,总结出编程中可能出现的几种不可预知的BUG,数据覆盖和模拟栈分配局部变量

基于Keil C的覆盖分析,总结出编程中可能出现的几种不可预知的BUG,供各位网友参考 1、编译时出现递归警告,我看到很多网友都采用再入属性解决,对于再入函数,Keil C不对它进行覆盖分析,采用模拟栈来分配局部变量,对于data型的模拟栈,假设函数中如果用了x个变量,递归级数为y,那每调用一次递归函数就要使用(x+2)*y个堆栈空间,极易造成堆栈空间溢出,产生不可预知的错误。连汉诺塔问题都可以...

2020-03-19 16:11:04 141

转载 KEIL C51局部变量覆盖,指的是连接器利用函数/常数之间的静态调用拓扑结构,使得部分函数的局部变量可以使用相同的地址,而不会产生紊乱.。类似PC堆栈。类似通用寄存器R0-R7

keil用变量覆盖的方法,分配局部变量.我用SMALLRTOS51写任务时,它会把我任务的局部变量分配到同一个内存中,程序就错了在OVERLAY里边设置,可以分配在不同的空间,可是我不懂怎么设置!KEIL C51局部变量覆盖,指的是连接器利用函数/常数之间的静态调用拓扑结构,使得部分函数的局部变量可以使用相同的地址,而不会产生紊乱.。类似PC堆栈。类似通用寄存器R0-R7有4个任务,...

2020-03-19 16:07:38 535

转载 KEIL C51代码优化详细分析:局部参数放寄存器变量,数据覆盖技术

KEIL C51代码优化详细分析阅读了《单片机与嵌入式系统应用》2005年第10期杂志《经验交流》栏目的一篇文章《KeilC51对同一端口的连续读取方法》(原文)后,笔者认为该文并未就此问题进行深入准确的分析文章中提到的两种解决方法并不直接和简单。笔者认为这并非是Keil C51中不能处理对一个端口进行连续读写的问题,而是对Kei1 C51的使用不够熟悉和设计不够细致的问题,因此特撰写本文...

2020-03-19 15:56:06 1101

转载 Keil C51编译及连接技术(覆盖技术OVERLAY)

Keil C51编译及连接技术(覆盖技术OVERLAY)转载chungle2011最后发布于2014-12-20 21:22:52阅读数 7478收藏展开http://www.cnblogs.com/heiyue/p/3271421.htmlKeil C51编译及连接技术  主要介绍Keil C51的预处理方法如宏定义、常用的预处理指令及文件包含指令,C51编...

2020-03-19 15:50:30 1923

原创 二进制除以2相当于右移1位,遇到单数怎么处理,取整的原因是什么?可以想想最末位置后有小数点,小数点后的1,是0.5

二进制除以2相当于右移1位,遇到单数怎么处理,取整的原因是什么?可以想想最末位置后有小数点,小数点后的1,是0.5比如(11)二进制数,十进制是3,右移1位是(1.1)相当于1.5十进制数。取整舍小数部分,不能考虑四舍五入...

2020-03-19 13:38:43 2563 2

转载 KEIL MDK 查看代码量、RAM使用情况--Code、RO-data、RW-data、ZI-data的解释

KEIL MDK 查看代码量、RAM使用情况--Code、RO-data、RW-data、ZI-data的解释原创李宜君 最后发布于2019-01-16 09:10:19 阅读数 146 收藏展开一、各个名词的介绍Code:即代码域,它指的是编译器生成的机器指令,这些内容被存储到ROM区。RO-data:Read Only data,即只读数据域,它指程序中用到的只读数据,这些数据被...

2020-03-18 22:37:19 366

原创 C51源程序中中断函数不能进行参数传递,中断函数中包含任何参数声明导致变易出错,但网上都说可以。可能是KEIL改进了。还要注意变量声明和定义的区别。定义包含声明,声明不一定是定义

中断子程序中定义变量,KEIL C51 中也不报错,编译能通过/* 名称:定时器控制单只LED 说明:LED在定时器的中断例程控制下不断闪烁。*/#include<reg51.h>#define uint unsigned int#define uchar unsigned charsbit LED=P0^0;uchar Tcount;main(){ TMOD=0x01; TH0=0x3c; TL0=0xb0...

2020-03-18 14:03:30 1478

原创 C语言内存结构栈理解。单片机和PC不同,单片机局部变量在RAM,利用KEIL数据覆盖实现PC栈功能,但是KEIL也有栈,和模拟的栈。

电脑内存4G,开机应用程序运行较多时,内存占用多,关闭一些应用程序,内存占用变少。电脑中的应用程序比作调用的子函数,应用程序关闭,内存变少,释放。应用程序中的存储的数据还存在应用程序中。再打开,还会自动调出。应用程序存储在硬盘。单片机子函数中的相关变量参数信息也存在于整个项目工程程序编译后的执行代码中(或者叫目标代码),它存储在ROM。当下次调用时,认可通过目标代码调用。不是说局部变量存在栈中,被...

2020-03-18 12:55:49 342

转载 C语言堆栈入门——堆和栈的区别

银狐U3D游戏开发C语言堆栈入门——堆和栈的区别文:http://student.csdn.net/link.php?url=http://www.top-e.org%2Fjiaoshi%2Fhtml%2F427.html格式和部分内容稍作修改。在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。堆栈:一种数据...

2020-03-18 12:24:41 107

转载 局部变量空间分配及程序栈操作----(转,收藏)实例讲解每一步骤都有说明多看

对于一个资深程序员来说,了解我们的程序最底层的运行机制是很重要的。特别是对于C/C++程序员来说,这点显得尤为突出。在很多情况下,知道其底层运行机制对我们理解更深层次的东西是非常有帮助的。比如说吧,如果你对这些的底层运行机制比较熟悉,那么可能在COM编程中,你会更容易理解它的虚拟表(vtbl)技术,或者WINDOWS编程中经常涉及的THUNK机制。其实在不同的C/C++编译器中,由同样的C++...

2020-03-18 00:40:51 541

转载 C语言 全局变量和局部变量的大小限制

以下转载自:http://blog.sina.com.cn/s/blog_4a033b090100zdsd.html下午做最长公共子序列的时候遇到的问题,问了felix后恍然大悟...看代码#include <stdio.h>int main(){  int a[1000000];//局部变量  return 0;}编译运行后发现溢出错误。#incl...

2020-03-18 00:01:16 1482

转载 51单片机局部变量占用ram的问题,很多人遇到类似问题

51单片机局部变量占用ram的问题一、问题自从工作以来基本不使用51或者增强型51之类的单片机。最近调试芯圣HC89S003F4增强型51,移植了32的实用代码,结果发现RAM爆了!!!二、实践为了看出问题,我又重新建立了一个简单工程。#include <reg52.h>int test(void){ char a[20]; retu...

2020-03-17 23:37:38 2103

转载 C/C++程序内存的各种变量存储区域和各个区域详解。栈帧,局部变量不调用函数,不分配存储地址,但是编译的时候已经确定局部变量的大小。局部变量不分配地址和编译时候确定空间大小不冲突

C语言在内存中一共分为如下几个区域,分别是:1. 内存栈区: 存放局部变量名;2. 内存堆区: 存放new或者malloc出来的对象;3. 常数区: 存放局部变量或者全局变量的值;4. 静态区: 用于存放全局变量或者静态变量;5. 代码区:二进制代码。知道如上一些内存分配机制,有助于我们理解指针的概念。C/C++不提供垃圾回收机制,因此需要对堆中的数据进行及时销毁,防止内存泄漏,...

2020-03-17 23:14:06 1374

转载 C51的局部变量不是在堆栈中,是经过覆盖分析之后,放在RAM(ROM,XRAM)中的(不是官方解释,像是程序员自己理解)

最近搞个C8051F的东东..很久没用到keil编译器.了... 发现定义变量的时候有点问题.. 定义局部变量也占RAM..而且把局部变量定义成data或xdata占的又不同.. 有的时候取消一个xdata的变量.换成data型..xdata减少一个字节,data却没变.. 有的时候把一个data改成xdata,data少1个字节,xda...

2020-03-17 22:59:43 990

转载 java中堆栈(stack)和堆(heap)(还在问静态变量放哪里,局部变量放哪里,静态区在哪里.....进来)

(1)内存分配的策略  按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编 译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为 它们都会导致编译程序无法计算准确的存储空间需求. 栈...

2020-03-17 15:24:31 255

原创 C51单片机中局部变量放在RAM,不在堆栈区,因堆栈去太小。而标准C(PC 电脑)局部变量在堆栈区。堆栈区局部变量不调用时候不分配内存地址

2020-03-17 15:19:28 955

转载 Cx51程序设计的堆栈空间计算方法:子函数调用和中断函数调用的堆栈计算方法

Cx51程序设计的堆栈空间计算方法技术分类: 嵌入式系统 | 2010-12-1421ic  引言  用 C语言进行 MCS51 系列单片机程序设计是单片机开发和应用的必然趋势。 Keil 公司的 C51编译器支持经典 8051和8051派生产品的版本,通称为 Cx51。应该说, Cx51是C语言在 MCS51 单片机上的扩展,既有 C语言的共性,又有它自己的特点。本文介绍的是 Cx...

2020-03-17 14:52:40 1059

转载 堆栈类似单片机中的R0--R7寄存器,能反复快速使用?

在计算机领域,堆栈是一个不容忽视的概念,堆栈是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。要点:堆,队列优先,先进先出 。栈,先进后出(First-In/Last-Out)。1. 栈(stack)与堆(heap)都是Java用来在Ram中存放...

2020-03-17 14:36:27 980

转载 局部变量的堆栈分析--栈帧是关键里面有局部变量参数的相对地址。基于PC的程序编译后可能还有动态信息,不像KEIL 51只有静态RAM,没有动态存储信息

无OS时,RAM的使用可以分为数据、栈和堆区域;有OS时,将RAM分成若干个段,每个任务分配一个段,用于各自的数据、栈和堆区域。局部变量(Local Variable)是指作用域和生命周期都局限在所在函数或过程范围内的变量,它是相对于全局变量(Global variable)而言的。编译器在为局部变量分配空间时通常有两种做法:使用寄存器和使用栈。寄存器的访问...

2020-03-17 11:14:22 557

转载 51单片机堆栈深入剖析

用C语言进行MCS51系列单片机程序设计是单片机开发和应用的必然趋势。Keil公司的C51编译器支持经典8051和8051派生产品的版本,通称为Cx51。应该说,Cx51是C语言在MCS51单片机上的扩展,既有C语言的共性,又有它自己的特点。本文介绍的是Cx51程序设计时堆栈的计算方法。   1.堆栈的溢出问题。MCS51系列单片机将堆栈设置在片内RAM中,由于片内RAM资源有限,堆栈区...

2020-03-16 23:19:21 1153

转载 单片机中断服务函数尽可能短,有的单片机系统是硬件堆栈,它有的只有三四层的堆栈编程就会有要求:禁止使用递归,中断里最好不有函数,处理什么东西最好是在中断外处理

以常用的汇编中断处理来说吧:PUSH ACC ;把ACC压入栈PUSH PSW ;把PSW压入栈---------中间是某段代码-----POP PSW ;把栈的值弹回PSWPOP ACC ...

2020-03-16 16:44:26 1212

原创 AD7739的SPI程序,DS1302的SPI程序,和24C02IIC程序字节读写总结(空闲状态,数据稳定后在提供读写的时钟信号)

一、AD7739的SPI程序空闲电平是高电平,所以字节读写程序最后时钟电平是高电平,必须是完整的时钟周期。void Write7738(unsigned char ch){ unsigned char idata, n=8; // 向SDA上发送一位数据字节,共八位 //传输时钟频率117.260KHZ,T=8.528US和波形相符合202...

2020-03-12 10:12:09 853

转载 .h文件、.inc文件、.lib文件的功能及三者之间的异同  

在汇编语言编程时,所用到的.h文件、.inc文件、.lib文件的功能及三者之间的异同 .h文件是C、C++语言需要的“头”文件,一般是对函数、变量等的声明。汇编语言并不能直接引用C、C++语言格式的.h文件。类似功能,对过程(子程序等)、变量、宏等的声明,在汇编语言中常用.inc包含文件,当然需要使用汇编语言的语法格式。 .lib文件是库文件,可以是子程序库文件(包...

2020-03-09 16:07:43 2858

原创 嵌套调用函数,函数形参可以连续传递吗?可以的 。因为很多的实例证明。液晶指定地址写字节,正点AT24C64指定地址写字节都是证明

void AT24C04_Write(uchar adress,uchar tdata){ bit temp; AT24C04_Start(); AT24C04_Write_Byte(0xa0); temp = AT24C04_Ack(); if(temp == 0) AT24C04_Stop(); else {...

2020-03-07 16:12:30 239

原创 串行接口读位数据,保证先移位读入位数据,保证第1次读入第一位数,第8次读入第8位数据,这样第8位数据读完才不会发生再次移位。写函数容易理解不重点分析

AD7734读函数void readfromreg(bytenumber)int bytenumber;{int j; unsigned char temp1; DIN=0; CS=0; temp1=0x00; for(j=0;j<bytenumber;j++) { SCLOCK=0; ...

2020-03-07 13:24:34 416

原创 KEIL C51单片机高级编程语言应用编程和实践对外部变量和外部函数的共用说明

2020-03-06 13:47:19 437

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除