如何动态生成函数指针
请教大神,如何动态生成函数指针:如下
typedef void (*PFUN)(void)
void taskConstruct(PFUN fn, const uint8_t period)
{
_SS
WaitX(period);
fn();
_EE
}
PFUN taskCreate(PFUN fn, const uint8_t period)
{
taskConstruct(fn, period);
return taskConstruct;
}
我希望每次taskCreate返回一个新的taskConstruct函数指针,而不是固定的或者要提前写好可能的函数,把指针映射过来。 先说最终目的是什么,看不明白 taskCreate() 返回 taskConstruct 的函数指针是要做啥,不应该返回一个指向新分配 task context 结构体的指针吗?
你是希望构造一个类一样的内置成员函数?
相当于Create可以构造一个在内存中的函数?这个理论上是可行的,就是C的面对对象编程呗。 你那个函数是留着让机器运行时帮你写? 二级指针可以指向一切,如果不怕炸的话 wudicgi 发表于 2021-6-1 10:28
先说最终目的是什么,看不明白 taskCreate() 返回 taskConstruct 的函数指针是要做啥,不应该返回一个指向 ...
目的:taskCreate被调用一次,就生成一个新的taskConstruct函数,并获得这个函数指针。 FireHe 发表于 2021-6-1 11:41
你是希望构造一个类一样的内置成员函数?
相当于Create可以构造一个在内存中的函数?这个理论上是可行的, ...
是的,但51单片机资源很有限,不能做得太复杂,精简实现这个功能 liurangzhou 发表于 2021-6-1 13:36
你那个函数是留着让机器运行时帮你写?
应用层调用一次就生成一个,有上限。 MegaHealth 发表于 2021-6-1 13:47
应用层调用一次就生成一个,有上限。
你迷失在自己的想法中,目前阶段我看你的函数应该都是已经写好的,不知道你要实现啥功能 1. C编译器不能直接实现C++动态生成类实例功能,就连malloc也是预定个缓存区当作堆,在里边动态申请
2. 可以通过模拟方法实现类功能,但基本就是人肉C++编译,大致思路:每个动态的位于内存中运行的函数,可以抽象成只读代码+动态局部变量,前者可以共用ROM区数据,后者就是RAM的动态结构体数组,而这个动态数组又是依赖于malloc这样堆接口完成的。
3. 实现上述人肉C++编译,绝对不会比你把动态运行函数抽象成数据结构体更简单。在只有C的51上,正道是抽象成结构体再动态插入结构体数组,而非生成动态函数 有什么可能会有这样的需求? 单片机要做什么能做什么不是事先已经定好的啊,
icoyool 发表于 2021-6-1 16:10
有什么可能会有这样的需求? 单片机要做什么能做什么不是事先已经定好的啊,
需要创建任务 t3486784401 发表于 2021-6-1 15:01
1. C编译器不能直接实现C++动态生成类实例功能,就连malloc也是预定个缓存区当作堆,在里边动态申请
2. 可 ...
好的,谢谢 MegaHealth 发表于 2021-6-2 09:19
好的,谢谢
你要创建的任务当然只能是你已经写好的处理函数啊,所以你已经有这个处理函数的函数指针。
想创建哪个任务,就用这个已经写好的函数的指针来创建。
你无法创建预先没有写好的任务。因为你不能动态生成函数代码。除非弄个脚本系统,但是51上面也跑不动什么脚本系统 MegaHealth 发表于 2021-6-2 09:17
需要创建任务
兄弟, 你之前不会是做windows开发的吧,
单片机哪里有创建任务的概念啊
无非就是调用一个一个的函数而已,
如果你要做任务管理可以考虑把所有的函数用汇总到一个总入口, 大函数里面传一个void指针就可以了, 参数都写在void 指针指向的结构体
即使能创建函数完全是浪费吧,形参换成结构体指针就行了。。。。C语言又没有this指针,创建出来的函数有个毛用,还不如直接C++ 楼主想要的东西叫工厂模式,调用一次,根据不同的需求,返回不同的函数实例。而且这个不同的实例,还不是预定义的,是调用期动态生成的,甚至是智能感知场景,按需生成。 uindex 发表于 2021-6-4 10:26
楼主想要的东西叫工厂模式,调用一次,根据不同的需求,返回不同的函数实例。而且这个不同的实例,还不是预 ...
是这样的 C实现不了虚函数的多态 MegaHealth 发表于 2021-6-8 08:54
是这样的
只能说在 51 上面,就不要想太多了。 MegaHealth 发表于 2021-6-8 08:54
是这样的
上脚本哇,除了慢外,这都不是事
页:
[1]