• Non ci sono risultati.

5.12 - Esplorazione di Neighbor Table Esplorazione di Neighbor Table

Confrontando i valori della figura con le inizializzazioni dell array neighborRecordTable nel codice 5.11.12, si può affermare che la

. scrittura avviene correttamente

5.12 -

5.12 - Esplorazione di Neighbor TableEsplorazione di Neighbor Table

Info

Info

In seguito a quanto riportato nella sezione 5.4 - Utilizzo delle funzioni di storage, si procede alla ricerca delle funzioni PutNeighborTableInfo ()

() . 312 308

e GetNeighborTableInfo definite nel file zNVM h alle righe e .

rispettivamente

Prima di procedere ad esaminare le sopracitate funzioni è opportuno

_ _ ,

introdurre il tipo di dato NEIGHBOR TABLE INFO definito come nel riquadro di codice 5.12.1, il quale consiste in una struttura adatta a contenere le informazioni relative . alla tabella dei vicini

Come si può

osservare dal codice

la struttura è diversa a seconda della implementazione del tipo di nodo della

.

rete ZigBee Essendo il nodo NCAP il coordinatore della , rete la macro di configurazione definita in questo ambito è

typedef struct _NEIGHBOR_TABLE_INFO { WORD validityKey; BYTE neighborTableSize; #ifndef I_AM_COORDINATOR BYTE parentNeighborTableIndex; #endif #ifndef I_AM_END_DEVICE BYTE depth; SHORT_ADDR cSkip; SHORT_ADDR nextEndDeviceAddr; SHORT_ADDR nextRouterAddr; BYTE numChildren; BYTE numChildRouters; union _flags{ BYTE Val; struct _bits { BYTE bChildAddressInfoValid : 1; } bits; }flags; #endif } NEIGHBOR_TABLE_INFO; .

Cod 5.12.1: Definizione della struttura

_ _ .

_ _

I AM COORDINATOR, mentre I AM DEVICE _ _ è non definita.

5.12.1 -

5.12.1 - Funzione PutNeighborTableInfoFunzione PutNeighborTableInfo

La funzione in esame si occupa di memorizzare le informazioni relative

'

alla tabella dei vicini all interno della memoria di programma del

. , '

microcontrollore La sua definizione originale tratta dall elenco di Cod. 5.4.1 è visibile nel frammento di codice 5.12.2, dove la variabile neighborRecordTableInfo dovrebbe essere il riferimento alla locazione

nella memoria FLASH nella quale sarà memorizzata la chiave di

;

validazione in realtà nella sua dichiarazione originaria non è specificato '

l attributo space prog ( ) e pertanto tale variabile è allocata in RAM la ; variabile currentNeighborTableInfo è definita a livello globale e contiene

,

tutte le informazioni relative alla tabella dei vicini la sua esistenza

permette alla funzione di non dover accettare alcun argomento

pertanto il prototipo alla sua chiamata coincide con il nome della .

funzione

Osservando il frammento di codice 5.12.1 è possibile affermare che lo

spazio in memoria da riservare alle informazioni relative alla tabella dei

14 ,

vicini è di byte anche se per di questi ne saranno utilizzati 13.

solamente

5.12.2 -

5.12.2 - Funzione GetNeighborTableInfoFunzione GetNeighborTableInfo

La funzione in esame si occupa di leggere le informazioni relative alla

tabella dei vicini dalla memoria di programma del microcontrollore e di

. ,

trasferirne il valore in RAM La sua definizione originale tratta

'

dall elenco di Cod. 5.4.2 è visibile nel frammento di codice 5.12.3.

:

La funzione è del tutto analoga a quella di memorizzazione non

#define PutNeighborTableInfo()

NVMWrite((NVM_ADDR*)&neighborTableInfo,

(BYTE*)&currentNeighborTableInfo, sizeof(NEIGHBOR_TABLE_INFO)) .

,

accetta argomenti legge il valore dalla locazione riferita da neighborTableInfo e la trasferisce nella struttura riferita da currentNeighborTableInfo.

5.12.3 -

5.12.3 - ConsiderazioniConsiderazioni

Nei precedenti paragrafi sono state presentate le funzioni di salvataggio

,

e di lettura delle informazioni relative alla tabella dei vicini verso e

;

dalla memoria di programma in particolare si è visto il loro

.

comportamento ed i prototipi alle relative chiamate In questa sezione

ci si occuperà delle dichiarazioni dei parametri necessari alla corretta

gestione della memoria di programma al fine di riservarne lo spazio

necessario alle informazioni e saranno presentati gli aggiornamenti delle

.

definizioni delle funzioni PutNeighborTableInfo e GetNeighborTableInfo '

La dichiarazione dell offset relativo alle informazioni sulla tabella dei

#define GetNeighborTableInfo()

NVMRead((BYTE *)&currentNeighborTableInfo, (ROM void*)&neighborTableInfo,

sizeof(NEIGHBOR_TABLE_INFO)) .

Cod 5.12.3: Definizione originale della funzione GetNeighborTableInfo.

/** neighborRecordOffset indica quanti byte intercorrono tra la * locazione iniziale di NVMBuffer e la locazione dove ha inizio * la memorizzazione dei neighbor record.

*/

#define neighborTableInfoOffset neighborRecordOffset + neighborRecordMapSize

/** Dimensione in BYTE dello spazio da allocare in memoria di * programma riservato ai neighbor record.

*/

#define neighborTableInfoSize sizeof(NEIGHBOR_TABLE_INFO)

/** Definizione della variabile neighborTableInfo. La variabile * contiene è un puntatore alla locazione in memoria di programma * nella quale devono essere salvate le informazioni relative * alla tabella dei vicini.

*/

extern ROM BYTE * neighborTableInfo; .

Cod 5.12.4: Definizione dei parametri per la memorizzazione delle informazioni

.

, , vicini analogamente a quanto visto per tutte le informazioni precedenti

' '

deve tenere conto dell offset relativo all informazione memorizzata

: .

precedentemente i record della stessa tabella dei vicini Come osservato nel paragrafo 5.12.1, lo spazio in memoria richiesto è di 14

, .

byte pertanto è possibile procedere alla definizione della dimensione

. ,

Nel file NVM h è necessario inoltre definire la variabile di remapping

attraverso la parola chiave extern, al fine di poterne fare riferimento

' . .

all interno del file Main c Tali definizioni sono visibili nel frammento di codice 5.12.4.

, .

La dichiarazione della variabile di remapping avviene nel file NVM c ed

'

è inizializzata ad un opportuna locazione di memoria di programma

' ,

grazie all offset come visibile nel frammento di codice 5.12.5.

Una volta completate le definizioni dei parametri per il salvataggio della

chiave nella memoria di programma è possibile procedere alla

.

ridefinizione delle funzioni di lettura e scrittura

Secondo quanto visto nel paragrafo 5.12.1, la funzione PutNeighborTableInfo può essere ridefinita come nel frammento di codice 5.12.6.

,

Rispetto alla definizione originale riportata nel riquadro di codice 5.12.2, si è omesso il simbolo “& ” avanti al primo parametro Questa .

modifica si rende necessaria in quanto la variabile di remapping è .

stata dichiarata come puntatore

ROM BYTE * neighborTableInfo = NVMBuffer +

neighborTableInfoOffset; .

Cod 5.12.5: Dichiarazione e inizializzazione della variabile di remapping .

#define PutNeighborTableInfo() NVMWrite((BYTE*)neighborTableInfo,

(BYTE*)&currentNeighborTableInfo, sizeof(NEIGHBOR_TABLE_INFO)) .

Secondo quanto riportato nel paragrafo 5.12.2, la funzione GetNeighborTableInfo può essere ridefinita come nel frammento di codice 5.12.7.

,

Rispetto alla definizione originale riportata nel riquadro di codice 5.12.3

' ,

si è variato l ordine dei primi due parametri in conseguenza '

all inversione dei parametri della funzione NVMRead aggiornata nel paragrafo 5.3.3, e analogamente alla funzione di scrittura si è omesso

“& .

il simbolo ” avanti al riferimento in memoria di programma

Gli aggiornamenti non comportano alcuna modifica al prototipo delle

,

chiamate pertanto nel codice dello stack non è necessario effettuare .

alcuna ulteriore modifica