学海荡舟手机网
导航

主页 > 电子设备技术 > 电器电路基础 > > 详细内容

单片机函数的声明及段的命名规则

  1、函数的声明
  
  为了使C程序和汇编程序相互调用,要求汇编程序必须遵循C51中函数名的转换规则,否则将无法实现程序的相互调用。C51中函数名的转换规则如下表所示。

C51函数声明 转换函数名 说明
void func (void) FUNC 无参数传递或参数不通过寄存器传递的函数,其函数名不作改变转入目标文件中
void func (char) _FUNC 带有用寄存器传递参数的函数,在其名字前加上前缀“_”作为区别,表明函数包含寄存器内的参数传递
void func (void) reentrant _?FUNC 对于再入函数,在其名字前加上前缀“_?”作为区别,它包含堆栈内的参数传递

 2、段的命名规则
  
  C51程序模块被编译后,其中的函数都以“?PR?函数名?模块名”为名的命名规则被分配到CODE段中;而函数中的DATA和BIT对象则以“?函数名?BYTE”和“?函数名?BIT”的命名规则建立DATA和BIT段。在C51程序和汇编程序相互调用时,汇编语言必须遵循C51中有关段名命名规则,其命名规则如下表所示。

数据 段类型 段名
程序代码 CODE ?PR?函数名?模块名(所有模式)
局部变量 DATA ?DT?函数名?模块名(SMALL模式)
PDATA ?PD?函数名?模块名(COMT模式)
XDATA ?XD?函数名?模块名(LARGE模式)
局部bit变量 BIT ?BI?函数名?模块名(所有存储器模式)

 

 以下给出一个示例:
  
  ;**********汇编程序使用A51进行编译、
  
  调试**********
  
  NAMES;定义模块名
  
  ?PR?SCAN_KEY?SCANsegmeode;
  
  定义程序代码段
  
  PUBLSCAN_KEY;定义公共符号,函数名
  
  RSEG?PR?SCAN_KEY?SCAN;程序代码段
  
  SCAN_KEY:;起始地址……END
  
  /***********C程序使用C51进行编译、
  
  调试************/
  
  #include<reg51.h>
  
  externvoidscan_key();/*对外部被调函数的声明
  
  */voiin(void)
  
  {……scan_key();/*调用汇编函数*/……
  
  }


相关文章