我有一个PIC18F46K22,并使用XC8编译器对其进行了编程。最后,我将拥有一个像PC这样的系统,stdin
并带有和stdout
。因此,在主循环中将有一个函数来检查是否有新输入。如果有输入,将相应地调用一个函数。因此,例如,当我在A上输入A时stdin
,PIC将运行类似的函数,function_A
而不是function_B
在我输入B时调用的函数。
当PIC完成该功能后,我希望将新输入发送到该功能。因此,当按A打开RS232发送器时,从此刻开始,所有输入都将通过RS232发送。最后,该项目是一个独立的文本编辑器。因此,当按A键打开文件系统时,此刻不再是文本编辑,而是浏览文件列表。这意味着按下“向上”和“向下”意味着与在文本编辑环境中有所不同。
我已经做了很多关于如何使用C进行编程的思考。昨晚我想了一下,想知道是否有可能,如果有可能,如何做。我想做的是:
- 该
main
函数调用类似function_A
function_A
将全局变量更改function_addr
为函数的地址指针in_function_A
- 从那时起,
main
在function_addr
有新输入时调用该函数。
所以我需要一个main
检查是否function_addr
为零的函数。如果是这样,应调用“正常”函数,如function_A
。如果不是,function_addr
则应调用at中的函数。我还需要function_A
将更function_addr
改为的指针in_function_A
。
注意:当应关闭文件系统功能时,is_function_A
应将其更改function_addr
为0。
所以基本上我的问题是我怎么能
- 获取函数的地址(并将其存储在变量中)
- 在指定地址调用函数
6
题外话。属于stackoverflow.com。
—
user207421
对我来说,状态机方法比处理函数指针的风险要低得多。您的输入字节将传递到状态机结构(可能像开关盒一样简单),该结构根据状态变量或变量而跳至代码的各个位。另外,您不清楚您的stdin来自何处(不是真的很重要,但我很好奇)。
—
亚当·劳伦斯
@EJP我不同意。仅仅因为存在重叠并不意味着它必须在一个站点或另一个站点上。它正在问与低级嵌入式系统的设计和编程有关的问题,这在任何地方都可能是话题。
—
Kortuk 2013年
状态机可以基于函数间接调用:对状态转换函数的调用返回一个新的状态转换函数。
—
卡兹(Kaz)
让我们有这样的讨论在这里。