Introduction à la programmation
Cette page introduit les bases de la programmation en C/C++.
Qu’est-ce que la programmation
La programmation est le processus de création de comportements complexes par le biais d’instructions simples transmises à un ordinateur. C’est l’art de créer un programme – une séquence d’instructions que l’ordinateur devrait exécuter afin d’accomplir une certaine tâche.
Qu’est-ce qu’un langage de programmation
Un langage de programmation est le moyen par lequel un programmeur transmet des instructions à un ordinateur. C’est la structure donnée à un programmeur pour être capable d’exprimer comment résoudre un problème donné.
Qu’est-ce qu’un compilateur
Les ordinateurs peuvent seulement comprendre des instructions écrites dans un langage spécifique et plutôt cryptique, qui est écrit directement en binaire (série de uns et de zéros écrits directement dans un fichier). Vu qu’il serait pas mal agaçant d'écrire directement dans ce langage, on utilise des langages de programmation (voir ci-dessus) pour nous aider à écrire des programmes. Pour traduire ce programme à un exécutable (un fichier binaire qui peut être exécuté par l’ordinateur), il faut utiliser un compilateur. Quand le processus de traduction est terminé, l’ordinateur peut lire les instructions dans sa “langue maternelle”.
Certains langages utilisent ce qui s’appelle un interprète. Plutôt que de traduire le programme une fois et de créer un exécutable optimisé, un interprète traduit le programme en même temps qu’il le roule. Certains langages qui visent un prototypage rapide (Python, par exemple) préfèrent cette méthode comme c’est plus rapide à essayer pour un développeur. Cependant, étant donné que c’est un gaspillage de capacité de traitement pour un ordinateur, les cartes électroniques Arduino utilisent des langages compilés.
Qu’est-ce que le C et le C++
Le C vise à traduire presque directement d’un langage simple aux instructions qu’un ordinateur peut comprendre. Quand vous écrivez un programme en C, les instructions exécutées correspondent quasi directement aux pièces de l’ordinateur.
Les avantages procurés par ceci sont:
Une augmentation de la performance en raison d’un contrôle strict de la machine. Sur des ordinateurs de plus petite taille comme l’Arduino, cela signifie qu’aucune capacité de traitement n’est gaspillée.
Une interface commune pour différents types d’ordinateurs. Le langage binaire compris par les ordinateurs change. Par exemple, ce ne sera pas pareil pour un cellulaire ou pour un ordinateur portable. Un programme écrit en C, d’un autre côté, fonctionnera quand même peu importe la machine. Donc, vous pouvez apprendre le C et l’utiliser sur à peu près n’importe quel ordinateur.
Un gros problème du C, par contre, est qu’il a été développé quand les ordinateurs étaient relativement faibles, ce qui fait que les programmes de l'époque étaient plutôt courts. À cause de ceci, le langage ne procure pratiquement aucune manière d’organiser un plus gros programme.
Le C++ a visé à approfondir le C avec des structures pour rendre son utilisation plus simple et pour organiser des plus gros programmes. Même si techniquement, le langage utilisé par les cartes électroniques Arduino est le C++, l’environnement restreint ne laisse pas place à beaucoup de fonctionnalités. Ainsi, nous n’irons pas dans beaucoup de détails sur la comparaison C vs C++. Il faut cependant noter que vous n’aurez pas accès à certaines techniques si vous utilisez simplement le C.
Comment un CrcDuino est-il programmé?
Programmer une carte microcontrôleur - le CrcDuino, ici - est un processus assez répétitif.
Le code est écrit, compilé, et finalement téléchargé dans le microcontrôleur en utilisant un Integrated Development Environment. Même si les participants de la Compétition de Robotique CRC sont libres d’utiliser n’importe quel IDE compatible avec Arduino, nous recommandons fortement (et supportons seulement) l’IDE officiel d’Arduino pour les ordinateurs de bureau.
Dans l’IDE d’Arduino, compiler se fait avec verifying et le code est écrit dans des fichiers .ino
.
Primitives
Par défaut, les ordinateurs peuvent seulement effectuer des opérations sur certains types de données. Ces types sont les nombres entiers (integer) et les nombres à virgule (float). Ces opérations s’appellent primitives. Les entiers se divisent encore en deux classes, signed and unsigned. Les nombres signed peuvent représenter des entiers positifs ou négatifs (signed = avec un signe, la pognez-vous?), alors que les entiers unsigned en sont incapables.
Voici un tableau sommaire:
Primitive | Peuvent représenter des nombres décimaux (ex: 0.1)? | Peuvent représenter des nombres négatifs (ex: -2)? |
---|---|---|
Floats | Oui | Oui |
Signed integers | Non | Oui |
Unsigned integers | Non | Non |
Il pourrait être tentant d’utiliser des floats comme ils sembleraient pouvoir tout faire. Vous devriez cependant toujours viser à utiliser le type de données qui vous permet d’en faire le moins tout en vous permettant d’en faire assez. En enlevant certaines possibilités, vous pouvez éviter des petites erreurs d’inattention. Un ordinateur est aussi généralement plus rapide avec des integers qu’avec des floats.
Précision et taille
Les ordinateurs, tout comme les humains, ont une quantité maximale d’information qu’ils peuvent retenir en mémoire. Ainsi, chaque nombre possède un espace de mémoire fini qui lui est dédié. Vous devriez toujours choisir le type d’une variable selon les valeurs qu’elle peut prendre. Par exemple, choisir une variable qui peut contenir des nombres dans l'échelle des milliards serait du gaspillage d’espace de mémoire si le nombre prévu ne dépassera pas quelques centaines.
Pour les floats, vous avez deux options:
float
, qui peut contenir des valeurs de 10-38 jusqu'à 1038 avec une précision d’à peu près 7 chiffres;double
, qui peut contenir des valeurs de 10-308 jusqu'à 10308 avec une précision d’à peu près 16 chiffres.
Pour les integers, vous avez une plus grande variété de choix. Comme structure générale, vous pouvez utiliser int<size>_t
pour spécifier un type, où <size>
peut être 8, 16, 32 ou 64. Pour une version unsigned, vous pouvez ajouter un u
en préfixe au type utilisé. La taille (size) indique les valeurs supportées pour un type. Spécifiquement, int<size>_t
peut prendre des valeurs de -2(size - 1) à 2(size - 1) - 1, et uint<size>_t
peut aller de 0 à 2size - 1.
Dans un format plus compréhensible:
Type | Aussi connu sous le nom de (pour un Arduino) | Négatifs? | Taille(bit) | Minimum | Maximum |
---|---|---|---|---|---|
uint8_t | unsigned char ou byte | Non | 8 | 0 | 28 - 1 (255) |
int8_t | char | Oui | 8 | -27 (-128) | 27 - 1 (127) |
uint16_t | unsigned int ou word | Non | 16 | 0 | 216 - 1 (65 535) |
int16_t | int | Oui | 16 | -215 (-32 768) | 215 - 1 (32 767) |
uint32_t | unsigned long | Non | 32 | 0 | 232 - 1 (4 294 967 295) |
int32_t | long | Oui | 32 | -231 (-2 147 483 648) | 231 - 1 (2 147 483 647) |
uint64_t | unsigned long long | Non | 64 | 0 | 264 - 1 (3.68935 × 1019) |
int64_t | long long | Oui | 64 | -263 (-9.22337 × 1018) | 263 - 1 (9.22337 × 1018) |