Projet

Général

Profil

Identifiants » Historique » Version 1

Patrice Nadeau, 2024-01-20 21:21

1 1 Patrice Nadeau
# Objets et macros
2
Variables, fonctions et macros
3
* Comportent au maximum **31** caractères
4
* Si plusieurs mots sont utilisés, ils sont séparées par des traits de soulignement
5
* Exceptions :
6
    * Fonction et variables DOIVENT
7
        * Être en minuscule
8
    * Macros et constantes DOIVENT
9
        * Être en majuscule
10
* Les objets ne devant plus être utilisés, DOIVENT générer un message lors de la compilation (`-Wall`) si un appel est effectué.
11
    * Les attributs`deprecated` ou `unavailable` DOIVENT être ajoutés à la déclaration.
12
    * La documentation DOIT indiquer les substituts à utiliser.
13
14
Justification :
15
* Linux kernel coding style : <https://www.kernel.org/doc/html/v4.10/process/coding-style.html#naming>
16
* GNU Coding Standards <https://www.gnu.org/prep/standards/html_node/Writing-C.html#Writing-C>
17
* Embedded C Coding Standard : <https://barrgroup.com/embedded-systems/books/embedded-c-coding-standard>
18
19
Exemple :
20
``` c
21
/**
22
 * @brief OldFunction
23
 * @deprecated Utiliser NewFunction à la place
24
 * @since Version x.x.xx
25
 */
26
int OldFunction(void) __attribute__((deprecated));
27
28
/**
29
 * @brief OldFunction
30
 * @deprecated Utiliser NewFunction à la place
31
 * @since Version x.x.xx
32
 */
33
int OldFunction(void) __attribute__((unavailable));
34
```
35
36
### Déclarations locales
37
38
Une déclaration n’ayant qu’une visibilité locale DOIT :
39
* Être de classe `static`
40
41
Exemple:
42
``` c
43
/**
44
 * @brief Fonction locale
45
 * @return Une valeur
46
 */
47
static int local_func(void) {
48
    ...
49
    return 0;
50
}
51
```
52
53
### Constantes
54
55
Utilisé au lieu d’une macro quand le type ou la visibilité de la variable doit être définis.
56
57
Exemple :
58
59
``` c
60
/** 
61
 * @name Liste des constantes
62
 * @brief
63
 */
64
/** @{ */
65
/** @brief La chaîne d'initialisation du projet */
66
static const char INIT_STR[6] = "POWER";
67
/** @brief Constante globale de la librairie `random` */
68
extern int RANDOM_MAX = 25;
69
/** @} */
70
71
/** @brief Constante */
72
const int ANSWER 42;
73
```
74
75
### Énumérations
76
77
DOIT être utilisée pour définir une série de valeurs.
78
79
Exemple :
80
```c
81
/**
82
 * @name Liste des valeurs STATUS
83
 * @brief 
84
 * */
85
enum STATUS {
86
	/** @brief Le processus est OK */
87
	STATUS_OK = 0,
88
	/** @brief Le processus est en cours d'initialisation */
89
	STATUS_INIT,
90
	/** @brief Le processus est arrêté */
91
	STATUS_HALTED
92
};
93
```
94
95
### Typedef
96
97
Format :
98
* En minuscule, suivie de **_t**
99
100
Exemple :
101
``` c
102
/** Type de la structure dans la librairie `ds1305` */
103
typedef struct {
104
    /** @brief Dernier deux chiffres : &ge; 00, &le; 99 */
105
    uint8_t year;
106
    /** @brief 01 - 12 */
107
    uint8_t month;
108
    /** @brief 01 - 31 */
109
    uint8_t date;
110
    /** @brief 1 - 7 */
111
    uint8_t day;
112
    /** @brief 00 - 23 */
113
    uint8_t hours;
114
    /** @brief 00 - 59 */
115
    uint8_t minutes;
116
    /** @brief 00 - 59 */
117
    uint8_t seconds;
118
} ds1305_time_t;
119
```
120
121
### Variables
122
123
Exemple :
124
``` c
125
/** @brief Variable locale */
126
static int ctr;
127
/** @brief Variable globale */
128
int RANDOM_CTR;
129
```
130
131
### Structures
132
133
Format
134
* En minuscule, séparé par des «underscores» si nécessaire.
135
136
Exemple :
137
``` c
138
/**
139
* @brief Structure d'un menu local
140
* @see MenuSelect
141
*/
142
struct menu {
143
    /** @brief Caractère utilisé pour l'item */
144
    char choice;
145
    /** @brief Description de l'item */
146
    char *item;
147
};
148
```
149
150
### Fonctions
151
152
* Le nom DOIT être dans le format suivant : *Item***_***Action***_***Attribut*
153
    * *Action* signifie :
154
        * **set**, **get**, **clear** : Règle, obtient ou vide un registre
155
        * **read**, **write** : Lis ou écris dans un fichier
156
        * **init** : Fonction d’initialisation
157
        * **is** : Vérifie un état
158
        * **setup** : Fonction de configuration des ports (AVR)
159
        * Exceptions
160
            * Les fonctions définies dans une librairie de bas niveau pour du matériel (« driver ») devraient utiliser le nom définis dans la fiche technique.
161
162
* Contient les champs Doxygen
163
    * `@brief` : Brève description de la fonction
164
    * `@param[in,out]` *paramètre* *Description* : Si nécessaire, sinon ne pas inclure le champ
165
    * `@arg` : Valeur prédéfinie d'un paramètre (`#`, `* *`), sinon ne pas inclure le champs
166
    * `@return` : Description de la valeur retournée, sinon le terme **Sans objet**
167
    * `@retval` : Si une valeur de retour est prédéfinie, une ligne pour chaque valeur, sinon ne pas inclure le champs
168
    * `@pre` : Chaque précondition, sur une ligne séparée, sinon le terme **Sans objet**
169
    * `@post` : Chaque postcondition, sur une ligne séparée, sinon le terme **Sans objet**
170
    * `@sa` : Si une référence a un autre objet doit être faite (#), sinon le terme **Sans objet**
171
    * Le bloc d'exemple, si nécessaire
172
        * `@par Example`
173
        * `@code`
174
        * ...
175
        * `@endcode`
176
177
Une fonction DEVRAIT retourner une valeur. 
178
* Type entier (oui/non) :
179
  * Succès : **0**
180
  * Erreur : **1**
181
* Type booléen (Librairie `<stdbool.h>`)
182
    * **true**
183
    * **false**
184
* Pointeur :
185
    * **NULL** : Erreur
186
    * Autre valeur  : adresse du pointeur
187
188
Justification :
189
* [AVR1000b](https://ww1.microchip.com/downloads/en/Appnotes/AVR1000b-Getting-Started-Writing-C-Code-for-AVR-DS90003262B.pdf)
190
191
Exemple :
192
193
``` c
194
/**
195
* @brief Vérifie si une horloge est initialisée
196
* @param[in] nb Le numéro du timer parmi 
197
* @arg #TIMER_1
198
* @arg #TIMER_2
199
* @return
200
* @retval true Horloge *nb* est initialisée
201
* @retval false Horloge *nb* n'est PAS initialisée
202
* @pre init_timer
203
* @post Sans objet
204
**/
205
static bool is_timer_set(uint8_t nb);
206
```