2013-01-17 1 views
2

Contexte:C++: façon de créer l'équivalent de 'octet' Arduino dans Xcode

Je suis la programmation d'un ATmega328. Je ne peux pas supporter l'IDE Arduino, donc je préfère utiliser Xcode pour écrire du code. Cependant, j'ai trouvé toutes les options disponibles en ligne pour utiliser Xcode pour réellement télécharger des croquis vers Arduino pour être compliqué au mieux et n'ont pas réussi à les implémenter.

Méthode actuelle:

Ce qui fonctionne actuellement bien pour moi est d'utiliser Xcode strictement comme un débogueur, et « créer » des versions dépouillées vers le bas des classes Arduino quand je besoin d'eux de sorte que le débogueur ne panique pas quand je mettre en lignes de code spécifique à Arduino. Par exemple, j'ai une classe de série dans mon projet Xcode qui a les fonctions suivantes, qui fonctionnent très bien:

void Serial::print(int myInt) 
{ 
    cout << myInt; 
} 

void Serial::println(int myInt) 
{ 
    cout << myInt << endl; 
} 

Je fais la même chose pour les chaînes, et tout autre norme C++ type de données que je peux avoir besoin d'imprimer. De cette façon, chaque fois que je veux mettre Serial.print dans une fonction dans une autre classe sur laquelle je travaille, je peux déboguer strictement à partir de Xcode sans ouvrir l'IDE Arduino. Je peux aussi créer un « faux » classe pour pinMode, etc.

Problème:

Je voudrais le faire avec le byte utilisé dans le type de données environnement Arduino. Je prends une approche orientée objet de ce programme, et il menace de manger la précieuse RAM sur mon petit Arduino. Donc, afin de gagner de la place, je convertis tous mes int en byte et ainsi de suite. Mais, je suppose (et mon compilateur me dit) que je ne peux pas sous-classer char, ou int, ou tout autre type de base. Je ne vois pas comment je peux commencer à utiliser des instructions comme "byte a = 2" ou quelque chose de similaire avec ma méthode de contournement actuelle (quelque peu alambiquée).

Essentiellement, je veux tromper Xcode en pensant byte est la même chose que int pour toutes fins et intentions.

Des idées?

Répondre

2

Typedefs. (Soit dit en passant, il est pas Xcode qui vous serez tromper, mais le compilateur.)

typedef int byte; 

ou

typedef uint8_t byte; 
3

Vous cherchez le mot-clé typedef:

typedef int byte; 

Mais int types sont généralement plus grandes qu'un seul octet. Ce que vous vraiment veulent probablement est:

typedef unsigned char byte; 
1

Vous pouvez probablement vous épargner beaucoup d'efforts en réutilisant ncore qui met en œuvre la couche d'abstraction matérielle Arduino pour Mac.

Même si vous voulez faire cela à la main, ça vaut le coup de regarder ncore. Il définit l'octet en utilisant:

typedef uint8_t byte; 

(en fait, c'est exactement comment les bibliothèques fournies avec l'IDE Arduino définissent aussi!)

+1

Merci pour le heads up. J'ai essayé juste de lancer le dossier ncore dans mon projet XCode et j'ai eu toutes sortes d'erreurs. Le Readme semble indiquer que ncore est mieux utilisé à partir de la ligne de commande, ce qui est un niveau de complexité dont je n'ai pas besoin et que je ne veux pas encore traiter. –

+0

C'est une information utile pour moi. Merci! –