Vous êtes sur la page 1sur 13

COMPILATEUR C CC5X POUR PIC UTILIS AVEC MPLAB

Adresse Internet du site de lditeur : http://www.bknd.com/cc5x/index.shtml

1) GNRALITS
Ce document se rfre la version 3.2. Il est bas sur un autre document crit pour une version
antrieure. Il subsiste peut tre quelques incohrences.
Une version gratuite du compilateur, avec quelques limitations, peut tre tlcharge sur le site
de lditeur.

1.1) UTILISATION
Le compilateur CC5x est constitu dun excutable CC5X.exe lanc par une ligne de commande.
Cette ligne peut tre gnre par un environnement de dveloppement intgr (ex : MPLAB).
CC5X sinterface parfaitement avec MPLAB. Il y a interactivit entre la fentre des messages et la
ou les fentres ddition (un double clic sur un message derreur renvoie la ligne de lerreur
dans la fentre ddition).
Le compilateur CC5x peut tre utilis avec tous les PIC dentre de gamme et de milieu de
gamme. Un compilateur spcifique est disponible pour les PIC haut de gamme de la srie 18C
(CC8E).
Le compilateur peut produire seul un fichier excutable .hex partir dun seul fichier source en C
(avec dautres fichiers inclus ventuellement). Il ny a pas de ce cas utilisation dun diteur de
liens. Cette faon de travailler, peu courante pour un compilateur, a t retenue pour pouvoir
produire un fichier excutable compact et rapide lexcution.
Avec CC5X, il est aussi possible de raliser des compilations spares, avec un projet constitu
de plusieurs fichiers source en C, suivies dune dition de liens. Dans ce cas, ldition de liens
seffectue avec lditeur de liens MPLINK fourni avec MPLAB. Le fichier excutable produit est
moins optimis que lorsquil ny a quun seul fichier source. De plus, il existe certaines limitations, notamment dans lutilisation des fonctions.
Le prsent document ne traite pas de ldition de liens avec MPLINK. Voir CC5X Users Manual
6.8 Linker support.
Pour ce compilateur, la priorit de la conception na pas t dassurer une conformit avec le C
ANSI, mais dobtenir un code compact et rapide en faisant le meilleur usage possible des ressources limites du PIC. Certains types de donnes noccupent pas en mmoire la taille dfinie
par le C ANSI. Voir 3.
Le compilateur dispose dextensions au C ANSI pour gagner de la place en mmoire (type bit
pour les donnes) et pour sadapter aux particularits du C (possibilit de manipuler un bit dun
port avec une seule instruction machine, etc.).

Prsentation rapide du compilateur C CC5X pour PIC / Philippe Morenton Lyce Technique PE Martin Bourges

1.2) PRINCIPALES LIMITATIONS PAR RAPPORT AU C ANSI


Seuls les tableaux une dimension sont accepts. Il est possible de remplacer les tableaux multidimensionnels par des structures, avec cependant un seul index pouvant tre une variable (voir
manuel de lutilisateur 2.2 Arrays, structures and unions).
Les variables globales initialises ne sont pas acceptes.
Le compilateur a des possibilits limites pour allouer des variables temporaires  A cause
de cela les instructions complexes ont souvent tre rcrites en dcomposant en instructions
plus simples.

Par exemple, avec la version dvaluation, il est impossible de compiler la ligne suivante :
ResultatCAN1+=ADRESH*256+ADRESL ;
La dcomposition suivante est accepte :
ResultatCAN1 = ADRESH*256;
ResultatCAN1 += ADRESL;
ResultatCumulCAN1+=ResultatCAN1; // 1 variable de plus ncessaire
Pour plus de dtail, voir le WRITING CODE THAT CAN BE COMPILED BY CC5X en fin du
fichier ReadMe.txt dans le dossier dinstallation du compilateur.

La version dvaluation comporte des limitations supplmentaires :


pas doptimisation du code produit (mais valuation du gain apport par lutilisation du
compilateur non brid)
limitation de la taille du code produit (1024 mots max en mmoire programme par code objet rsultat de la compilation dun fichier source). Le PIC16F84 ne dispose que de 1024 mots
de mmoire programme.

