Что такое таблица перехода?

Может кто-нибудь объяснить механику таблицы перехода и почему это необходимо в встроенных системах?

Ответ 1

Таблица переходов может быть либо массивом указателей на функции, либо массивом команд перехода на машинный код. Если у вас относительно статический набор функций (например, системные вызовы или виртуальные функции для класса), вы можете создать эту таблицу один раз и вызвать функции, используя простой индекс в массиве. Это означало бы получение указателя и вызов функции или переход к коду машины в зависимости от типа используемой таблицы.

Преимущества этого встроенного программирования заключаются в следующем:

  • Индексы более эффективны с точки зрения памяти, чем машинный код или указатели, поэтому существует потенциал экономии памяти в ограниченных средах.
  • Для любой конкретной функции индекс будет оставаться стабильным, а изменение функции просто требует замены указателя функции.

Если вам стоит небольшая производительность для доступа к таблице, но это не хуже любого другого вызова виртуальной функции.

Ответ 2

Таблица переходов, также известная как таблица ветвей, представляет собой серию инструкций, все безоговорочно ветвящиеся в другую точку кода.

Вы можете рассматривать их как оператор switch (или select), где заполняются все случаи:

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

Обратите внимание, что нет возврата - код, который он перескакивает, выполнит возврат, и он вернется туда, где был вызван myjump.

Это полезно для состояний машин, где вы выполняете определенный код на основе переменной состояния. Существует много других применений, но это одно из основных применений.

Используется там, где вы не хотите тратить время на время стека и хотите сохранить кодовое пространство. Это особенно полезно для обработчиков прерываний, где скорость чрезвычайно важна, а периферийное устройство, вызвавшее прерывание, известно только одной переменной. Это похоже на векторную таблицу в процессорах с контроллерами прерываний.

Одно использование - взять микроконтроллер с 0,60 доллара США и создать композитный (ТВ) сигнал для видеоприложений. микро не является мощным - на самом деле он едва достаточно быстро записывает каждую строку сканирования. Таблицу переходов можно использовать для рисования символов, потому что для загрузки растрового изображения из памяти потребуется слишком много времени, а для цикла for() вытащите битмап. Вместо этого есть отдельный переход к строке письма и сканирования, а затем 8 или около того инструкций, которые фактически записывают данные непосредственно в порт.

-Adam

Ответ 3

Таблица перехода описывается здесь, но вкратце, это массив адресов, на которые CPU должен перейти на основе определенных условий. Например, оператор C-переключателя часто реализуется как таблица перехода, где каждая запись перехода переходит к определенной метке "case".

Во встроенных системах, где использование памяти имеет большую ценность, многие конструкции лучше обслуживаются с помощью таблицы перехода вместо использования более интенсивных в памяти методов (например, массивное if-else-if).

Ответ 4

Wikipedia подводит итог:

В компьютерном программировании ветвь таблица (иногда называемая прыжком таблица) - термин, используемый для описания эффективный метод передачи программный контроль (ветвление) на другой часть программы (или другой программы, которые могли быть динамически загружен) с использованием таблицы ветвей инструкции. Таблица ветвей конструкция обычно используется, когда программирование на ассемблере, но также может быть сгенерирован компилятором.

... Использование таблиц ветвей и другого сырья кодирование данных было обычным в начале дней вычислений, когда память была дорогие, процессоры были медленнее и компактное представление данных и эффективный выбор альтернатив был важный. В настоящее время они обычно используется во встроенных развития операционной системы.

Другими словами, это полезная конструкция, используемая, когда ваша система сильно ограничена памятью и/или процессором, как это часто бывает во встроенной платформе.

Ответ 5

Из Википедии:

В компьютерном программировании ветвь таблица (иногда называемая прыжком таблица) - термин, используемый для описания эффективный метод передачи программный контроль (ветвление) на другой часть программы (или другой программы, которые могли быть динамически загружен) с использованием таблицы ветвей инструкции. Таблица ветвей конструкция обычно используется, когда программирование на ассемблере, но также может быть сгенерирован компилятором.

Таблица веток состоит из последовательного список безусловной ветки инструкции, которые разветвлены используя смещение, созданное умножением последовательный индекс по инструкции length (количество байтов в памяти занятой каждой инструкцией о ветвлении). Он использует тот факт, что машина коды для ветвления имеют фиксированная длина и может быть выполнена чрезвычайно эффективно большинством аппаратное обеспечение, и это наиболее полезно, когда обработки исходных данных, которые могут легко преобразуются в последовательные значения индекса. Учитывая такие данные, таблица ветвей может быть чрезвычайно эффективный; он обычно состоит из следующие шаги: необязательно проверка входные данные для обеспечения приемлемо; преобразование данных в смещение в таблицу ветвей, это обычно включает умножение или смещая его, чтобы учесть длина инструкции; и разветвление на адрес, составленный из базы таблицу и сгенерированное смещение: это часто включает добавление смещение на счетчик программ регистре.

Ответ 6

Таблицы перехода, чаще называемые таблицей ветвей, обычно используются только машиной.

Компилятор создает список всех меток в программе сборки и связывает все метки с ячейкой памяти. Таблица переходов в значительной степени является справочной картой, где, где функция, переменная или что-либо, возможно, ярлык, хранится в памяти.

Так как функция выполняет, то при завершении она переходит к предыдущей ячейке памяти или переходит к следующей функции и т.д.

И если вы говорите о том, что я думаю о вас, вам нужны не только их во встроенных системах, но и в любой скомпилированной/интерпретируемой среде.

Брайан Джанфоркаро

Ответ 7

Таблицы перехода обычно (но не исключительно) используются в конечных машинах, чтобы заставить их управлять данными.

Вместо вложенного переключателя/случая

  switch (state)
     case A:
       switch (event):
         case e1: ....
         case e2: ....
     case B:
       switch (event):
         case e3: ....
         case e1: ....

вы можете сделать 2d массив или указатели функций и просто вызвать handleEvent[state][event]