Naar inhoud springen

Ontwerp en bouw een besturingssysteem/Organisatie/Portability

Uit Wikibooks

Als je besturingssysteem verder vordert, zal je het ook wel eens op een ander platform dan je eigen willen kunnen compileren. Dit heet portability en om dit mogelijk te maken moeten we gebruik maken van C macro's. Het probleem is namelijk dat elk platform en elke compiler anders compileert. Zo kan een 64-bits platform een 64-bits int datatype gebruiken. Als je er in je code dan vanuit gaat dat int 32-bits is, ontstaan de problemen.

Om dit te voorkomen maken we een headerbestand waarin we de datatypes declareren. Voor andere platformen hoef je dan alleen dit headerbestand aan te passen.

/kernel/include/types.h

#ifndef __TYPES_H
#define __TYPES_H

#ifndef NULL
// De NULL pointer.
#define NULL ((void*) 0)
#endif

typedef unsigned char         byte; ///< Een 1-byte signed integer, moet niet gebruikt worden voor strings.
typedef   signed char        sbyte; ///< Een 1-byte unsigned integer, moet niet gebruikt worden voor strings.
typedef   signed short       int16; ///< Een 2-byte signed integer.
typedef unsigned short      uint16; ///< Een 2-byte unsigned integer.
typedef   signed long        int32; ///< Een 4-byte signed integer.
typedef unsigned long       uint32; ///< Een 4-byte unsigned integer.

typedef   signed int          nint; ///< Een platform-specifieke (native) signed integer.
typedef unsigned int         unint; ///< Een platform-specifieke (native) unsigned integer.

typedef unsigned char        achar; ///< Een 1-byte ASCII karakter, geschikt voor strings.

// Boolean type.
// Niet te gebruiken voor vergelijkingen als
// bool b = (a == 10);
typedef enum { false, true } bool;

#endif    // __TYPES_H
TODO:
Wat is de ideale naam en map voor types.h?
Wat komt er nog meer bij portability kijken?
Hoe pas je types.h aan voor andere platforms?
Of: hoe maak en bewaar je types.h voor meerdere platforms tegelijk?
Is #define PTRSIZE sizeof(void*) ook nodig?

Voortaan gebruiken we dus nint in plaats van int en achar in plaats van unsigned char.

 

Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.