历史上的今天
返回首页

历史上的今天

今天是:2024年08月22日(星期四)

正在发生

2019年08月22日 | C语言函数指针数组在ARM中断中的应用

2019-08-22 来源:eefocus

一、函数指针的声明与初始化

...

 

int max_fun(int a, int b);

 

/*函数指针的声明,声明了两个形参都为int类型,返回值为int类型的函数指针*/

int (*fp)(int, int);

 

/*指针初始化*/

fp = max_fun;  //fp = &max_fun 也正确

 

/*函数指针初始化后的调用*/

fp(a,b);       //(*fp)(a,b);也正确

 

...

二、函数指针的typedef

typedef void (*irq_func)(int);

 

//定义一个数组,存放中断函数指针,其参数类型为irq_func

 

irq_func irq_array[32];

三、函数指针数组的使用

/* 注册中断函数,将中断函数以指针形式存放在数组中 */

void register_irq(int irq, irq_func fp)

 {

   irq_array[irq] = fp;

   INTMSK &= ~(1 << irq);   //关闭中断屏蔽

 }

/* 此处将fp函数传入数组,由于函数名在表达式会蜕变为指针,

 * 所以调用register_irq()时第二个参数只需要传入函数名

 */

register_irq(0, key_eint_irq);

数组元素的使用:irq_array[bit](bit);  将irq_array[bit]替换为一个函数名更容易理解。

推荐阅读

史海拾趣

ENPIRION公司的发展小趣事

在电源管理领域,ENPIRION公司不断面临各种技术挑战。例如,如何满足企业级、工业级、通信等市场对产品的高可靠性要求?如何提供最优的电源转换率以降低成本和散热?为了应对这些挑战,ENPIRION公司不断投入研发力量,推出了一系列创新的电源管理解决方案。这些解决方案不仅满足了市场的需求,还进一步巩固了ENPIRION公司在电源管理领域的领先地位。

GAPTEC Electronic GmbH & Co. KG公司的发展小趣事

背景:随着市场需求的不断增长,Galaxy Microelectronics意识到需要不断迭代技术和扩大产能。

发展:2010年,公司成功研发出3D V-NAND技术,这一技术革命性地提高了存储密度和性能,降低了功耗。同时,公司开始在全球范围内建设新的生产基地,以满足日益增长的市场需求。通过技术迭代和产能扩张,Galaxy Microelectronics逐渐成为了全球闪存市场的领军企业之一。

Hamlin ( Littelfuse )公司的发展小趣事

背景:随着市场需求的不断增长,Galaxy Microelectronics意识到需要不断迭代技术和扩大产能。

发展:2010年,公司成功研发出3D V-NAND技术,这一技术革命性地提高了存储密度和性能,降低了功耗。同时,公司开始在全球范围内建设新的生产基地,以满足日益增长的市场需求。通过技术迭代和产能扩张,Galaxy Microelectronics逐渐成为了全球闪存市场的领军企业之一。

High Tech Chips Inc公司的发展小趣事

背景:随着市场需求的不断增长,Galaxy Microelectronics意识到需要不断迭代技术和扩大产能。

发展:2010年,公司成功研发出3D V-NAND技术,这一技术革命性地提高了存储密度和性能,降低了功耗。同时,公司开始在全球范围内建设新的生产基地,以满足日益增长的市场需求。通过技术迭代和产能扩张,Galaxy Microelectronics逐渐成为了全球闪存市场的领军企业之一。

EDAC公司的发展小趣事

随着全球环保意识的提高,ECS-C公司积极响应国家号召,将绿色环保理念融入到企业的生产经营中。公司采用环保材料和生产工艺,减少废弃物排放和能源消耗。同时,ECS-C公司还积极参与环保公益活动,推动社会环保事业的发展。这些环保举措不仅提升了公司的社会形象,也为企业带来了可持续发展的动力。

DuPont公司的发展小趣事

近年来,随着数字化技术的快速发展,DuPont公司也积极推进数字化转型,以适应电子行业的快速变化。公司通过引入先进的数字化技术和工具,优化了生产流程、提高了生产效率、降低了生产成本。同时,公司还加强了与客户的数字化连接和互动,提供了更加便捷、高效的服务。这些举措不仅提升了DuPont公司在电子领域的竞争力,也为公司的长期发展奠定了坚实基础。

问答坊 | AI 解惑

microblaze移植linux2.6

early_printk_console is enabled at 0x84020000 Ramdisk addr 0x00000003, Compiled-in FDT at 0xc0236078 Linux version 2.6.32 (z@GODSON) (gcc version 4.1.2) #0 Fri Apr 2 20:01:33 CST 2010 setup_cpuinfo: initialising setup_cpuinfo: ...…

查看全部问答>

sTM32的IO和SPI不同步的

来自EEWORLD合作群:arm linux fpga 嵌入0(49900581)群主:wangkj…

查看全部问答>

51单片机多中断问题--工业控制

1、我正在做一个项目  在对单片机编程时使用了T0(用于显示),T1(用于顺序控制),T2(用于产生波特率),串口中断(通信接收和发送)。 2、AD采集需要采集三个字节,共需要5400微妙、采集时关了总中断(不关中断则采不到数据) 3、问题 ...…

查看全部问答>

求一wince6.0的应用程序,供测试用

谁有在wince6.0上写的像小游戏,或者文本等可以下载到模拟器上作测试用的小程序,我不需要原代码,只要编译后的.exe文件即可。先谢谢了!…

查看全部问答>

交换环境是什么

交换环境是什么 非交换环境是什么 又是什么啊 谢谢!…

查看全部问答>

PB5怎么添加WinCE组件

我在Platform Builder 5.0导入一个飞凌OK2440III光盘里附带的BSP并打开相应的.pbxml文件。我想向WinCE添加一些组件,比如Word Viewer等等,但是PB5的Catalog中,整个Core OS都是浅色显示的,就是不可用,无法向定制的操作系统中添加组件。 请问各 ...…

查看全部问答>

EMULATOR模拟器部署失败,配置数据损坏,OS:WINDOWS 2003。怎么才能启动?

Microsoft Visual Studio 2005 版本 8.0.50727.762  (SP.050727-7600) Microsoft .NET Framework 版本 2.0.50727 SP1 vs2005 SP1服务包~ 配置: Debug CHSEMU_SDK (ARMV4I) ------ 1>这个产品的配置数据已损坏。请与技术支持人员联 ...…

查看全部问答>

新手学习之单片机独立键盘问题

/*独立键盘检测装置,按下key1加1,按下key2减一,按下key3清零,按下key4以定时器自减1,再按key4数值停止自动减1,保持显示原数*/#include <reg52.h>#define uint unsigned int#define uchar unsigned char sbit key1=P0^0;sbit key2=P0^1;sb ...…

查看全部问答>

国赛D题,基础部分就不说了 手焊要上100M,还是真心难啊

本帖最后由 paulhyde 于 2014-9-15 03:18 编辑 求大神指点工作    …

查看全部问答>

ccs5编译错误

ccs编译后出现错误,信息如下:line 110: error:    program will not fit into available memory.  placement with    alignment/blocking fails for section \"ramfuncs\" size 0x4 page 0.  Availab ...…

查看全部问答>