Projet

Général

Profil

Identifiants » Historique » Version 2

Patrice Nadeau, 2024-01-27 13:55

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