Projet

Général

Profil

Identifiants » Historique » Version 8

Patrice Nadeau, 2024-01-27 15:23

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