gzyueqian
13352868059

如何学习嵌入式开发程序设计中的函数?

更新时间: 2019-04-03 15:06:18来源: 嵌入式培训浏览量:4515

  前面提到C语言对嵌入式开发的重要性,作为C语言程序设计的核心的函数,也是我们需要了解的部分。如何学习嵌入式开发程序设计中的函数?粤嵌嵌入式培训怎么做到的。


  一个较大的C语言程序一般由一个主函数和若干个子函数组成,每个函数实现一个特定的功能。主函数可调用其他函数,其它函数之间也可相互调用。函数库为了减轻编程工作量,将一些常用功能的函数放在函数库中供公共使用。好的程序尽量使用函数和函数库。函数和函数库是基于C语言编程的基本单元。


  函数的格式


  嵌入式开发C语言课程给出了函数的定义性说明和原型说明。


  1)定义性说明格式


  [存储类说明符]     类型说明符    [修饰符] 标识符 (参数表){函数体}
  其中:
  存储类说明符有static和extern2种。
  类型说明符有char、unsigned、char、int、unsigned long、float、double、long double、struct、union、void等几种。
  标识符有函数名、。函数名、(。函数名)、。(。函数名)等几种。

  修饰符有Interrupt、near、far、huge等几种。


  2)原型说明格式


  Extern     类型说明符[修饰符]     标识符(参数表){函数体}


  其中:

  类型说明符、标识符、参数表、函数体这几项是函数定义性说明中必不可少的部分。可在程序源文件的任意处进行函数的定义说明,并被分配内存。


  有简单类型,符合类型。为说明函数返回的是指针,在函数名前加星号。


  标识符部分用以说明函数名。但函数名前加分割符“*”时,说明返回值是指针。被圆括号起如(*函数名),则标识符是函数指针。如果括号外再加分割符“*”,如“*(*函数名)”,则标识符是函数指针,且函数的返回指针类型。


  参数表是传入函数的形式参数表。形式参数表格式为:
  (类型说明符       变量名 [,类型说明符 变量名]…)或(void)或()
  其中(void)说明无参数传入。允许用空格代替void作为参数表,即()。

  函数体部分由符合语句构成。


  存储类说明符部分。


  extern——C语言的函数否是全程需存在的,在不加任何存储类说明的情况下,都是全程序可见的。但是,如果程序为多源文件时,非定义函数的文件要调用该函数时,须加原型说明。另外,即使在定义函数的源文件中,如果在函数定义之前超前调用,也需要加原型说明,而且原型说明中必须加存储类说明符extern。


  static——为了提高函数的安全性,在进行函数的定义性说明时,加上static存储类说明符,表示在本文件定义前和非函数定义文件中,该函数将不能被调用。它可定义需要具有内部链接的全局变量或者函数,即它们应在一个单一的编译单元里是可见的,但在外部则不可见。使用static关键词限制变量的范围。


  修饰符对函数起修饰作用。


  interrupt——为重要的修饰符。它将函数修饰为中断函数。中断函数的特点是返回类型和参数均必须为void。函数经过interrupt修饰后,程序员只编写中断服务程序的主题部分,中断服务程序中的保护现场前缀段和恢复现场的后缀段,均由编译程序完成。另外,编译程序还将ret指令改为reti指令。


  near、far和huge——规定函数的地址类型。它将覆盖存储模式规定的函数缺省地址类型。它指明函数和被调用函数之间的距离的远近。near为近调用(16位段内地址);far为原调用(32位段间地址);huge为规范化远调用(32为段间地址规范地址)。


  示例:本函数为LED灯亮、灭显示的控制程序段,是带参数的函数。


  void Led_Display(int LedStatus)                 /函数定义,参数为int LedStatus,用于表示LED状态,根据参数点亮熄灭LED1或LED2/
  (
  led_state=LedStatus;                           /将传递来的参数值赋给LED状态全局变量*/
  if((LedStatus&0x01)==0x01)
  rPDATB=rPDATB&0x5FF;                 /LED1亮/
  else
  rPDATB=rPDATB|0x200;                    /LED1灭/
  if((LedStatus&0x01)==0x02)
  rPDATB=rPDATB&0x3FF;                 /LED2亮/
  else
  rPDATB=rPDATB|0x400;                    /LED2灭/
  }
  示例       本函数为键盘初始化程序,该函数不需要参数。
  void        KeyboardInt(void)
  {
  Int value;
  rI_ISPC=BIT_EINT1           //清除中断挂起位
  rEXTINTPND=0xF;                    //设置EXTINTPND寄存器
  value=key_read();
  if(value>-1)
  Digit_Led_Symbol(value);
  rI_ISPC=BIT_EINT1;                 //清除中断挂起位
  rINTCON=0x1;

  }


  如你想学好嵌入式开发,除了掌握C语言,来粤嵌嵌入式培训无疑也是非常好的途径之一。

免费预约试听课