1.3) PRINCIPALES AMLIORATIONS PAR RAPPORT AU C ANSI

Le compilateur dispose de particularits pour minimiser loccupation mmoire :


fusion des donnes constantes pour diminuer loccupation mmoire. Ceci est transparent
lutilisateur. Voir Users Manual page 28. Non dcrit dans ce document
concatnation de 2 codes ASCII 7 bits pour enregistrement dans un mot mmoire de 14
bits. Voir Users 2.5 Storing 14 bit data. Non dcrit dans ce document
types de donnes virgule fixe (possibilit rare)
nombreuses directives de compilation introduites avec #pragma
Pour une utilisation simple en lyce technique, la connaissance de ces amliorations nest pas
utile.

Prsentation rapide du compilateur C CC5X pour PIC / Philippe Morenton Lyce Technique PE Martin Bourges

2) INSTALLATION & UTILISATION AVEC MPLAB 5.X


Linstallation automatique du logiciel permet de dcompacter le fichier dinstallation et de placer
tous les fichiers sur le disque dur. Il faut ensuite procder aux oprations suivantes :
copier les fichiers TLCC5X.INI et CC5X.MTC dans le dossier dinstallation de MPLAB
(dautres fichiers .ini et .mtc existent dj dans le dossier)
configurer MPLAB
La configuration de MPLAB concerne la suite logicielle. Voir aussi le document MPLAB 5.x 5.

La configuration seffectue avec la


commande Project / Install Language
Tool. Il suffit dindiquer le nom de
lexcutable avec son chemin daccs.

Pour une utilisation de plusieurs fichiers source en langage C, il faut utiliser lditeur de liens
MPLINK de Microchip dont il faut donner le chemin daccs (Tool Name : MPLINK) .Il est aussi
possible de lier des fichiers objet crs avec CC5X et MPASM, lassembleur de Microchip. Le
chemin daccs de ce dernier doit alors tre dfini.

3) CRATION ET CONFIGURATION DUN PROJET AVEC MPLAB

3.1) DIFFRENCE ENTRE PROJETS AVEC ET SANS DITION DE LIENS


La cration et la configuration dun projet sont diffrentes selon quon souhaite ou non une dition de liens.
Ldition de liens est utilise que dans le cas o plusieurs fichiers source sont compils sparment. Lassemblage (dernire phase de la compilation dun fichier source) produit un fichier objet relogeable, sans adresses absolues. Ldition de liens est alors ralise avec MPLINK.
Lorsquun seul fichier source est utilis (ventuellement avec des fichiers inclus), la compilation +
lassemblage produit un fichier objet absolu directement utilisable pour la programmation et le
dbogage. Cette absence dutilisation de lditeur de liens est exceptionnelle. Limmense majorit
des compilateurs utilise ldition de liens, mme avec un seul fichier source.
Ldition de liens nest pas prsente dans ce document. Voir le manuel de lutilisateur 6.8.

Prsentation rapide du compilateur C CC5X pour PIC / Philippe Morenton Lyce Technique PE Martin Bourges

3.2) CRATION DUN PROJET SANS DITION DE LIENS


Pour crer un projet, il faut suivre les indications donnes 6 du document MPLAB 5.x de Microchip .
Dans les proprits du fichier excutable, il faut choisir dans la rubrique Language Tool :
CC5X Compiler pour indiquer quil ny a pas ddition de liens.
Il nest pas possible dditer les proprits du fichier source.
Les principales options sont fixes partir de la bote de dialogue ci-dessous.

Assembly File : fichier en langage dassemblage


uniquement sans les adresses et les codes des
instructions. Extension asm
List File : Fichier en langage dassemblage, avec
les adresses et les codes des instructions. Extension lst.
Call Tree : Structure des appels de fonctions. Extension fcs.
Variable File : Liste des variables avec leurs adresses. Extension var.
Pour le dtail de toutes les options, voir le manuel
de lutilisateur, pages 48 et suivantes.

La structure dun projet sans dition de liens est


toujours du type ci-contre, avec un seul fichier
source.

