J'ai construit un projet mbed avec le compilateur en ligne ARMCC, qui ne se plaint pas du tout. Après l'exportation des projets hors ligne Keil MDK5. J'ai eu des plaintes suivantes. S'il vous plaît avis si quelqu'un sait comment supprimer/corriger ce problème.CircularBuffer avec le modèle est une erreur ambiguë sur Keil MDK5?
SerialInterfaceProtocol/SerialInterfaceProtocol.h(16): error: #266: "CircularBuffer" is ambiguous
typedef CircularBuffer<uint8_t> SerialBuffer_t;
AlohaTransceiver/AlohaTransceiver.h(178): error: #266: "CircularBuffer" is ambiguous
CircularBuffer<AlohaFrame *> AlohaTxQueue;
AlohaTransceiver/AlohaTransceiver.cpp(44): error: #266: "CircularBuffer" is ambiguous
CircularBuffer<AlohaFrame *> AlohaRxQueue(10);
main.cpp(12): error: #266: "CircularBuffer" is ambiguous
CircularBuffer<uint8_t> SerialInputBuffer(128);
main.cpp(13): error: #266: "CircularBuffer" is ambiguous
CircularBuffer<uint8_t> SerialOutputBuffer(128);
Je sais semble ambiguë si buffer circulaire il a differenet types, mais est défini comme buffer circulaire d'un modèle, qui devrait être utilisé pour différents types? Et compilateur en ligne passé, mais MDK5 n'a pas, est-il des options de compilateur doit être activé?
Le buffer circulaire est défini dans RingBuffer.h
#ifndef RINGBUFFER_H_
#define RINGBUFFER_H_
#define DEFAULT_MAX_BUFFER_SZ 64
#include <stdint.h>
#include <stdlib.h>
template <typename T>
class CircularBuffer
{
private:
const size_t buffer_size;
size_t read_ptr;
size_t write_ptr;
size_t count;
// mutex lock
bool mux;
// overflow
bool is_over_flow;
// container
T *data;
public:
CircularBuffer(const size_t size=DEFAULT_MAX_BUFFER_SZ);
~CircularBuffer();
// psudo mutex
bool isLocked();
void lock();
void unlock();
// enqueue and dequeue
void enqueue(T in);
T dequeue();
// pointer operation
size_t getReadPtr();
size_t getWritePtr();
size_t getCounter();
// overflow
bool getOverFlow();
void clearOverFlow();
// operation
T first();
T last();
// random access
T operator[](size_t idx);
};
#endif
Est-ce que ce compilateur prend même en charge les modèles? – VTT
Bien qu'il n'y ait pas de documents officiels à soutenir, le modèle fonctionne bien dans d'autres projets avec Keil MDK5. Donc, je suppose que oui. –
Oui, j'ai confirmé que le modèle est supporté par Keil MDK5, en exportant un autre [projet de démonstration basé sur un modèle appelé MyBuffer] (https://developer.mbed.org/users/sam_grove/code/Buffer/). Et le projet problématique est appelé [RingBuffer] (https://developer.mbed.org/teams/ENEL400/code/RingBuffer/) et ses projets dépendants sont appelés [LoRaBaseStation] (https://developer.mbed.org/teams/ENEL400/code/LoRaBaseStation /) et [LoRaTerminal] (https://developer.mbed.org/teams/ENEL400/code/LoRaTerminal/). Les deux projets peuvent être construits en ligne, a échoué avec Keil MDK5. Donc, quelque chose ne va pas dans le code. –