1a) Utilizzo attento dei nomi
1b) Indentazione del codice
1c) Documentazione del codice
2) Layering
3) Evitare l'utilizzo dei "magic numbers" all'interno del codice
- http://users.ece.cmu.edu/~eno/coding/CCodingStandard.html
- http://users.ece.utexas.edu/~valvano/EE345L/Labs/Fall2011/style.pdf
Prima di imparare a scrivere programmi perfettamente funzionanti e performanti dovete imparare a scrivere codice chiaro e facilmente comprensibile, per voi e per le persone appartenenti al vostro gruppo di lavoro.
Diventa quindi importante rispettare, durante la scrittura del codice, stili e regole condivise.
I COMMENTI
I commenti presenti nei programmi saranno su tre livelli:
1. intestazione del modulo:
;==========================================================================================
; Project: Assembler Template <nome del progetto/modulo/libreria>
; Date: 24/10/16
; Author: <inserire il nome dell'autore>
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;
; <inserire una breve descrizione del progetto/modulo/libreria>
; <specifiche del progetto/modulo/libreria>
; <specifiche del collaudo>
;
; Ver Date Comment
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 1.0 24/10/16 Versione iniziale
; <Descrivere per ogni revisione o cambio di versione le modifiche apportate>
;
;==========================================================================================
;-----------------------------------------------------------------------------------------
; <inserire una breve descrizione della routine>
;
; INPUT: <elenco dei parametri in ingresso alla funzione>
; OUTPUT: <valori restituiti (registri, variabili)>
; AUTORE: <nome dell'autore>
; 31/03/18 1.0 Versione iniziale
; <Descrivere per ogni revisione o cambio di versione le modifiche apportate>
;-----------------------------------------------------------------------------------------
// Defines for I2C
// GPIO register offsets from BCM2835_BSC*_BASE.
// Offsets into the BSC Peripheral block in bytes per 3.1 BSC Register Map
#define BCM2835_BSC_C 0x0000 // BSC Master Control
#define BCM2835_BSC_S 0x0004 // BSC Master Status
#define BCM2835_BSC_DLEN 0x0008 // BSC Master Data Length
#define BCM2835_BSC_A 0x000c // BSC Master Slave Address
SEZIONI DEL FILE
rendere evidenti tramite dei commenti separatori le varie sezioni del file
- Intestazione iniziale
- Dichiarazioni di constanti e inclusione di quelle globali
- Definizione di variabili/ Area DATA
- Area CODE
- Definizione delle funzioni
Per le variabili e le funzioni usare la notazione cammello l'iniziale del nome va scritto in maiuscolo per le variabile o le funzioni pubbliche.
I nomi delle costanti vanno scritte con tutti i caratteri in maiuscolo usando l'underscore per separare le parole che compongono il nome complessivo.
Usare nomi brevi ma significativi.
ALTRO
- Scrivere le etichette nella colonna zero dell'editor.
- Usare due tabulazioni per indentare le istruzioni.
- Nel file startup.s richiamare la funzione Main presente nel file Main.s e commentare la riga di codice ;IMPORT __use_two_region_memory.
- Ragruppare le routine in moduli separati. Ad es. nel file Led.s scrivere tutte le routine che permettono di utilizzare i led presenti nell'hw: LedInit, LedOn, LedOff, LedTest, LedBlink, Led0On, Led0Off, Led1On, Led1Off, ...
- Inserire il file "GlobalDefine.inc" nel saranno presenti le dichiarazioni di costanti comuni a tutti i moduli
Template da utilizzare con Keil uVision
il file main.s deve essere presente in ogni progetto e deve avere sempre la seguente struttura
;==========================================================================================
; Project: Assembler Template <nome del progetto>
; Date: 24/10/16
; Author: <inserire il nome dell'autore>
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;
; <inserire una breve descrizione del progetto>
; <specifiche del progetto>
; <specifiche del collaudo>
;
; Ver Date Comment
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; 1.0 24/10/16 Versione iniziale
; <Descrivere per ogni revisione o cambio di versione le modifiche apportate>
;
;==========================================================================================
;------------------------------------------------------------------------------------------
;=== COSTANTI =============================================================================
;------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------
;=== AREA DATI ============================================================================
;------------------------------------------------------------------------------------------
AREA MyData, DATA, ALIGN = 2
;------------------------------------------------------------------------------------------
;=== AREA ISTRUZIONI ======================================================================
;------------------------------------------------------------------------------------------
AREA MyCode, CODE, READONLY
;------------------
; EXPORT/IMPORT
;------------------
;INCLUDE subroutine.s
EXPORT Main
ENTRY
;------------------------------------------------------------------------------------------
;=== MAIN ROUTINE =========================================================================
;------------------------------------------------------------------------------------------
Main
; Inizializzazioni
;<routine di inizializzazione, per la configurazione dell'hw o del sw>
;BL LedInit
;BL ButtonInit
; Autodiagnostica
;<routine di autodiagnostica, per la verifica del funzionamento dell'hw>
;BL LedTest
MainLoop
; <richiare le routine relative all'esercizio corrente>
B MainLoop ; Branch forever
;------------------------------------------------------------------------------------;
; END MAIN
;------------------------------------------------------------------------------------;
ALIGN
END
-----
Versione 1.0.0 del 22.04.13
Revisione 1.0.1 del 20.02.14
Revisione 1.0.2 del 16.02.16
Revisione 1.0.3 del 25.10.16
Revisione 1.0.3 del 25.10.16
Revisione 1.0.4 del 30.03.18
Nessun commento:
Posta un commento