Sistemi incorporati: progettazione di un'API che monitora un indirizzo

1

Questa domanda è stata gettata come punto di partenza in un colloquio tecnico presso un'azienda di semiconduttori. Immagino che non ci siano persone giuste - lo scopo di questa domanda aperta è di valutare la profondità e il livello di comfort dell'ingegnere. Domanda: - progettare un'API che monitora un indirizzo e restituisce quando l'indirizzo contiene un valore specifico: -

void reach_target_value(volatile int* addr, int value);

La mia soluzione ingenua era qualcosa del genere: -

void reach_target_value(volatile int* addr, int value)
{
  while(*addr != value)
  {
    //Do nothing - spin in a tight loop
  }
}

Ovviamente, in un ambiente con elaborazione multipla / multi-thread, potrebbe mancare di ritornare se l'indirizzo capita di raggiungere il valore di destinazione quando il processo / thread in esecuzione è cambiato contesto. Lasciando questo caso come migliorare il codice per assicurarsi che funzioni bene in un ambiente multi-thread in cui più thread monitoreranno lo stesso indirizzo con valori target diversi? Grazie per la lettura - gradirei i tuoi suggerimenti - puntatori di codice!

    
posta Zakir 18.05.2018 - 00:33
fonte

1 risposta

7

L'importanza fondamentale qui è il contesto dell'intervista per un'azienda semi conduttrice senza conoscere la descrizione del ruolo, quindi questo è incredibilmente ampio.

Saltare nel codice con le informazioni fornite nella domanda è, si spera, non quello che l'intervistatore stava cercando.

Devi trovare alcuni requisiti fondamentali .... L'indirizzo è in grado di essere monitorato dall'hardware con allarmi, generare interrupt in caso di modifica o richiede il polling? Il chip in uso ha funzionalità che potrebbero essere utilizzate (ad es. Generare un interrupt su indirizzo di modifica)

L'uso di energia è importante (essendo una società di semiconduttori potrebbe pensare di monitorare un chip dell'orologio in tempo reale che si scarica da una batteria a bottone per anni)

Se il polling, è la modifica dell'indirizzo causata da eventi asincroni o è una causa di modifica da qualcosa nel controllo dei programmi. Quanto è critico il sistema a rilevare il valore visualizzato? Quale frequenza deve essere controllato l'indirizzo per garantire che nessuna istanza del valore venga persa. La lettura dell'indirizzo cambia il suo valore? È una modifica del valore bloccata fino a quando non viene letta o sovrascritta quando arriva un nuovo valore.

Questa è l'unica cosa che deve essere eseguita mentre l'indirizzo è monitorato

Dall'altro lato, il consumatore dell'API dovrà essere definito. Si aspettano di "fare da baby-sitter" all'API, o si aspettano un set e si dimentichino. L'API gira sotto un SO - se è così un RTOS, o qualcosa di più simile a Linux o qualcosa di veramente basico che si basa sulla programmazione cooperativa.

Dato che l'intervista è avvenuta presso un'azienda semi conduttrice, vorrei chiedere se il supporto hardware per il monitoraggio dell'indirizzo, se non disponibile, potrebbe essere aggiunto.

Le risposte a questi determineranno l'API.

    
risposta data 18.05.2018 - 04:38
fonte

Leggi altre domande sui tag