实用C51编程的高级技巧(C51编程)
一.
void main()
{
}
如果你的程序包含startup.a51,则需要对startup.a51进行修改。
对于startup.a51的修改,根据自已的需要进行,如将IDATALEN EQU 80H中的80H改为70H,就可以使6F到7F的16字节内存不被清零。
二.直接调用EPROM中已固化的程序
void main(void)
{
void (*DispBuffer)();
DispBuffer=0xde00;
for(;;)
{
Key();
DispBuffer();
}
}
原理:利用指向函数的指针来实现的 (*指针变量名)();
三. 将浮点数转化为字符数组
#define uchar unsigned char
#define uint unsigned int
void FtoC(void)
{
float a;
uchar i,*px
uchar x[4];
pf=&a;
a=34.526;
for(i=0;i<4;i++)
{
*(px+i)=*((char *)pf+i);
}
}
如果已将数存入EEPROM,要将其取出合并,方法也是一样,可参考下面的程序。
void CtoF(void)
{
float a;
uchar i,*px
uchar x[4]={56,180,150,73};
void *pf;
px=x;
pf=&a;
for(i=0;i<4;i++)
{
*((char *)pf+i)=*(px+i);
}
四.绝对存储器访问
(1)
#define CBYTE ((unsigned char volatile code *)0)
#define DBYTE ((unsigned char volatile data *)0)
#define XBYTE ((unsigned char volatile xdata *)0)
#define IBYTE ((unsigned char volatile idata *)0)
#define PBYTE ((unsigned char volatile pdata *)0)
(2)
KeilC编译设置中,有定义
(3)
data unsigned char aaa
idata unsigned char aaa
xdata unsigned char aaa
code
五. 强制函数的编译模式
void GetDataLen()small;
void GetDataLen()small
{
}
六. C程序与汇编的接口
1.第1种情况:直接嵌入汇编
#pragma asm
#paragma endasm
2.第2种情况:文件间调用
3.第3种情况:由C生成汇编接口
#pragma SRC
#pragma SMALL
unsigned int asmfunc1 (
unsigned int arg)
{
return (1 + arg);
}
七. volatile的使用方法及使用条件点
第一种情况涉及到内存映射硬件(memory-mapped hardware,如图形适配器,这类设备对计算机来说就好象是内存的一部分一样);
#define XBYTE[1000]
第二种情况涉及到共享内存(shared memory,即被两个以上同时运行的程序所使用的内存)。
C51中中断调用的变量
C51编程高级技 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)