Prsentation rapide du compilateur C CC5X pour PIC / Philippe Morenton Lyce Technique PE Martin Bourges

4) EXTENSIONS AU C ANSI / PARTICULARITS DU COMPILATEUR


4.1) DIVERGENCE PAR RAPPORT AU C ANSI
Les fonctions ne peuvent tre utilises de faon rcursive (limitation due aux faibles ressources
du PIC, notamment une pile de quelques niveaux seulement).
Une fonction peut tre appele par le programme principal ou par le gestionnaire dinterruption.
Les variables globales initialises ne sont pas supportes.
Le codage des certaines donnes nest pas conforme au C ANSI (voir ci-dessous)

4.2) DONNES
Seuls les types char (char, signed char, etc.) sont cods selon le C ANSI.
Les types int et long sont cods comme suit (non conformes au C ANSI)
Type

codage

int
long

8 bits
16 bits

Pour les entiers, en plus des types de donnes du C ANSI, le compilateur dispose des types mentionns ci-dessous :
Type
bit
int8, s8
int16, s16
int24, s24
int32, s32
uns8, u8
uns16, u16
uns24, u24
uns32, u32

codage
1 bit
8 bits
16 bits
24 bits
32 bits
8 bits
16 bits
24 bits
32 bits

valeurs
0 ou 1
-128 127
-32768 32767
-8388608 8388607
-2147483648 2147483647
0 255
0 65535
0 16777215
0 4294967295

Pour les donnes virgule flottante de types float ou double, le compilateur dispose des types
mentionns ci-dessous :
Type
float16
float, float24
double, float32

codage
16 bits
24 bits
32 bits

valeurs extrmes / Rsolution


voir manuel page 15
voir manuel page 15
voir manuel page 15

Il est possible de convertir les float24 et 32 au format IEEE754. Voir manuel de lutilisateur page 15.
Le compilateur dispose aussi des types dcimaux virgule fixe. Voir manuel page 16. Lutilisation
de ce type de donnes est rare.

Prsentation rapide du compilateur C CC5X pour PIC / Philippe Morenton Lyce Technique PE Martin Bourges

DONNE DE TYPE BIT


Ce type de donne permet dconomiser de la RAM, ce qui est trs important avec les PIC
dentre de gamme.
Le type bit peut tre utilis comme une variable simple, comme paramtre dune fonction,
comme valeur retourne par une fonction.
Il ne semble pas quil soit possible de dfinir un pointeur sur type bit (de toute faon cest sans
intrt).
Dclaration
Comme nimporte quelle donne. Ex :
bit Fonctionnement ; /*Fonctionnement ne
peut valoir que 2 valeurs 0 ou 1*/

Utilisation
Comme nimporte quelle donne. Ex :
if (Fonctionnement == NORMAL)
{} /* NORMAL vaut 1 par exemple */

Pour la dclaration dun bit plac dans un registre avec adresse, voir ci-dessous.
Utilisation avec MPLAB
Lors du dboguage, il est impossible de visualiser une donne de type bit avec MPLAB.
ACCS UN BIT DUNE DONNE
Il est possible daccder individuellement chacun des bits dune donne, en mentionnant le
numro du bit prcd de . (point) aprs le nom de la variable.
Exemples : PORTA.0 = 1 ;
if (PORTB.4 == 1)
CODAGE DES DONNES SUR PLUSIEURS OCTETS
Loctet de poids faible est rang ladresse basse. Cest la convention petit boutiste (little endian).
BASES POUR LES ENTIERS
En plus des bases du C ANSI, le compilateur CC5X accepte la base 2.
Notation : 0bnombre ou 0Bnombre. Ex : 0b01110011
Il est possible de sparer les bits par des points pour plus de visibilit.
Exemple : 0b1101.1001, 0b1.101.11.00
CHAMPS DE BITS
Indiquer lordre de rangement des bits

Prsentation rapide du compilateur C CC5X pour PIC / Philippe Morenton Lyce Technique PE Martin Bourges

4.3) DCLARATION DUNE DONNE PLACE EN REGISTRE AVEC ADRESSE


