有人可以解释跳转表的机制,为什么在嵌入式系统中需要它?
跳转表可以是指向函数的指针数组,也可以是机器代码跳转指令数组.如果您有一组相对静态的函数(例如系统调用或类的虚函数),那么您可以创建此表一次并使用数组中的简单索引调用函数.这意味着检索指针并调用函数或跳转到机器代码,具体取决于所使用的表的类型.
在嵌入式编程中执行此操作的好处是:
索引比机器代码或指针更节省内存,因此在受限环境中可以节省内存.
对于任何特定函数,索引将保持稳定,并且更改函数仅需要交换函数指针.
如果确实为访问表而花费了一点点性能,但这并不比任何其他虚函数调用差.
跳转表,也称为分支表,是一系列指令,全部无条件地分支到代码中的另一个点.
您可以将它们视为切换所有案例的开关(或选择)语句:
MyJump(int c) { switch(state) { case 0: goto func0label; case 1: goto func1label; case 2: goto func2label; } }
请注意,没有返回 - 它跳转到的代码将执行返回,它将跳回到myjump被调用的任何地方.
这对于基于状态变量执行某些代码的状态机很有用.有许多其他用途,但这是主要用途之一.
它用于你不想浪费时间摆弄堆栈,并希望节省代码空间.它尤其适用于速度非常重要的中断处理程序,导致中断的外设只能由单个变量知道.这类似于具有中断控制器的处理器中的向量表.
一个用途是使用0.60美元的微控制器并为视频应用生成复合(TV)信号.micro并不强大 - 实际上它只是写入每条扫描线的速度还不够快.跳转表将用于绘制字符,因为从内存加载位图需要太长时间,并使用for()循环将位图移出.而是单独跳转到字母和扫描线,然后是大约8个实际将数据直接写入端口的指令.
-亚当