8 Temmuz 2013 Pazartesi

yazdığın kodun diğer işlemcilerde de çalışması

mesela meşhur "capon" arkadaş chan in kodlarına bir bakın;   amcam bir kod yazıyor, alıyorsun AVR, 8051, PIC, Z80, ARM Cortex vs. hepsinde derleyip kullanabiliyorsun..

elemanın genelde de integer.h diye bir dosyası oluyor;
Kod: [Seç]
/*-------------------------------------------*/
/* Integer type definitions for FatFs module */
/*-------------------------------------------*/

#ifndef _INTEGER
#define _INTEGER

#ifdef _WIN32 /* FatFs development platform */

#include <windows.h>
#include <tchar.h>

#else   /* Embedded platform */

/* These types must be 16-bit, 32-bit or larger integer */
typedef int    INT;
typedef unsigned int UINT;

/* These types must be 8-bit integer */
typedef char   CHAR;
typedef unsigned char UCHAR;
typedef unsigned char BYTE;

/* These types must be 16-bit integer */
typedef short   SHORT;
typedef unsigned short USHORT;
typedef unsigned short WORD;
typedef unsigned short WCHAR;

/* These types must be 32-bit integer */
typedef long   LONG;
typedef unsigned long ULONG;
typedef unsigned long DWORD;

#endif

#endif

burada tanımladığı tipleri kullanıyor kodlarında..

mesela kullanırken;
Kod: [Seç]
/* TJpgDec API functions */
JRESULT jd_prepare (JDEC*, UINT(*)(JDEC*,BYTE*,UINT), void*, UINT, void*);
JRESULT jd_decomp (JDEC*, UINT(*)(JDEC*,void*,JRECT*), BYTE);
şeklinde API tanımlıyor;
tipleri de aynı şekilde oluşturuyor;
Kod: [Seç]
...
/* Decompressor object structure */
typedef struct JDEC JDEC;
struct JDEC {
    UINT dctr;    /* Number of bytes available in the input buffer */
    BYTE* dptr;    /* Current data read ptr */
    BYTE* inbuf;   /* Bit stream input buffer */
    BYTE dmsk;    /* Current bit in the current read byte */
    BYTE scale;    /* Output scaling ratio */
    BYTE msx, msy;   /* MCU size in unit of block (width, height) */
    BYTE qtid[3];   /* Quantization table ID of each component */
    SHORT dcv[3];   /* Previous DC element of each component */
    WORD nrst;    /* Restart inverval */
    UINT width, height;  /* Size of the input image (pixel) */
    BYTE* huffbits[2][2]; /* Huffman bit distribution tables [id][dcac] */
    WORD* huffcode[2][2]; /* Huffman code word tables [id][dcac] */
    BYTE* huffdata[2][2]; /* Huffman decoded data tables [id][dcac] */
    LONG* qttbl[4];   /* Dequaitizer tables [id] */
    void* workbuf;   /* Working buffer for IDCT and RGB output */
    BYTE* mcubuf;   /* Working buffer for the MCU */
    void* pool;    /* Pointer to available memory pool */
    UINT sz_pool;   /* Size of momory pool (bytes available) */
    UINT (*infunc)(JDEC*, BYTE*, UINT);/* Pointer to jpeg stream input function */
    UINT (*outfunc)(JDEC*, void*, JRECT*); /* Pointer to RGB output function */
    void* device;   /* Pointer to I/O device identifiler for the session */
};
...

bu şekilde yapınca platformlar arasında sadece ama sadece integer.h de değişiklik oluyor. diğer tüm kodlarını olduğu gibi kullanıyor.

chan i tanımayan arkadaşlar için;  http://elm-chan.org/

çapraz platformlar arasında kolayca geçiş yapabilmek için bu tarzda kod yazmak daha mantıklı..

ya da yarın bir gün 64-bit ARM lar çıkarsa falan aynı kodlarınızı kolayca tekrar derleyebilirsiniz..

Hiç yorum yok:

Yorum Gönder