Lutilisateur a peu manipuler de telles dclarations. Toutes les dclarations pour les registres
SFR sont dans un fichier en-tte spcifique chaque PIC fourni.
Avec MPLAB, il ny a aucune inclusion placer dans le fichier source. Linclusion dune directive
#include <nom_pic.h> est automatique lors de la compilation.
DCLARATION POUR UNE DONNE DUN OCTET
syntaxe : unsigned char <NOM_REGISTRE> @ <adresse_registre> ;
exemple : unsigned char TMR0 @ 0x01 ;
remarques :
1_ Il est inutile de spcifier la banque
2_ Il est aussi possible de rajouter #pragma devant la dclaration. Ceci na aucun intrt, mais cest
ce qui est fait dans les fichiers en-tte fournis avec le compilateur.
DCLARATION POUR UNE DONNE DE TYPE BIT
syntaxe : bit <NOM_BIT> @ <NOM_REGISTRE>.<N_BIT>
<NOM_REGISTRE> peut tre remplac par une adresse.
bit RC7 @ PORTC.7 /* PORTC doit avoir t dclar */
remarque : Il est aussi possible de rajouter #pragma devant la dclaration. Ceci na aucun intrt,
mais cest ce qui est fait dans les fichiers en-tte fournis avec le compilateur.

4.4) PLACEMENT DES VARIABLES EN RAM


Le placement des variables dans une des banques en RAM est laiss au soin de lutilisateur. Le
choix de la banque peut seffectuer avec une directive de compilation #pragma rambank place
avant la dfinition des variables ou avec le qualificateur bankx (x vaut de 0 1 ou 3 selon le
PIC).
UTILISATION DE LA DIRECTIVE #PRAGMA RAMBANK
Les variables dfinies avant toute directive sont places en banque 0.
#pragma rambank 1
char a, b, c
#pragma rambank 0

a, b et c sont places en banque 1


les variables qui suivent sont places en banque 0

QUALIFICATEUR BANK
Les donnes dfinies sans qualificateur bankx sont places dans la banque 0.

Prsentation rapide du compilateur C CC5X pour PIC / Philippe Morenton Lyce Technique PE Martin Bourges

Ex : bank1 char Tab[60];

4.5) POINTEURS
Le compilateur permet dutiliser 2 tailles pour les pointeurs, 1 octet ou 2 octets, pour accder
tout ou partie de la ROM et de la RAM.
Le choix de la taille des pointeurs peut tre laiss linitiative du compilateur pour les pointeurs
qui ne sont pas inclus dans des tableaux ou des structures.
Lutilisateur peut spcifier la taille dun pointeur lors de sa dfinition laide du qualificateur size1 ou size2. Ces qualificateurs sont utiliser essentiellement dans les tableaux de pointeurs ou
avec des structures dont les champs sont des pointeurs.
Les diffrents types de pointeurs sont donns dans le tableau suivant :
Taille pointeur
8 bits
16 bits
8 bits
16 bits
8 bits

16 bits

mmoire accessible zone accessible


RAM
256 octets
RAM
diffrents segments de RAM jusqu 256 octets chacun
ROM
256 octets
ROM
tout lespace mmoire
RAM et ROM
128 octets en RAM et 128 octets en ROM. le
bit 7 est utilis pour dtecter un accs en
RAM ou en ROM
RAM ou ROM
tout lespace mmoire. le bit 15 est utilis
pour indiquer le type de mmoire

Exemples de dfinition :
bank1 size2 char* PtVar1 ; /* dfinition dun pointeur de 2 octets sur des entiers 8 bits. Le pointeur est plac en banque 1. Il permet daccder tout lespace RAM et ROM */
char* PtVar2 ; /* dfinition dun pointeur sans prcision de taille. Le compilateur fixera la taille en
fonction des accs mmoire raliss avec ce pointeur */
Le choix pour la taille dun pointeur seffectue selon les priorits suivantes :
1_ qualificateur
2_ choix automatique (pointeurs simples)
3_ choix daprs le modle par dfaut fix par les options de la ligne de commande
Pour plus de dtail, voir la manuel de lutilisateur pages 23 et suivantes.

