今天看到keil的一个例子,里面涉及到利用typedef和指向函数的指针结合的例子,使得程序结构体系非常明了,觉得很好,特地记下来。

首先在头文件定义了这个指针,并用typedef将其声明为一个类型:

typedef void (*HandlerAddr)(void);

这里面定义了一个HandlerAddr的指针变量,该指针变量指向一个参数和返回值都为void类型的函数。这种类型的函数正好对应中断服务函数。中断服务函数不能有参数,也没有返回值。

然后用typedef将其声明为一个类型。然后在别的文件中可以利用这种类型进行重新定义。

然后在.c文件定义一些变量。

HandlerAddr   IntVectTable[3][32]; /* 0 is MIC, 1 is SIC1, 2 is SIC2 */

这里定义了一个3*32的数组,该数组的第0行代表MIC中断控制器,第一行代表SIC1中断控制器,第二行代表SIC2中断控制器。每一个数据元素表征一个中断函数的入口地址。

在使用时,以IRQ_Exception为例:

void __irq IRQ_Exception( void )

{

HandlerAddr IRQHandler;

int i;

/* The first while loop is to take care of MIC1 interrupts. */

while ( (MIC_SR != 0) && (!(MIC_SR & 0x01)) && (!(MIC_SR & 0x02)) )

{

for ( i = 31; i >= 0; i-- )

{

if ( MIC_SR & (1

if ( IntVectTable[0][i] != NULL )

{

IRQHandler = IntVectTable[0][i];

if ( MIC_ATR & (1

MIC_RSR |= (1

(*IRQHandler)();

}

else

{

if ( MIC_ATR & (1

MIC_RSR |= (1

}

}

}

}

..........

return;

}

以一句IRQHandler = IntVectTable[0][i];获得某个中断函数的地址,然后直接通过 (*IRQHandler)();调用该函数。

说明:指向函数的指针一般用在两类地方,一种是如本例,实现函数回调。另一种为用在结构体中,在c语言中实现某些面向对象的例子。

转载:http://hi.baidu.com/zzublog/blog/item/7811e91db3397f03304e15b8.html

c语言handler指针,typedef与指向函数的指针结合的妙用相关推荐

  1. C语言 指向函数的指针

    C语言程序在编译后,每个函数都有一个首地址(也就是函数第一条指令的地址),这个地址称为函数的指针.可以定义指向函数的指针变量,使用指针变量间接调用函数. 先用一个简单的程序来说明: #include ...

  2. C语言中指向函数的指针(我见过的讲的最清晰的文章)

    转帖自: http://wenku.baidu.com/view/7e566448cf84b9d528ea7a57.html 1 定义和调用 程序在编译后,每个函数都有一个首地址(也就是函数第一条指令 ...

  3. (转)函数指针,指针函数,指向函数的指针,返回指针的函数

    摘要: 在学习C语言时,一个比较容易混淆的概念就是函数指针.指针函数.返回值为指针的函数.本文将对这三个概念进行区分.指针函数就是返回值为指针的函数,两个本质上是同一事物,只是叫法不同.函数指针就是一 ...

  4. 指向函数的指针--转

    http://book.51cto.com/art/200908/146363.htm 5.1.2 指向函数的指针 C语言通过&和*操作符来操作数据的地址,但它并没有提供一个用一般的方式来操作 ...

  5. 函数指针(指向函数的指针)

    目录 1. 函数指针(指向函数的指针) 1.1 使用函数指针(指向函数的指针) 1.2 重载函数的指针 1.3 函数指针形参(形参是指向函数的指针) 1.4 使用类型别名和 decltype 简化函数 ...

  6. 【数据结构基础】指向函数的指针

    文章目录 一.函数的指针 二.指向函数的指针变量 三.调用函数的两种方式 四.用指向函数的指针作函数参数(重点) 五.为什么要将指向函数的指针变量作为函数的形参(重点) 一.函数的指针 首先,函数名代 ...

  7. C语言学习笔记---指向函数的指针

      在内存中函数的存放也是一段连续的内存,函数名就是指向改内存中的首地址,所以也可以将这个函数的首地址赋给一个指针变量,这样通过指针变量就可以访问改函数.   那么为什么要通过指针来访问函数呢?下面通 ...

  8. 【C语言】函数指针(指向函数的指针)

    文章目录 1. 函数指针的定义 2. 函数指针的定义形式 2.1 一般定义方法 2.2 加上typedef关键字的定义 3.利用函数指针调用其所指向的函数 3.1 情况1:一般调用 3.2 情况2:函 ...

  9. C语言指针的那些事:第三篇(函数指针,指针函数,函数指针数组,指向函数指针数组的指针)

    文章目录 1. 函数指针 1)函数指针的例题 2. 指针函数 3. 函数指针数组 1)函数指针数组的用途 4. 指向函数指针数组的指针 5. 一些后话 1. 函数指针 函数指针就是指向函数的指针:本质 ...

最新文章

  1. Spring 容器的启动过程
  2. Jenkins+PowerShell持续集成环境搭建(二)控制台项目
  3. 设置Tomcat字符集为utf-8
  4. 百度地图API公交检索示例 - 标绘结果路线、返回结果集
  5. IDEA 2021.1.2中scala生成变量自动勾选specify type
  6. How to sign app
  7. 小米2s自带rec刷root_刷Magisk模块开机卡Logo了怎么办?两种方法教你轻松解决
  8. win8选择哪个python版本_Win8的几个版本该怎么选
  9. lua协程 unity_unity协程coroutine浅析
  10. DES、AES、RSA等常用加密算法介绍与比较
  11. 网络资源(7) - JAX-WS视频
  12. 实验报告四201521460014
  13. 信号与系统第四章总结
  14. GIT 密钥生成工具puttygen使用技巧
  15. 基于ESP8266 HX711 克级单位称重式压力传感器(接入阿里云物联网平台)—— 看到有点意思,所以我也照着做了一个
  16. 硬件模拟大师_用机器人做咖啡,“智咖大师”这样升级新零售
  17. 【科研数据处理】[基础]类别变量频数分析图表、数值变量分布图表与正态性检验(包含对数正态)
  18. html如何设置提示收到消息,从零开始实现一个消息提示框
  19. Android常用存储类型与简介
  20. NBD Network Block Device

热门文章

  1. 使用OStressSQL Server压力测试
  2. azure云数据库_如何使用SQL Data Sync同步Azure SQL数据库和本地数据库
  3. SQL Server Always On可用性组中的Windows故障转移群集仲裁模式
  4. UE4物理模块(二)---建立物体碰撞
  5. Docker-07-docker compose
  6. php编写九九乘法表
  7. 洛谷——P1025 数的划分
  8. 2014025631嵌入式程序设计第一周学习总结
  9. linux 上 Mysql 快速链接 去掉DNS解析
  10. SAP中Search help的使用