当前位置:  开发笔记 > 编程语言 > 正文

什么是跳台?

如何解决《什么是跳台?》经验,为你挑选了2个好方法。

有人可以解释跳转表的机制,为什么在嵌入式系统中需要它?



1> Josh Segall..:

跳转表可以是指向函数的指针数组,也可以是机器代码跳转指令数组.如果您有一组相对静态的函数(例如系统调用或类的虚函数),那么您可以创建此表一次并使用数组中的简单索引调用函数.这意味着检索指针并调用函数或跳转到机器代码,具体取决于所使用的表的类型.

在嵌入式编程中执行此操作的好处是:

    索引比机器代码或指针更节省内存,因此在受限环境中可以节省内存.

    对于任何特定函数,索引将保持稳定,并且更改函数仅需要交换函数指针.

如果确实为访问表而花费了一点点性能,但这并不比任何其他虚函数调用差.



2> Adam Davis..:

跳转表,也称为分支表,是一系列指令,全部无条件地分支到代码中的另一个点.

您可以将它们视为切换所有案例的开关(或选择)语句:

MyJump(int c)
{
   switch(state)
   {
      case 0:
         goto func0label;
      case 1:
         goto func1label;
      case 2:
         goto func2label;
   }
}

请注意,没有返回 - 它跳转到的代码将执行返回,它将跳回到myjump被调用的任何地方.

这对于基于状态变量执行某些代码的状态机很有用.有许多其他用途,但这是主要用途之一.

它用于你不想浪费时间摆弄堆栈,并希望节省代码空间.它尤其适用于速度非常重要的中断处理程序,导致中断的外设只能由单个变量知道.这类似于具有中断控制器的处理器中的向量表.

一个用途是使用0.60美元的微控制器并为视频应用生成复合(TV)信号.micro并不强大 - 实际上它只是写入每条扫描线的速度还不够快.跳转表将用于绘制字符,因为从内存加载位图需要太长时间,并使用for()循环将位图移出.而是单独跳转到字母和扫描线,然后是大约8个实际将数据直接写入端口的指令.

-亚当


我的理解是,switch-cases实际上被编译成跳转表?这似乎是一个多余的解释(跳转表就像交换机,就像跳转表一样,就像交换机......)
推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有