4.6) INTERRUPTION EN C
Le nom de la fonction doit tre prcde de interrupt. Len-tte de la fonction ne doit pas mentionner de valeur de retour et ne doit pas avoir de paramtre.
En tte : interrupt TraitementInter(void)

Prsentation rapide du compilateur C CC5X pour PIC / Philippe Morenton Lyce Technique PE Martin Bourges

Le PIC ne sauvegarde automatiquement dans la pile que ladresse de retour.


Le compilateur ne sauvegarde pas automatiquement les diffrents registres modifis lors du traitement de linterruption. Cest lutilisateur de le faire laide de macros fournies dans le fichier
int16cxx.h.
Avec un seul fichier source en C, sans utilisation de ldition de liens, il faut fixer ladresse de
dbut du programme de traitement dinterruption laide de la directive #pragma origin 4
exemple de programme
#include <int16cxx.h>
#pragma origin 4
interrupt TraitIner (void) {
int_save_registers

int_restore_registers
}

ncessaire pour les macros utilises pour la sauvegarde et


la restitution des registres
les programmes dinterruption de tous les PIC commencent
ladresse 4
le nom importe peu
macro (non suivie dun ;) dfinie dans int16cxx.h
macro (non suivie dun ;) dfinie dans int16cxx.h

4.7) INSERTION DE LIGNES EN LANGAGE DASSEMBLAGE DANS UN PROGRAMME


SOURCE EN C
Des lignes en langage dassemblage peuvent tre insres dans un programme source en C de 2
manires :
entre les directives #asm et #endasm
avec des fonctions in line
Les directives #asm et #endasm permettent d'intgrer plusieurs instructions.
Attention : les instructions en langage dassemblage entres avec les directives prcdentes ne
font pas partie de manire syntaxique du C et elles ne se conforment pas aux rgles de contrle
de flux. Par exemple, on ne peut utiliser un bloc #asm dans une structure if.
Les fonctions in line les plus utilises sont :
nop(), nop2() (2 cycles machines dattente, mais un seul mot en mmoire),
clrwdt() (pour RZ timer chien de garde).
Pour plus de dtail, voir le manuel de lutilisateur page 63 et suivantes.
Linsertion de lignes en langage dassemblage dans un programme source en C doit rester
rare et utilise avec beaucoup de prcautions (pas dinterfrence avec les registres utiliss par
le compilateur, etc.)

Prsentation rapide du compilateur C CC5X pour PIC / Philippe Morenton Lyce Technique PE Martin Bourges

4.8) COMMENTAIRES
Le compilateur accepte les commentaires du style C++ ainsi que les commentaires imbriqus.
Les commentaires imbriqus sont pratiques pour ne pas compiler une partie du programme qui
contient des commentaires.
Exemples :
// Ceci est un commentaire sur une ligne
/* passage supprim pour gagner quelques octets
if (BP2 == 0){
AffichageMsgAccueil(); /* avec animation */
}
*/
Comme les commentaires imbriqus sont accepts, les commentaires de titres de la forme suivante ne sont pas accepts :
/***************************************************************************/
/* Nom fonction : ReinitDureePhaseInst
/* Appele par: ReglageDateHeure()
/* Appelle : /* Niveau de pile: +1
/***************************************************************************/
Il faut utiliser le style suivant :
/***************************************************************************/
// Nom fonction : ReinitDureePhaseInst
// Appele par: ReglageDateHeure()
// Appelle : // Niveau de pile: +1
/***************************************************************************/

5) DFINITION DES REGISTRES


Certains des registres sont communs tous les PIC et sont connus du compilateur. Il sagit des
registres INDF, TMR0, PCL, STATUS, FSR, PORTA, PORTB, TRISA, TRISB, OPTION (+ quelques
autres) Voir dtail page 98 du manuel de lutilisateur.
Pour les autres registres, il faut utiliser les fichiers en-tte fournis

5.1) FICHIERS EN-TTE FOURNIS


