Может ли кто-нибудь объяснить механику переходного стола и почему понадобится во встроенных системах?Что такое скачок?
ответ
Скачок может быть либо массив указателей на функции или массив инструкций прыжковых машинного кода. Если у вас относительно статический набор функций (например, системные вызовы или виртуальные функции для класса), вы можете создать эту таблицу один раз и вызвать функции, используя простой индекс в массиве. Это означало бы получение указателя и вызов функции или переход к коду машины в зависимости от типа используемой таблицы.
Преимущества делать это во встроенных программ являются:
- Индексы больше памяти эффективны, чем машинный код или указателей, так что есть потенциал для экономии памяти в стесненных условиях.
- Для любой конкретной функции индекс будет оставаться стабильным, а изменение функции просто требует замены указателя функции.
Если вам требуется небольшая производительность для доступа к таблице, но это не хуже любого другого вызова виртуальной функции.
В компьютерном программировании, филиал стол (иногда известный как таблица прыжок ) является термином, используемым для описания эффективного способа передачи программой управления (ветвление) к другим часть программы (или другая программа , которая может быть динамически загружена ) с использованием таблицы ветви . Таблица филиалов обычно используется при программировании на языке ассемблера, но также может быть сгенерирован компилятором.
таблица ветвь состоит из последовательного список безусловных отраслевых инструкций, разветвляется в с использованием смещения создается путем умножения последовательный индекс по длине инструкции (количество байтов в памяти занимаемого каждой ветви инструкция). Она использует тот факт, что машина инструкция кода для разветвления имеет фиксированную длину и может быть выполнена чрезвычайно эффективно большинство аппаратных средств, и является наиболее полезным, когда делом с сырыми значениями данных, которые могут быть легко преобразовано в последовательно значения индекса. Учитывая такие данные, столбец может быть чрезвычайно эффективным; он обычно состоит из следующих этапов: при необходимости подтверждая входные данные, чтобы обеспечить его соответствие ; преобразование данных в смещение в таблицу ветвей, это обычно включает в себя умножение или , сдвигая его, чтобы принять во внимание длину инструкции ; и разветвление на адрес, составленный из базы таблицы , и сгенерированное смещение: этот часто включает в себя добавление смещения на счетчик программ .
Таблица переходов описана here, но вкратце, это массив адресов, на которые CPU должен прыгать на основе определенных условий. Например, оператор C-переключателя часто реализуется как таблица перехода, где каждая запись перехода переходит к определенной метке «case».
В встроенных системах, где использование памяти стоит на высоком уровне, многие конструкции лучше обслуживаются с помощью таблицы перехода вместо использования более интенсивных в памяти методов (например, массивное if-else-if).
Wikipedia подводит итог довольно хорошо:
В компьютерном программировании, филиал стол (иногда известный как скачок таблицы) это термин, используемый для описания эффективного способа передачи управления программой (разветвление) на другую часть программы (или другая программа , которая могла быть динамически загружена ) с использованием таблицы ветви .Таблица филиалов обычно используется при программировании на языке ассемблера, но также может быть сгенерирован компилятором.
... Использование отраслевых таблиц и других виды кодирования данных было распространен в начале дней вычислений, когда память была дорогие, процессоры были медленнее и компактного представления данных и эффективного выбор альтернатив были важны. В настоящее время они обычно используются во встроенном программировании и развития операционной системы.
Другими словами, это полезная конструкция, используемая, когда ваша система чрезвычайно ограничена памятью и/или процессором, как это часто бывает во встроенной платформе.
Таблицы переходов, чаще называемые таблицей ветвей, обычно используются только машиной.
Компилятор создает список всех меток в программе сборки и связывает все метки с ячейкой памяти. Таблица переходов в значительной степени является справочной картой, где, где функция, переменная или что-либо, возможно, ярлык, хранится в памяти.
Так как функция выполняется, по окончании он возвращается в предыдущее местоположение памяти или переход к следующей функции и т.д.
И если ваш говорить о том, что я думаю, что вы, вы не просто нужно их во встроенных системах, но в любой скомпилированной/интерпретируемой среде.
Брайан Gianforcaro стол
Таблица перехода, также известная как таблица ветвей, представляет собой серию инструкций, все безоговорочно ветвящиеся в другую точку кода.
Вы можете думать о них как переключатель (или выберите) заявление, где заполнены все случаи:
MyJump(int c)
{
switch(state)
{
case 0:
goto func0label;
case 1:
goto func1label;
case 2:
goto func2label;
}
}
Обратите внимание, что нет возврата - код, который он переходит к выполнит возврат, и вернется туда, где был вызван myjump.
Это полезно для государственных машин, где вы выполняете определенный код на основе переменной состояния. Существует много и много других применений, но это одно из основных видов использования.
Используется там, где вы не хотите терять время, стекаясь со стеком, и хотите сохранить кодовое пространство. Это особенно полезно для обработчиков прерываний, где скорость чрезвычайно важна, а периферийное устройство, вызвавшее прерывание, известно только одной переменной. Это похоже на таблицу векторов в процессорах с контроллерами прерываний.
Одно использование будет брать микроконтроллер с 0,60 доллара США и генерировать композитный (ТВ) сигнал для видеоприложений. микро не является мощным - на самом деле он просто достаточно быстрый, чтобы писать каждую строку сканирования. Таблицу переходов можно использовать для рисования символов, потому что для загрузки растрового изображения из памяти потребуется слишком много времени, а для цикла for() вытащите битмап. Вместо этого есть отдельный переход к строке письма и сканирования, а затем 8 или около того инструкций, которые фактически записывают данные непосредственно в порт.
-Adam
Перейти таблицы обычно (но не исключительно), используемые в finite state machines, чтобы сделать их управляемые данными.
Вместо вложенного переключателя/случай
switch (state)
case A:
switch (event):
case e1: ....
case e2: ....
case B:
switch (event):
case e3: ....
case e1: ....
вы можете сделать 2d массива или указатели на функцию и просто вызовите handleEvent[state][event]
Это было мое понимание того, что переключатель-дела фактически сведены в таблицы прыжковых? Это похоже на избыточное объяснение (таблицы перехода похожи на переключатели, которые похожи на таблицы перехода, которые похожи на переключатели ...) – ArtOfWarfare 2012-12-13 14:30:57