TimEOS : compat.h

 

Accueil
Astro
TimEOS
Makefile
main.c
// ***********************************************************
// Project: compatibilité IAR - GCC
// Author:  Pierre NERZIC, 16 avril 2007
// Site: http://pierre.nerzic.free.fr/
// Module description: permet de compiler un même programme C
// avec AVR-GCC et IAR-AVR
//
// Licence: proposé pour information sous licence GPL
// Vous avez le droit de vous en servir à condition de toujours
// laisser mon nom et la référence à mon site internet.
// ***********************************************************

// fichier de compatibilité IAR - GCC, il inclut les defs du contrôleur

// l´idée est de définir des symboles et macros communs aux deux compilateurs.
// certaines ne marchent pas sur l´IAR car je n´ai pas eu le temps de finir avant
// l´expiration de la licence d´évaluation. Ce sont les définitions des routines
// d´interruption qu´il faut améliorer.
// Tout marche sur GCC.


#ifndef COMPAT_H
#define COMPAT_H

#ifdef __GNUC__

// définitions qui permettent de compiler du code C IAR
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/pgmspace.h>

// mots clés IAR adaptés à GCC
#define __C_task		__attribute__((__noreturn__)) void
#define __no_operation()	__asm__ __volatile__("nop"::)
#define __enable_interrupt()	sei()
#define __disable_interrupt()	cli()
#define __sleep()		sleep_mode()

// accéder aux bits des ports
typedef struct
{
	unsigned char bit0:1;
	unsigned char bit1:1;
	unsigned char bit2:1;
	unsigned char bit3:1;
	unsigned char bit4:1;
	unsigned char bit5:1;
	unsigned char bit6:1;
	unsigned char bit7:1;
} io_reg; 

#define BIT0(port)	(((volatile io_reg*)_SFR_MEM_ADDR(port))->bit0)
#define BIT1(port)	(((volatile io_reg*)_SFR_MEM_ADDR(port))->bit1)
#define BIT2(port)	(((volatile io_reg*)_SFR_MEM_ADDR(port))->bit2)
#define BIT3(port)	(((volatile io_reg*)_SFR_MEM_ADDR(port))->bit3)
#define BIT4(port)	(((volatile io_reg*)_SFR_MEM_ADDR(port))->bit4)
#define BIT5(port)	(((volatile io_reg*)_SFR_MEM_ADDR(port))->bit5)
#define BIT6(port)	(((volatile io_reg*)_SFR_MEM_ADDR(port))->bit6)
#define BIT7(port)	(((volatile io_reg*)_SFR_MEM_ADDR(port))->bit7)

#define Register(r,v)	register v __asm__(#r)

// mémoire flash

#define FLASH_DECLARE(x) x __attribute__((__progmem__))
#define __flash __attribute__((__progmem__))


#endif


#ifdef __ICCAVR__

// cette partie pour IAR n´est pas terminée car ma licence d´évaluation est
// arrivée à échéance et je n´ai pas vu l´intérêt d´acheter la licence permanente
// puisque le compilateur payant fait moins bien que le compilateur gratuit.

// enable use of extended keywords
#pragma language=extended

#include <inavr.h>

#ifndef ENABLE_BIT_DEFINITIONS
#define ENABLE_BIT_DEFINITIONS
// Enable the bit definitions in the iom*.h file
#endif

#include <io2313.h>

// Ca ne marche pas bien... faudrait y bosser
#define DefVector(nom) //pragma vector=nom ## _vect;
#define ISR(nom)    __interrupt void nom ## _ISR(void)

#define FLASH_DECLARE(x) __flash x

#define BIT0(port)  port ## _Bit0
#define BIT1(port)  port ## _Bit1
#define BIT2(port)  port ## _Bit2
#define BIT3(port)  port ## _Bit3
#define BIT4(port)  port ## _Bit4
#define BIT5(port)  port ## _Bit5
#define BIT6(port)  port ## _Bit6
#define BIT7(port)  port ## _Bit7


#define Register(r,v)	register v

#endif
#endif


Accueil | Astro | TimEOS | Makefile | main.c

La dernière mise à jour de ce site date du 14/10/2007. © Pierre Nerzic 2007.