De nombreux fichiers en-tte contenant les dfinition de tous les registres et de beaucoup de
bits de contrle / tat sont fournis avec le compilateur.
Avec MPLAB, il est inutile dinclure un fichier en-tte pour le PIC utilis. La directive dinclusion
est effectue automatiquement daprs la configuration du projet car le PIC cible est dfini dans
le projet.
Ex de ligne gnre automatiquement : #include <16F877.h> pour un PIC16F877.

Prsentation rapide du compilateur C CC5X pour PIC / Philippe Morenton Lyce Technique PE Martin Bourges

10

Lemplacement du fichier en-tte nest pas dfinir si on utilise les fichiers fournis. La ligne de
commande automatiquement gnre lors de la compilation donne lemplacement.
Si on veut utiliser un autre dossier, on peut
spcifier le chemin pour les fichiers include
dans la bote de paramtrage du projet.
Il est aussi possible de spcifier le chemin
daccs pour chaque nud du projet.
Attention, si le dossier est dans Program Files,
il faut utiliser le nom court de ce dossier progra~1.

5.2) NOM DES REGISTRES ET DES BITS


Le compilateur reprend les noms des registres dfinis dans la documentation Microchip, sauf
pour quelques registres :
Appellation Microchip
OPTION_REG
AD/GONE

Appellation CC5X
OPTION A vrifier
GO

De nombreux bits de contrle / tat sont dfinis (avec le type bit voir ci-dessus-).
Pour voir le dtail des bits dfinis, diter le fichier en-tte spcifique au PIC utilis.

6) PROGRAMME DE DMARRAGE
Avec CC5X, il ny a pas de programme de dmarrage proprement parler. Un programme de
dmarrage sert mettre les variables globales non initialises 0 et placer les valeurs initiales
pour les variables globales initialises.
CC5X se contente de placer un goto main en dbut de programme.
Les variables globales initialises ne sont pas acceptes  le programmeur doit leur affecter
une valeur avant leur utilisation.
Les variables globales non initialises sont dans une valeur inconnue en dbut de programme.

Prsentation rapide du compilateur C CC5X pour PIC / Philippe Morenton Lyce Technique PE Martin Bourges

11

7) DBOGUAGE AVEC MPLAB

VARIABLES LOCALES
Les variables locales de mme nom dans des blocs diffrents sont renommes. Par exemple, avec 2 variables i,
CC5X conserve ce nom pour la 1re apparaissant dans le
fichier source et renomme la 2me i_2. Ce sont ces noms
qui apparaissent dans la bote de dialogue Edit Watch.
La difficult est de faire la relation entre le nom apparaissant dans la bote de dialogue et la
bonne variable locale du programme.
Le plus simple est dutiliser des noms diffrents pour toutes les variables locales. Pour une
application pdagogique simple avec peu de variables cela est trs facile mettre en uvre.
Si on conserve de noms identiques, il est
possible dditer le fichier de listage pour
voir comment ont t renommes les
variables locales (en utilisant loutil de
recherche avec lidentificateur dorigine).
Ci-contre, on peut voir un extrait du fichier de listage.

0070
;void Tempo2(void)
0071
;{
0072 Tempo2
0073
;char i;
0074
;for(i=0x80;--i;)
0019 3080 0075 MOVLW .128
001A 1283 0076 BCF 0x03,RP0
001B 1303 0077 BCF 0x03,RP1

Prsentation rapide du compilateur C CC5X pour PIC / Philippe Morenton Lyce Technique PE Martin Bourges

12

001C 00A0 0078 MOVWF i_2

8) BIBLIOTHQUES
CC5X ne permet pas la cration et lutilisation de bibliothques au sens habituel du terme, cest-dire des fichiers qui contiennent des fonctions dj compiles.
Cependant on peut utiliser un fichier .c comme une bibliothque avec lemploi de 2 directives
particulires qui permettent de ne pas compiler les fonctions non utilises.
Il sagit de #pragma library1 et #pragma library 0. Les fonctions doivent tre places entre ces 2
directives.
Le fichier bibliothque .c doit tre inclus dans le fichier principal avec une directive #include.

Prsentation rapide du compilateur C CC5X pour PIC / Philippe Morenton Lyce Technique PE Martin Bourges

13