keil absacc.h头文件volatile的问题 [问题点数:50分]

Bbs1
本版专家分:0
结帖率 0%
Bbs7
本版专家分:16738
版主
Blank
红花 2013年11月 硬件/嵌入开发大版内专家分月排行榜第一
Blank
黄花 2014年7月 硬件/嵌入开发大版内专家分月排行榜第二
Blank
蓝花 2013年10月 硬件/嵌入开发大版内专家分月排行榜第三
2013年6月 硬件/嵌入开发大版内专家分月排行榜第三
2013年3月 硬件/嵌入开发大版内专家分月排行榜第三
Bbs1
本版专家分:0
80C51常用头文件
80C51常用<em>头文件</em>:reg51.h、math.h、ctype.h、stdio.h、stdlib.h、<em>absacc.h</em>、intrins.h。 (1)reg51.h 定义51系列单片机特殊功能寄存器和特殊位。 (2)<em>absacc.h</em> 访问绝对地址<em>头文件</em>。当用绝对地址访问内部RAM(data)、外部RAM的一页(pdata)、整个外部RAM(xdata)和ROM(cod
单片机c语言XBYTE的使用
大家都知道一般的并行扩展总线---地址总线,数据总线和控制总线一般是相互独立的。但单片机由于受引脚的限制,P0口为低8位地址/数据复用口。其读写时序符合intel8080控制时序。使用外部扩展时,wrrd 等控制引脚不需要特殊配置,只使用指令来区分是否访问外部扩展的存储空间或者外部io设备。当使用 movx等这样的指令时,单片机就会自动产生扩展总线做需要的时序。不需要编程者编程实现。但是,有一个问
学习笔记:volatile关键字总结
<em>volatile</em>、Java内存模型、JMM(Java Memory Model)
stm32f103学习笔记——关键字extern、static、const
1、extern extern放在变量和函数声明之前,表示该变量或者函数在别的文件中已经定义,提示编译器在编译时要从别的文件中寻找。除此之外,extern还可以用来进行链接指定。 (1) 声明外部变量。在声明全局变量时,不同的文件在编译器编译时是不透明的,在A.c中定义 int i,同时在B.c中定义 int i,编译器编辑时是不会报错的,但是当链接linking...时会报错重复定义,链接是
提高volatile并发效率
一、著名的Java并发编程大师Doug lea在JDK 7的并发包里新增一个队列集合类Linked- TransferQueue,它在使用<em>volatile</em>变量时,用一种追加字节的方式来优化队列出队和入队的性 能。LinkedTransferQueue的代码如下。 /** 队列中的头部节点 */ private transient f?inal PaddedAtomicReference&amp;lt;...
MDK升级后的头文件冲突
//=====================================================================//TITLE://    MDK升级后的<em>头文件</em>冲突//AUTHOR://    norains//DATE://    Friday  17-June-2011//Environment://    Keil MDK 4.2//    .NET Micro
C51中的volatile关键字
C51中的<em>volatile</em>关键字   2009-08-07 13:12:05|  分类: 51单片机|举报|字号 订阅 这几天写了个“怪”程序,说它“怪”,是因为在单片调试它的时候,有一个变量的值老是不变的。最典型的“怪”语句是:_uKey=P2;。结果_uKey的值还是初定义时的值(0x00),我被它气死了。上网问高手,好在用高手指点用<em>volatile</em>这个关键
keil里中断服务函数设置标志位时加volatile
在中断服务函数中,如果设置标志位,然后其他函数判断标志位,需要设置全局变量来实现。全局变量的声明中需要添加修饰符<em>volatile</em>,防止编译器对变量进行优化,导致程序出错。 下面是<em>volatile</em>的用法说明: <em>volatile</em>用于防止相关变量被优化。   例如对外部寄存器的读写。对有些外部设备的寄存器来说,读写操作可能都会引发一定硬件操作,但是如果不加<em>volatile</em>,
C语言关键字volatile(不知道的别说你是干嵌入式的)
我在网上看见一个帖子说回答不出这个<em>问题</em>的人是不会被雇佣的。这是区分C程序员和嵌入式系统程序员的最基本的<em>问题</em>。搞嵌入式的家伙们经常同硬件、中断、RTOS等打交道,所有这些都要求用到<em>volatile</em>变量。下面来看下面试题中提到的<em>问题</em>(答案我从网络整理,以便复习): 关键字<em>volatile</em>有什么含意?并给出三个不同的例子。 <em>volatile</em>的本意是“易变的” 由于访问寄存器的速度要快过RAM
C51中关键字volatile的用法
<em>volatile</em>的本意是“易变的” 由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。比如: static int i=0; int main(void) { ... while (1) { if (i) dosomething(); } } void ISR_2(void) { i=1; } 程序的本意是希望ISR_2中断产生时,在main当中调用dos
嵌入式中 static, const, volatile, 绝对地址访问, 死循环小结
static: 在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变.在文件域内(但在函数体外),一个被声明为静态的变量可以被文件域内所有函数访问,但不能被文件域外其它函数访问。它是一个本地的全局变量. 在文件域内,一个被声明为静态的函数只可被这一文件域内的其它函数调用。那就是,这个函数被限制在声明它的文件的本地范围内使用. const: 只读(不能简
__disable_irq是在哪里定义的
在原代码中见到__disable_irq(),看起来像是
Keil头文件重复定义的问题
提示 <em>头文件</em>已经包含,并且错误指向了我的<em>头文件</em>定义的地方,用sourceinsight搜多了一下,整个项目也只有在当前的》h文件中有定义,最后从代码的main函数开始分析,并且查看调用文件, 如图 在文件的开头已经包含了"app_console.h",一般习惯是包含的多一点好,全面一点,不会报找不到的错误。在这个文件的后面,定了一个宏,如图:
关键字volatile 在C51中的使用
在C中会遇到一个一个不是很常用的关键字<em>volatile</em>,如果是仅仅是应用层编程,在控制台打印东西,这个用的不多,但是在C的嵌入式编程这个关键字会很有用,使用它编译器不会对C代码进行优化,老老实实将C直接转换成汇编,否则会出现优化。下面还是举个例子来理解: 1.未使用关键字<em>volatile</em>声明局部变量 C代码: #include char num2; void main() { cha
GCC在C语言中内嵌汇编 asm __volatile__
在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。 1、简单的内嵌汇编 例:        __asm__ __<em>volatile</em>__("hlt"); "__asm__"表示后面的代码为内嵌汇编,"as
keil工程中找不到头文件的可能原因
Keil中找不到文件的<em>问题</em>
在DSP的寄存器头文件中使用到VOLATILE(TMS320F2812)
http://hi.baidu.com/lianghu3124/blog/item/4bcff0029aa25deb08fa9331.html   在DSP的寄存器<em>头文件</em>中使用到VOLATILE(TMS320F2812) 2009-02-26 14:28 在链接器配置文件中的SECTIONS段中为各种外设的寄存器结构映射了他们在dsp内部存储器中的地址。例如tms320f2
keil 工程头文件包涵及结构体重定义问题
最近在写一个太阳能电池控制板的项目,
_no_init的作用
__no_init用于禁止系统启动时的变量初始化,什么情况下需要用这个关键字使系统禁止变量的初始化,禁止变量初始化用在什么场合,为什么要这样做,有什么意义吗? 1、看门狗复位的现场恢复,如果初始化了就完全不可恢复了 2、使用nvram保存数据,需要连续记录的。    我有个变量,需要在系统意外复位时,这个变量值能保留,所以采用__no_init来实现,只是上电的时候这个值不
在SDCC编译器中使用51单片机的外部扩展存储(外部8080总线)
  熟悉Keil的朋友应该都知道,在Keil中可以使用XBYTE关键字使用P0与P2组成一个标准的16位Intel总线收发器对外部设备(一般为扩展RAM,常见于8031系列单片机)进行读写操作。最近打算把代码移植到SDCC环境下开发的时候便遇到了SDCC中没有XBYTE关键字的<em>问题</em>,折腾一番后找到了如下的解决方案:   例如8255的PA端口地址为0x0001,在Keil中若要将其赋值0xAA的...
keil jlink调试使用助手printf
利用JLINK实现printf功能。主要是利用Jlink SW模式下自带的trace功能,使能Trace。点击Settings使能Trace。  新建<em>头文件</em>、源文件添加至工程:<em>头文件</em>中添加: #define ITM_Port8(n)    (*((<em>volatile</em> unsigned char*)(0xE0000000+4*n)))#define ITM_Port16(n)   (*((volati...
KEIL5 头文件路径设置摸索和总结
KEIL5 <em>头文件</em>路径设置摸索和总结 1.常识 1.1绝对路径和相对路径的认知: 绝对路径:是从盘符开始的路径,形如 C:\windows\system32\cmd.exe 相对路径:是从当前路径开始的路径,假如当前路径为C:\windows 要描述上述路径,只需输入 system32\cmd.exe 实际上,严格的相对路径写法应为 .\system32\cmd.exe 其中,.表示当前路径。 ...
keil中使用头文件实现多文件编程
如上图所示,在这里,MAX7219driver.c为将被包含的源文件,max7219.h为对应MAX7219driver.c的<em>头文件</em>,而(驱动测试)显示PZ-122345.c这个文件里包含了MAX7219driver.c对应的<em>头文件</em>max7219.h,从而实现了对MAX7219driver.c的引用下面为具体操作步骤1,在<em>keil</em>中新建一个工程 2,新建MAX7219driver.c文件并编写好其
关于嵌入式编程中的uint8_t、uint16_t......
在嵌入式编程中经常遇到用uint8_t、uint16_t、uint32_t、uint_fast16_t之类的关键字定义一些整型变量,但是具体表示什么意思,并不是太清楚,只是把它当成int之类的整型变量定义关键字。在自己理解他们之前,先写一下在网上搜到的常见的对他们的解释。 常见解释(都是个人见解,不一定准确全面) #define uint unsigned int; int和uint的区别:
哪位兄弟有absacc.h头文件
在线等 有的朋友加我qq27770131发个给我 先谢了
KEIL环境下批量指定头文件路径
今天初用STM32模板建工程什么的,总之一大堆<em>头文件</em>啦,有经历的朋友你们都懂的,还没有经历的朋友,mark下这个方法吧,以后肯定用得上的。      具体方法:打开Options for Target 选项框,选择C/C++ 选项卡,找到Include Paths,就在这里定义自
关于KEIL C 中 ABSACC.H的XBYTE问题
芯片为AT89S52,P2.1口与T6963C的片选相连,P2.0口与T6963C读/写使能控制口相连,其它5个口用于别的芯片控制,P0口与T6963C的数据/命令口(8位)相连,但我总是搞不明白为什么XBYTE[0xXXXX]定义后的宏是怎么回事。rnrn#include rn#include rnrn#define d_add XBYTE[0xfc00]//为什么说这就是数据通道rn#define c_add XBYTE[0xfd00]//为什么说这就是命令通道rnrnvoid main()rnrn /*比如说*/rn d_add=0x90; //为什么这就是将数据写到T6963C目前显示存储器地址(地址由其它命令设定)中,而不是将数据0x90写到外部RAM地址为0xfc00中呢(再说我们的外部RAM也没这么大)??有人讲等同汇编的 rnrnMOV DPTR #0FC00H rnMOV A #90HrnMOVX @DPTR,A rn(这真是不可理喻了?)rn rn rn /*比如说*/rn c_add=0xC0; //为什么这是一条控制T6963C的命令,而不是将数据0xc0写到外部RAM地址为0xfd00中呢!!!rn rnrnrnrn找了些资料没看明白,很多人只是COPY一些杂碎,希望得到高人指点,我看到也有不少人问这个<em>问题</em>,如果能找到答案,我一定转贴,让大家一起分享。。。。。rnrnrnrn
Keil添加头文件的方法
文字配图详细介绍如何在勊了<em>keil</em>中铁建<em>头文件</em>
KEIL里 Volatile的用法(转)
http://blog.csdn.net/djimon/article/details/7804951 <em>volatile</em>用于防止相关变量被优化。 例如对外部寄存器的读写。对有些外部设备的寄存器来说,读写操作可能都会引发一定硬件操作,但是如果不加<em>volatile</em>,编译器会把这些寄存器作为普通变量处理,例如连续多次的对同一地址写入,会被优化为只有最后一次的写入。实际上,网卡的数据发
keil4中头文件路径设置
<em>keil</em>4中<em>头文件</em>路径设置 被<em>头文件</em>的路径设置困扰了很长时间,现在终于知道了! 在<em>keil</em>4中<em>头文件</em>路径设置的方法: 假设这里有若干个文件,分别是: main.c  dong.c peng.h 其中,main.c和dong.c都依赖与peng.h。他们的内容分别如下: main.c: 绝对路径是:E:\MY_Documents\<em>keil</em>\C51\include\ff\dd
keil头文件路径设置
总结了<em>keil</em>中常见的几种<em>头文件</em>添加的方法。
关于intrins.h头文件的介绍,做流水灯时候更方便
先来个示例。。循环左移。。体现在开发板sha
51头文件详解
/*-------------------------------------------------------------------------- REG51.H //REG 就是 Register(寄存器)的意思,对51单片机的操作就是对寄存器的操作Header file for generic 80C51 and 80C31 microcontroller. Cop
Keil ARM编译器命令行编译中实现头文件依赖的自动推导
接触了几个编译器之后发现编译器基本上都有依赖文件的自动推导功能,最初掌握这个功能是在使用gcc的时候。后来发现其他的编译器基本上也有这个功能而且基本上都与gcc有着一样的语法。             今天简单试探了一下Keil编译器,没有查什么文档,纯粹是按照之前的老路子输入猜测的命令试了一下,还真是存在!             我在一个文件夹放了一个C文件一个<em>头文件</em>,C文件中包含了<em>头文件</em>
ctype.h(cctype)库函数使用详解
ctype.h(cctype)库函数使用详解 一. ctype.h库函数 序号 函  数 功   能 说  明 1 int isalnum( int ch ); 判断字符变量ch是否为字母或数字 当ch为数字0-9或字母a-z及A-Z时,返回非零值,否则返回零。 2 int
keil5不能识别自己写的头文件
<em>keil</em>5不能识别自己写的<em>头文件</em> 遇到这种情况是应为自己没有在编译器中告诉编译器你的<em>头文件</em>在哪个文件夹里造成的, SO 首先project–>option…..—>…在这里设置编译文件的文件夹 OK
keil4中头文件路径设置的方法汇总
不复制了 真麻烦... http://pengdonglin137.blog.163.com/blog/static/13319983320130159449234/
Keil中添加自己的头文件
 方法一 在<em>keil</em>的开发环境下添加:                   请注意上面的系统生成的<em>头文件</em>目录是:,即.\dd\jj\pp\kk,其中.\是相对于项目文件.uvproj 而言的,其中 .\ 表示项目文件所在的当前目录, 项目文件的绝对路径是:E:\MY_Documents\<em>keil</em>\C5
keil自带的头文件进行更改存在的一个潜在问题
今天遇到了个小<em>问题</em>,写个日志可以以后提醒自己。 之前电脑有点<em>问题</em>,重装了系统和<em>keil</em>。再编译一个以前通过的过程,就一直报错,说引脚没有定义。一直想不通,因为这个工程在写好后就没有改过,为什么会有<em>问题</em>呢。 找了半天发现,原来是<em>头文件</em>regx52.h的<em>问题</em>。我用的单片机是STC89C52RC,工程中用到了它的P4口。 <em>keil</em>中在建立工程时是没有STC的模板的,所以一般选ATMEL得C52,而
关于全局变量被修改以及volatile的用法
..... unsigned char num=0; ..... INTERRUPT() { .... num++; .... } void main() { out(num); } 很不幸的事情是在主函数中,num一直都不会变,编译器avrstdio,外部中断。 调试中发现中断时可以进去的,然而中断出来以后,这个全局变量就被改变了,后来加了volitale就可以了
Keil C51头文件
C:\Keil\C51\INC: ABSACC.H ASSERT.H CTYPE.H ERRNO.H FLOAT.H INTRINS.H LIMITS.H MATH.H REG51.H REG52.H RTX51TNY.H SETJMP.H SROM.H STDARG.H STDDEF.H STDIO.H STDLIB.H STRING.H
volatile讲解与宏定义
在嵌入式面试时<em>volatile</em>是必考题!下面来解释一下<em>volatile</em>关键字的作用:<em>volatile</em>关键字,是用于表明变量代码无法被优化!比如:int a = 0; a = 1; a = 2; a = 3;经过编译器代码优化后:int a = 0; a = 3;省去重复工作,debug下不会作任何优化,但这样的代码效率一般只用在调试下,release模式下会对齐进行优化,在GCC的编译器下会直接对...
KEIL 头文件路径和#include区别
KEIL <em>头文件</em>路径可以直接写在引号内,缺省的话,<em>头文件</em>必须在工程文件同一个目录下,比如: #include&amp;lt;ds0832.h&amp;gt; //此时ds0832.h 文件必须与工程文件同一目录 #include &quot;d:\myfile\ds0832.h&quot; //此时 ds0832.h文件在d:\myfile目录下。 还可以写作 #include &quot;ds0832.h&quot; //此时也必须同一目录。   ...
stm32f10x_conf.h
<em>头文件</em> stm32f10x_conf.h 解决<em>keil</em> 4.2.2 下建立工程重定义<em>问题</em>
MC8051中XBYTE的使用
 MC8051中XBYTE的使用 关键词:MC8051,XBYTE 作者:赵石林 手机:13640736857  QQ:1241896329 在MC8051中XBYTE用于访问外部变量,比如对HMI变量赋值或者读取HMI变量就要用到XBYTE。XBYTE一次只能访问一个字节,如果超过一个字节,怎么用XBYTE访问HMI变量呢?下面举个例子讲一下。    
keil中怎么添加自己的头文件,加入工程,保存路径。#include还用吗
<em>keil</em>中怎么添加自己的<em>头文件</em>,例如:添加#include&amp;lt;led.h&amp;gt;,要把它写在哪里,保存在哪里,才能编译后,显示 #include&amp;lt;reg51.h&amp;gt;#include&amp;lt;led.h&amp;gt;我这样写了,没反应。是不是要新建文件led.h,再保存在那个文件里面才可以。... #include&amp;lt;reg51.h&amp;gt; #include&amp;lt;led.h&amp;gt; 我...
keil编译头文件路径的设置
留个印象: 编译<em>头文件</em>路径的设置:(目前找到的勉强可行的方法) 把存放的<em>头文件</em>的路径添加到整个工程Prj中(具体在options选项中),而不需要每个C源代码文件都要设置一遍。 起因: 最近使用<em>keil</em>开发单片机,但是我的工程有许多<em>头文件</em>,而Keil只能搜索它默认的<em>头文件</em>路径,自己定义的<em>头文件</em>需要一个一个的设置。一开始的时候我每个C源代码文件的Optio
keil加载自己编写的驱动程序的.h头文件
  要添加flash.c和flash.h到工程中。 加了之后有了.c。   对应<em>头文件</em>中放入宏定义和函数声明,对应.c文件中放入函数主体。然后↓ 选择编译就能看到flash.c下的<em>头文件</em>了。   成功!...
keil头文件
许多初学者使用网上下载的程序时都会遇到这样一个<em>问题</em>,就是<em>头文件</em>找不到。我想就这个<em>问题</em>说明一下。/·首先,我们用到的KEIL有几种版本的,<em>头文件</em>也不同。有reg51.h和at89x51.h两种比较常见。at89x51和reg51这两个文件有点不同,reg51没有对IO口的位地址进行定义。所以我们在使用reg51的时候,可能会有一些相关语句通不过,比方说P0_1=1;这样的位操作。文件都放在Keil的KEILC/C51/INC目录下,大家可以看看自己的KEIL版本
__I、 __O 、__IO volatile是什么?怎么用?(作者写的太棒了,给赞)
__I、 __O 、__IO是什么意思?  这是ST库里面的宏定义,定义如下: #define __I <em>volatile</em> const /*! #define __O <em>volatile</em> /*! #define __IO <em>volatile</em> /*! 显然,这三个宏定义都是用来替换成 <em>volatile</em> 和 const 的,所以我们先要了解 这两个关键字的作用:  volatil
keil 编译时遇到的错误,头文件明明已经加进去了,却仍显示未定义
将stm32f10x_conf.h中注释掉的<em>头文件</em>恢复即可。
keil,C语言内嵌汇编
在 C 文件中要嵌入汇编代码片以如下方式加入汇编代码: #pragma asm 汇编语句 #pragma endasm 注意:如果在c51程序中使用了汇编语言,注意在Keil编译器中需要激活Properties中的 “Generate Assembler SRC File” 和“Assembler SRC File ”两个选项 来个实例吧: #i nclude void main
keil中c51编程中常用的头文件
这是<em>keil</em> c51 编程时经常用到的一些<em>头文件</em>,其中包含了最常用的函数定义
keil 头文件 源文件 extern的使用
由于原文章无法分享,所以复制了过来,附上原地址:https://www.xuebuyuan.com/909661.html 本人看了网上一些说明,对于新手来说仍是不容易懂,而且很多有错误!!!下面的内容认真看,你绝对能看懂!!!   详解<em>keil</em>采用C语言模块化编程时全局变量、结构体的定义、声明以及<em>头文件</em>包含的处理方法! 2013年09月09日 ⁄ 综合 ⁄ 共 1214字 ⁄ 字号 小 ...
Keil 头文件源程序代码——Math.h
/*-------------------------------------------------------------------------- MATH.H   Prototypes for mathematic functions. Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. All
头文件Delay.h(网上很难找到的,建议下载后收藏,并放到keil的INC文件夹中,以后就可以直接调用了)
<em>头文件</em>Delay.h(网上很难找到的,建议下载后收藏,并放到<em>keil</em>的INC文件夹中,以后就可以直接调用了)
sdcc 存储类型关键字
一、存储类型关键字1.1 sdcc中特殊关键字的使用sdcc提供和<em>keil</em>一样的特殊关键字来指定变量的存储类型,和<em>keil</em>不同的是,sdcc在使用c51专用的特殊关键字时,要用两个下划线作为前缀,比如申明一个idata存储类型的变量时语句如下。__idata unsigned char i; 1.2 __data类型该类型是small存储模式下默认使用的存储类型,对应直接寻址方式。1.3 __pda
arm中宏定义地址关键字volatile解析
在arm程序代码中我们经常看到开头会出现下面的代码: 例子:  #define IOPIN (*((<em>volatile</em> unsignedlong *)0xE0028000)) 这个语句对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的,有点类似大小端的转换。如果系统结构支持独立的IO地址空间,并且是端口映射,就必须使用汇编语言完成实际对设备的控制,因为C语言兵没有提供真正的“端口
keil delay.h头函数,C语言
这是<em>keil</em> uvision软件中的delay头函数,很难找到,十分难得
解决编译通过,Keil5打红叉问题
Keil5打红叉<em>问题</em>
Keil MDK配置----头文件问题
#include "sys.h"; #include "delay.h"; int main(void) { } 编译后错误:    error: can't open   source input file "sys.h":no such file or directory
头文件顺序调换编译出错、添加头文件后仍然报错
第一次看到下划线的地方报错,以为是<em>头文件</em>没有包含,导致未定义错误,后来发现<em>头文件</em>添加后错误依然存在。 void five_key_air_dev_fun_exec_fan(void) { device_hac_cfg_type_def *device_hac_cfg_ptr; gui_draw_hac_pib_t *draw_hac_pib_ptr; draw_hac_pib_pt
Keil4如何组织arm-mdk头文件、库文件
一、集成开发环境很多不透明,和ZF一样。今天想向板子写点东西,就去看arm-mdk使用,发现ppt里面说的和Keil4有很大出入,于是自己分析Keil4如何组织的。 二、由c程序到bin文件,必定经过编译、汇编、链接,<em>keil</em>4只是开发环境(类似于make管理器),真正调用的肯定还是arm自己的编译器、汇编器、连接器。       1. 于是打开Keil4工程,点开Option>LD_LIBR
absacc.h
介绍是说这个<em>头文件</em>主要用来访问“绝对地址”。rnrn绝对宏:rn在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括:rnCBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORDrn具体使用可看一看<em>absacc.h</em>便知rn例如:rnrval=CBYTE[0x0002];指向程序存贮器的0002h地址rnrval=XWORD [0x0002];指向外RAM的0004h地址rnrn这些都还好理解。rnrn但是最近读到一程序:rn#includern#includern#define uchar unsigned charrn#define COM8255 XBYTE[0x007F] //命令口地址rn#define PA8255 XBYTE[0x00FC] //A口地址rn#define PC8255 XBYTE[0x00F] //C口地址rnvoid printchar(uchar *p);rnrnvoid main(void) //主函数rnrn uchar idata chara[]="HELLO"; //测试用的字符串rn COM8255=0x8E; //输出方式选择命令字rn printchar(chara); //打印字符串rnrnrnvoid printchar(uchar *p) //打印字符串子函数rnrn while(*p!='\0')rn while((0x80&PC8255)!=0); //查询等待打印机的BUSY状态rn PA8255=*p; //输出字符rn COM8255=0x00; //模拟STB脉冲rn COM8255=0x01;rn p++;rn rnrnrn 是《单片机C语言编程与实例》中的例程(其实书中还有许多这种程序,另有这种程序的书也不只这一本,我在书城看见很多),就是通过《<em>absacc.h</em>》定义访问的“外部绝对地址”不是在程序/数据存储芯片中,如上例,是将C51与外围并行接口8255芯片连接。PA8255,PC8255就是8255芯片的PA(8个)口,PC(8个)口。rn 从“访问存储芯片内部地址”到“将并行接口8255芯片的外部接口用起来像C51自身接口一样方便”,我实在不明白。rnrn要电路的大侠们请留下信箱,我会将这个电路图发过去。(电路很简单)rnrn
ARM Cortex-M底层技术(十一)KEIL MDK 分散加载示例3-单独函数/变量的指定加载
分散加载示例3-单独函数/变量的指定加载    小编我一向主张在实战中学习,不主张直接去去学习规则&amp;amp;定义,太枯燥,在实际应用中去摸索,才会真正理解具体的技术细节,下面我们就通过实际的简单用例来搞清楚分散加载。 将函数和变量放到特定的指定加载地址的方法:    通常,编译器通过单个源文件生成RO、RW和ZI节。要将单个函数或者数据固定放在特定的地址上,我们必须允许链接器单独处理这个函数或数据...
STM32之CC1100无线模块
CC1100无线模块的使用其实还是挺简单的,好好看看数据手册,基本上还是没有<em>问题</em>的。说说我认为需要注意的地方: 1. PTKCTRL1 的1、2位为00时,不检测地址(无论地址设为什么都一样能收到数据)。而且是广播式的发送数据。即范围内的设备都能收到数据。 2. CC1100可选地址检查,但是要注意地址位还是算进了数据位。也就是说接收到的数据含有地址位。 如下:地址检查详细还是看
为什么有时候编译老是出现加入的系统头文件出现错误啊
为什么有时候编译老是出现加入的系统<em>头文件</em>出现错误啊 例如出现这样的<em>问题</em>: C:\Program Files\Microsoft SDKs\Windows\v6.0A\\include\ws2def.h(91) : warning C4005: “AF_IPX”: 宏重定义 C:\Program Files\Microsoft SDKs\Windows\v6.0A\\include\win
keil51下使用sprintf问题
测试环境:<em>keil</em> c51 + STC89C52 说明: 1.<em>keil</em>的不定参数只有15个字节 也就是说sizeof(...) 加起来总共不能超过15字节,否则会出错 2.当不定参数中有常数时,你也会得不到你想要的结果,字符串除外 例:  unsigned char count_sec=2, count_min=3, count_hour=4;  xdata char buf[1
CC2530头文件,寄存器设置
CC2530寄存器<em>头文件</em>,所有字节寻址 位寻址寄存器
keil软件uart头文件
<em>keil</em><em>头文件</em>uart 含studio.h<em>头文件</em>,含uart_Init()等函数,可用于单片机串口初始化
在 Keil5 中添加 .h 文件的问题
由于不是经常用到<em>keil</em>,所以有一些常识性的<em>问题</em>会忘记,因此特地写下来防止下次再忘记 一般来说的步骤:    得到text文件,然后文件名保存为xx.h,之后就直接在代码里用就好了; 不过也有在外部找.h文件后,加不进去的<em>问题</em>: 解决: 这里添加.h文件的路径。注意:是该文件前的那部分路径,不是该文件本身的!!
浅谈keil程序中include 后的尖括号与引号的区别
在程序中,尤其是51和32为例,程序中最上面,时常会看见这样一行代码: #include 而后面有时候会是
嵌入式编程(以STM32为例)中的volatile,const意义及应用场景
__I、 __O 、__IO是什么意思? 这是ST库里面的宏定义,定义如下: #define     __I       <em>volatile</em> const        /*! #define     __O       <em>volatile</em>                  /*! #define     __IO      <em>volatile</em>                  /*!
keil和ads冲突
电脑先装的<em>keil</em>  4.7,后来因为要用到ads. ads可以用了之后,<em>keil</em>再编译之前的代码时候,发现有些<em>头文件</em>找不到.比如: 看了一篇帖子后知道ads的环境变量影响了<em>keil</em>用c库的<em>头文件</em>,看了下有的是因为<em>头文件</em>有些改变,用不了。 现在要做的就是在用<em>keil</em>的时候,把这些环境变量给删除,用到ads的时候再改过来. 经过尝试: //ARMCONF=C:\Program Fil
Keil MDK 使用malloc()&free(),stm32简单测试可用。
1.8.9 Using malloc() when exploiting the C library If heap support is required for bare machine C, you must implement _init_alloc() and__rt_heap_extend(). _init_alloc() must be called first
IAR MSP430头文件中的一些解释
今天在阅读RF_Example_Code_v1.0中<em>头文件</em>cc430x613x.h时发现了几部分的疑问。 首先来看一下cc430x613x.h 中的3个#define的例子: #define DEFC(name, address) __no_init <em>volatile</em> unsigned char name @ address; #define DEFW(name, address) __
stm32 volatile变量的正确使用
<em>volatile</em>变量的使用是区分c程序员和嵌入式系统程序员的最基本<em>问题</em>。不懂得<em>volatile</em>变量的内容将带来灾难。这个文档帮助你减少因此带来的bug。
keil添加STC完整教程和资料,包含头文件和数据库
<em>keil</em>添加STC完整教程和资料,包含<em>头文件</em>和数据库
C++ 头文件相互包含问题的解决
 所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数。 类A和类B需要彼此互相引用,这样必然有一个类会先被定义,而另外一个类后被定义,这样在 先被定义的类引用后被定义的类的时候,就导致了所谓的超前引用。 超前引用导致的错误有以下几种处理办法:   1) 使用类声明    在超前引用一个类之前,首先用一个特殊的语句说明该标识符是一个类名,即将被超前引用。
KEIL v3添加STC系列单片机库文件 方法+头文件
点击打开链接KEIL v3添加STC系列单片机库文件 方法+<em>头文件</em>库   增加一个单片机数据库,既可以选择STC单片机,又不影响原来数据库的使用。 操作步骤: 1.下载用于<em>keil</em>的STC数据库更名为STC.CDB。将文件夹中的文件放到相应的文件夹下,若没有STC文件夹,自己新建一个。或者拷贝到Keil/UV2目录下。(如果是Kile3则是UV3,Kile4则是UV4)。STC文件夹里...
volatile关键字。编译器不优化,多线程会改。防止随时变动的
http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777432.html 1. 为什么用<em>volatile</em>?     C/C++ 中的 <em>volatile</em> 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language
Keil 函数内联 inline
    内联函数是指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置。这样做的好处是省去了调用的过程,加快程序运行速度,但是因为把内联函数拷贝了很多份,所以程序大小也变大了。    当我们在程序里调用函数时,要花时间执行下面几个步骤:    1. 保护现场,就是先将主调函数里的函数调用返回后要执行的指令的地址压入栈中保存;    2. 把被调函...
IAR 和 keil 使用外部 SDRAM 的区别
当芯片内部的 SRAM 不够用时,就需要在外部扩展 SDRAM,然后在写程序时将一些比较大的 buffer 定义在外部内存中。在进行正确的配置之后,对外部 SDRAM 的使用,和芯片内部的 SRAM 是一样的,可以直接对 SDRAM 的地址进行读写访问。 因此,最简单的方法就是,如下所示的代码,直接使用指针指到外部 SDRAM 的地址,之后对指针进行移动,便可以对全部 SDRAM 进行读写。使用...
keil 中——C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法
详解<em>keil</em>采用C语言模块化编程时全局变量、结构体的定义、声明以及<em>头文件</em>包含的处理方法!            以前写单片机程序时总是把所用函数和变量都写在一个c文件里,后来遇到大点的项目,程序动则几千行,这种方式无疑会带来N多麻烦,相信大家都有所体验吧!     后来学会了在<em>keil</em>里进行模块化编程,即只把功能相同或相近的函数写在同一个c文件,这样以来一个项目往往由很多个c文件组成,但又带来
关于 keil c51 头文件中变量名声明问题
如果在一个<em>keil</em>项目文件中有很多组件模块,如
使用STC-ISP直接导入单片机头文件
我们在拿到一款新的单片机的时候,经常会遇到<em>头文件</em>缺少的<em>问题</em>,但是可以使用官方的STC-ISP直接导入<em>头文件</em>。 打开STC-ISP,然后在右方的菜单选择Keil仿真设置 然后选择添加型号和<em>头文件</em>到Keil中 然后选择你的Keil安装目录下的C51文件夹,将<em>头文件</em>导入到该文件夹中 这时候会提示 在以后的单片机开发时,51系列的单片机都可以直接调用<em>头文件</em>。 如果不知道<em>头文件</em>名称,...
单片机头文件C8051F系列
c8051F000.h c8051F000_defs.h c8051F020.h C8051F020_defs.h c8051F040.h c8051F040_defs.h c8051F060.h C8051F060_defs.H c8051F120.h C8051F120_defs.h c8051F200.h c8051F200_defs.h c8051F300.h C8051F300_defs.h c8051F310.h C8051F310_defs.h c8051F320.h C8051F320_defs.h c8051F326.h C8051F326_defs.h c8051F330.h C8051F330_defs.h C8051F336_defs.h c8051F340.h C8051F340_defs.h c8051F350.h c8051F350_defs.h C8051F360.h C8051F360_defs.h c8051F410.h C8051F410_defs.h C8051F500_defs.h c8051F520.h C8051F520A_defs.h C8051F540_defs.h C8051F560_defs.h C8051F580_defs.h C8051F700_defs.h C8051F800_defs.h C8051F912_defs.h C8051F930_defs.h C8051T600_defs.h C8051T610_defs.h C8051T630_defs.h compiler_defs.h Si1000_defs.h Si1010_defs.h Si8250.h
volatile能实现多线程同步吗???NO
Java语言是支持多线程的,为了解决线程并发的<em>问题</em>,在语言内部引入了同步块 和 <em>volatile</em> 关键字机制。 用<em>volatile</em>修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最的值。但是<em>volatile</em>并不能进行原子性操作。 举个例子: package com.blog.fenye; public class Counts { public static int c
基于AT89C51教程之软件篇(一)头文件的故事
先说C文件,众所周知在使用keil编写程序过程中,主程序和绝大部分函数的编程都放在.c文件。对于H文件,小编怕自己没有多少经验,就努力谷歌了一下其他大神们对于H文件的看法,我归纳了以下几点:1、 在<em>头文件</em>中放函数的声明而不是定义。 2、 应当用ifndef/define/endif结构产生预处理块。 3、 用 #include “xxx.h” 格式来引用非标准库的<em>头文件</em>(编译器将从用户的工
keil C51中使用sprintf问题
unsigned char count = 12; UartInit(); TI = 1; sprintf(pstr,&quot;%d&quot;,count); printf(&quot;%s\n&quot;,pstr);如上将count定为unsigned char 型变量使用printf函数输出时,会出现错误。将其定义为unsigned int型正确输出。通过查阅资料(https://www.cnblogs.com/shirish...
absacc.h的理解
<em>absacc.h</em>的理解 xdata是large存储类型,<em>volatile</em>是通过硬件来改变指针指向的内容。 #define XBYTE ((unsigned char <em>volatile</em> xdata ) 0) 定义 XBYTE 为 指向 xdata 地址空间unsigned char 数据类型的指针,指针值为0 这样,可以直接用XBYTE[0xnnnn]或(XBYTE+0xnnnn)访问...
ARM VFP的一点体会
关键字: VFP arm1136JF-SMCIMX31 gcc linux 参考文献:>、>、> 前言: MCIMX31是一款基于ARM1136JF-S的多媒体处理器。他适合用来做智能手机,手持式游戏终端,多媒体播放器等智能手持式设备。有关这款CPU的参数特性可以参考Freescale的DataSheet。 最近使用MCIMX31的VFP有些收获,写出来与大家分享。 调试环境: 成都莱
解决重复包含一个头文件时变量重复定义的问题
#include文件的一个不利之处在于一个<em>头文件</em>可能会被多次包含,为了说明这种错误,考虑下面的代码: #include "x.h" #include "x.h" 显然,这里文件x.h被包含了两次,没有人会故意编写这样的代码。但是下面的代码: #include "a.h" #include "b.h" 看上去没什么<em>问题</em>。如果a.h和b.h都包含了一个<em>头文件</em>x.h。那么x.h在
C51提供了三种访问绝对地址的方法:
C51提供了三种访问绝对地址的方法: 1. 绝对宏: 在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括: CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD  具体使用可看一看<em>absacc.h</em>便知 例如: rval=CBYTE[0x0002];指向程序存贮器的0002h地址  rval=XWORD   [0x00
volatile与同步
区别是什么呢? 首先相同点:都保证可见性、有序性 区别:<em>volatile</em>不保证原子性   对于<em>volatile</em>关键字,当且仅当满足以下所有条件时可使用: 1. 对变量的写入操作不依赖变量的当前值,或者你能确保只有单个线程更新变量的值。//多个更新,同步<em>问题</em> 2. 该变量没有包含在具有其他变量的不变式中。//不能保证原子性 关于这个两个规则可能有点疑问: 第一条简单,就是说只有单个线...
keil 中建立多文件时,变量重复定义的解决
<em>keil</em> 中建立多文件时,变量重复定义的解决      c/c++语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下。     对于比较小的程序,一般只有一个c文件和一个<em>头文件</em>,全局变量我们通常会直接定义在c文件中,在程序之前加int i定义。如果要在<em>头文件</em>中定义有以下两种方法:用extern来声明:extern
关于MDK的条件选择编译
关于MDK的条件选择编译#ifdef XXX #include "XXX.h" #endif#if defined XXX1 程序段1 #elif defined XXX2 程序段2 ... #elif defined XXXn 程序段n #endif 上面的情况只是基于MDK编译环境,可以看出两个作用很相似的,不同的是ifdef只能在两个选择中判断是否定义,而if d
Keil头文件
我的<em>keil</em>没有89S52等常用芯片的<em>头文件</em>!哪位仁兄给传个,小弟谢谢啦!rn或者给个比较好的破解版的Keil下载地址也行!rn谢谢啦!
一个用VC实现的透视投影演示程序下载
一个透视投影的演示程序,含源代码,VC6工程文件。可以读取3ds文件,用线框显示。具体实现细节可以参考我的Blog。 相关下载链接:[url=//download.csdn.net/download/Goncely/2144987?utm_source=bbsseo]//download.csdn.net/download/Goncely/2144987?utm_source=bbsseo[/url]
VC++编程技术600个大型项目源码【免费下载】下载
VC++编程技术600个大型项目源码 VC++工程师多年开发大型项目的技术总汇,每个项目例子都是经典之作 VC++工程师多年开发大型项目的技术总汇,每个项目例子都是经典之作<<隐藏 。 相关下载链接:[url=//download.csdn.net/download/wujxiaoz/2831964?utm_source=bbsseo]//download.csdn.net/download/wujxiaoz/2831964?utm_source=bbsseo[/url]
Android游戏捕鱼达人代码下载
Android游戏捕鱼达人代码,希望对大家学习开发安卓游戏有用。 相关下载链接:[url=//download.csdn.net/download/szxyong/4484789?utm_source=bbsseo]//download.csdn.net/download/szxyong/4484789?utm_source=bbsseo[/url]
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 区块链问题 大数据专业教育的问题
我们是很有底线的