2 smallstar02 smallstar02 于 2016.09.23 15:37 提问

arm中断函数中回调类成员函数的问题

在定时器中断函数中写一个事件函数,触发中断后调用上层C++类对象设置的回调函数,但是这个上层对象类型不确定,传给定时器的只有一个回调函数地址和该对象本身this的地址。

现在要怎么写?我想到的结构应该就像下面的,或是其他实现?

<Timer.c>
extern ST_TIMER st_timer;

UINT32 CallFunc(UINT32 funcaddr,UINT32 This)
{
        ……
}

VOID timer0_irq_handler( VOID )
{
            CallFunc(st_timer.funcaddr,st_timer.This);
}


<A.h>
class A
{
    void setHandleProc(Uint32 funaddr,Uint32 para);
}

<A.cpp>
ST_TIMER    st_timer
void setHandleProc(Uint32 funaddr,Uint32 para){
    st_timer.funaddr=funaddr;
    st_timer.This = para;
}


1个回答

feng1790291543
feng1790291543   Ds   Rxr 2016.09.23 16:27

回调函数可以用一个回调函数类型的map存起来,触发的时候,找到该回调地址,可以直接用this调用

smallstar02
smallstar02 谢谢回答,但是如果我不知道回调函数类型呢?比如这里,事先定时器并不知道将要回调的是A对象的方法。
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C++中类成员函数作为回调函数的几种方法
写了一个C++小游戏,想法是间接别人的C语言,但是真正自己操作起来,还是会遇到各种问题,同时也让自己更真切的学到了一些过眼即忘,只有亲自动手才能学到的知识。
将类成员函数用做C回调函数
 将类成员函数用做C回调函数 提出问题: 回调函数是基于C编程的Windows SDK的技术,不是针对C++的,程序员可以将一个C函数直接作为回调函数,但是如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。分析原因:普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递一个指向自身的指针给其成员函数从而实现程序函数可以访问C++的数
C++中类成员函数作为回调函数
回调函数是基于C编程的Windows SDK的技术,不是针对C++的,程序员可以将一个C函数直接作为回调函数,但是如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。  普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递一个指向自身的指针给其成员函数从而实现程序函数可以访问C++的数据成员。这也可以理解为什么C++类的多个实例可以共享成
C#调C++动态库Dll C++回调C#函数
C# 调用 C++类成员函数, C++ 回调 C# 函数 及测试
将类的成员函数作为回调函数的方法
如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。其错误是普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递this指针给其成员函数从而实现程序函数可以访问C++的数据成员。这也可以理解为什么C++类的多个实例可以共享成员函数却-有不同的数据成员。由于this指针的作用,使得将一个CALL-BACK型的成员函数作为回调函数安装时就会因为
QT4编程之 - 将类成员函数用做C回调函数
QT4编程之 - 将类成员函数用做C回调函数 2010-05-18 20:42:00 标签:编程 函数 休闲 职场 QT4 提出问题:  回调函数是基于C语言编程技术的,不是针对C++的,程序员可以将一个C函数直接作为回调函数,但是如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。   分析原因: 普通的C++成员函数都隐含了一个传递函数
使用类的成员函数作为API定时器的回调函数
有时候,我们在使用API定时器时,需要使用类的成员函数作为其回调函数,但是,编译器为了保护成员函数,编译是不能通过的。那么我们怎么才能使用类的成员函数作为API定时器的回调函数呢?我们可以嵌入一段汇编代码来绕过编译器的检查。举个例子:      假设我们一个类的成员函数定义为void CALLBACK EXPORT CTestDlg::TimerProc,那么我们在使用API定时器时如果直接这么写
C++类成员函数作为线程回调函数
C++类成员函数作为回调函数的方法
C++将类的成员函数作为回调函数
非静态成员函数不能作为
回调函数和中断处理函数
原文: http://www.sdembed.com/thread-157-1-1.html ==================================================================================== 1,回调函数。 回调函数的原理是使用函数指针实现类似“软中断”的概念。 比如在上层的两个函数A和B,把自己的函数指针传给了C