Domanda

Qualcuno può spiegare la meccanica di una tabella di collegamento e perché sarebbe stato bisogno di sistemi embedded?

È stato utile?

Soluzione

Un salto tabella può essere un array di puntatori a funzioni o un array di codice macchina delle istruzioni di salto.Se si dispone di un relativamente statici serie di funzioni (come le chiamate di sistema o funzioni virtuali per una classe), quindi si possono creare in questa tabella una volta e chiamare le funzioni con un semplice indice nell'array.Questo significherebbe recuperare il puntatore e la chiamata di una funzione o di saltare al codice macchina, a seconda del tipo di tavola.

I vantaggi di fare questo nella programmazione embedded sono:

  1. Gli indici sono di memoria più efficiente rispetto codice macchina o puntatori, quindi c'è un potenziale per il risparmio di memoria in ambienti costretto.
  2. Per qualsiasi funzione particolare, l'indice rimarrà stabile e cambiare la funzione richiede semplicemente sostituendo il puntatore a funzione.

Se non costerà un po ' di prestazioni per l'accesso al tavolo, ma questo non è peggio di qualsiasi altra chiamata di funzione virtuale.

Altri suggerimenti

Un salto tabella, noto anche come una diramazione, è una serie di istruzioni, tutti incondizionatamente ramificazione a un altro punto del codice.

Si può pensare a loro come un interruttore (o selezionare) dichiarazione in cui tutti i casi sono pieni:

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

Nota che non c'è ritorno - il codice che salta all'eseguirà il ritorno, e si salta ovunque myjump è stato chiamato.

Questo è utile per macchine di stato in cui si esegue il codice certa basato sulla variabile di stato.Ci sono molti, molti altri usi, ma questo è uno degli usi principali.

È utilizzato dove non si vuole perdere tempo a giocherellare con la pila, e si desidera risparmiare spazio di codice.È soprattutto di utilizzare in gestori di interrupt, dove la velocità è estremamente importante, e la periferica che ha causato l'interruzione è conosciuto solo da una singola variabile.Questo è simile al vettore tabella processori con controller di interrupt.

Un uso sarebbe un $0,60 per il microcontrollore e la generazione di un composito (TV) del segnale per applicazioni video.il micro non è potente, infatti è appena abbastanza veloce a scrivere ogni linea di scansione.Un salto tabella potrebbe essere usato per disegnare i caratteri, perché ci vorrebbe troppo tempo per caricare una bitmap da memoria, e utilizzare un ciclo for() a spingere il bitmap fuori.Invece c'è un separato salto alla lettera ed una linea di scansione, e poi 8 istruzioni che in realtà scrivere i dati direttamente al porto.

-Adam

Un salto nella tabella è descritta qui, ma brevemente, si tratta di un array di indirizzi la CPU dovrebbe saltare sulla base di determinate condizioni.Come esempio, un C istruzione switch è spesso implementato come un salto tabella in cui ogni salto voce di un particolare "caso" etichetta.

Nei sistemi embedded, dove l'utilizzo della memoria è ad un premio, molti costrutti sono meglio serviti utilizzando una tabella di collegamento invece di più intensivo della memoria, metodi (come un enorme if-else-if).

Wikipedia riassume abbastanza bene:

Nella programmazione di computer, un ramo tabella (a volte conosciuto come un salto tabella) è un termine usato per descrivere un efficiente metodo per il trasferimento di programma di controllo (diramazione) altro parte di un programma (o un diverso programma che potrebbe essere stato dinamicamente caricato) utilizzando una tabella di ramo istruzioni.Il ramo tabella la costruzione è comunemente usato quando la programmazione in linguaggio assembly, ma può anche essere generato da un compilatore.

...Uso di tabelle di diramazione e di altre materie la codifica dei dati è comune nei primi giorni di calcolo quando la memoria era costoso, le Cpu erano più lenti e compatta la rappresentazione dei dati e efficace la scelta di alternative erano importante.Al giorno d'oggi, essi sono comunemente utilizzato nella programmazione embedded e sviluppo del sistema operativo.

In altre parole, è un utile costruire per l'uso quando il sistema è estremamente memoria e/o CPU limited, come è spesso il caso in una piattaforma embedded.

Da Wikipedia:

Nella programmazione di computer, un ramo tabella (a volte conosciuto come un salto tabella) è un termine usato per descrivere un efficiente metodo per il trasferimento di programma di controllo (diramazione) altro parte di un programma (o un diverso programma che potrebbe essere stato dinamicamente caricato) utilizzando una tabella di ramo istruzioni.Il ramo tabella la costruzione è comunemente usato quando la programmazione in linguaggio assembly, ma può anche essere generato da un compilatore.

Un ramo tabella consiste di una serie elenco di incondizionata ramo istruzioni che si è ramificata in utilizzando un offset creato moltiplicando sequenziale e dell'indice di istruzioni lunghezza (il numero di byte in memoria occupato da ciascun ramo istruzione).Sfrutta il fatto che la macchina codice istruzioni per la ramificazione hanno un lunghezza fissa e può essere eseguito estremamente efficiente dal più hardware, ed è utile quando trattare con i dati grezzi, valori che possono essere facilmente convertiti in sequenziale i valori di indice.Tali dati, una filiale di tabella può essere estremamente efficiente;di solito consiste di seguente procedura:facoltativamente convalida i dati di input per garantire il accettabile;trasformazione dei dati in un offset nel ramo tabella, questo di solito comporta la moltiplicazione o spostamento di prendere in considerazione il istruzioni di lunghezza;e diramazione per un indirizzo costituito la base della tavolo e generato offset:questo spesso comporta un'aggiunta di offset su il contatore di programma registro.

Salto tavoli, più spesso conosciuto come una Diramazione, di solito vengono utilizzati solo dalla macchina.

Il compilatore crea un elenco di tutte le etichette in un programma di montaggio e i collegamenti di tutte le etichette per una posizione di memoria.Un salto tabella praticamente è una scheda di riferimento, per cui, una funzione o una variabile, o che cosa mai l'etichetta forse, è memorizzato nella memoria.

Così come viene eseguita una funzione, sul finire consente di tornare alla sua precedente posizione di memoria o passa alla funzione successiva, etc.

E Se il per parlare di ciò che io penso di sì, non hai semplicemente bisogno di loro in sistemi embedded, ma in qualsiasi tipo di compilato/ambiente interpretato.

Brian Gianforcaro

Saltare i tavoli sono comunemente (ma non esclusivamente) utilizzato in macchine a stati finiti per farli basati sui dati.

Invece di nidificati switch/case

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

è possibile effettuare una matrice 2d o puntatori a funzione e basta chiamare handleEvent[state][event]

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top