2017-07-19 4 views
0

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 
+0

Est-ce que ce compilateur prend même en charge les modèles? – VTT

+0

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. –

+0

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. –

Répondre

0

Il y a deux dans le buffer circulaire projet, on est dans OS mbed, l'autre est dans le code utilisateur. Fusionnez-les ou renommez l'un d'entre eux.