'ASSERT: Condition 'mac' does not hold in function 'initialize' at veins/modules/application/ieee80211p/DemoBaseApplLayer.cc:49

I am implementing a Vehicle-to-Vehicle communication in Veins. Two problematic files are CarAppLayer - Car application layer and TransmissionData - file responsible for the data transmission between the cars. For several days I am facing an error saying A runtime error occurred:

ASSERT: Condition 'mac' does not hold in function 'initialize' at veins/modules/application/ieee80211p/DemoBaseApplLayer.cc:49 -- in module (veins::TransmissionData) FLScenario.transmission_data (id=7), during network initialization

In the following, I made the code more readable by replacing unnecessary lines of code by ...

This is my Network file called FLScenario.ned

import org.car2x.veins.nodes.Scenario;
import TransmissionData;

network FLScenario extends Scenario
{
    parameters:
        @display("bgb=6665.92,5035.4717;bgi=background/terrain");
    submodules:
        transmission_data: TransmissionData;  // If commented out, error disappears
}

The following three files, model the application layer of a car

CarAppLayer.ned

import org.car2x.veins.modules.application.ieee80211p.DemoBaseApplLayer;
import TransmissionData;

simple CarAppLayer extends DemoBaseApplLayer
{
parameters:
    @class(veins::CarAppLayer);
    @display("i=block/app2;p=1500,100");    
}

CarAppLayer.h

#ifndef FL_CARAPPLAYER_H_
#define FL_CARAPPLAYER_H_

#include "veins/modules/application/ieee80211p/DemoBaseApplLayer.h"
#include "TransmissionData.h"

namespace veins {

class VEINS_API CarAppLayer : public DemoBaseApplLayer {
public:
    void initialize(int stage) override;
    ...

protected:
    
    TransmissionData* transmData;
    ...
protected:
    void onWSM(BaseFrame1609_4* wsm) override;
    void handleSelfMsg(cMessage* msg) override;
    void handlePositionUpdate(cObject* obj) override;

private:
    ...

};
} // namespace veins
#endif /* FL_CARAPPLAYER_H_ */

CarAppLayer.cpp

...

#include "CarAppLayer.h"

using namespace veins;

Define_Module(veins::CarAppLayer);

void CarAppLayer::initialize(int stage)
{
    DemoBaseApplLayer::initialize(stage);

    transmData = FindModule<TransmissionData*>::findGlobalModule();  // returns a pointer to TransmissionData object
    ASSERT(transmData);
}


void CarAppLayer::handleSelfMsg(cMessage* msg)
{
    TraCIDemo11pMessage* wsm = check_and_cast<TraCIDemo11pMessage*>(msg);
}

void CarAppLayer::onWSM(BaseFrame1609_4* frame) 
{

}


void CarAppLayer::handlePositionUpdate(cObject* obj)
{
    DemoBaseApplLayer::handlePositionUpdate(obj);
}

Last three files model the transmission of the packet between the cars

TransmissionData.ned

import org.car2x.veins.modules.application.ieee80211p.DemoBaseApplLayer;

simple TransmissionData extends DemoBaseApplLayer{
    @class(veins::TransmissionData);
}

TransmissionData.h

#ifndef FL_TRANSMISSIONDATA_H_
#define FL_TRANSMISSIONDATA_H_

#include "veins/modules/application/ieee80211p/DemoBaseApplLayer.h"

namespace veins {

class VEINS_API TransmissionData : public DemoBaseApplLayer {
private:
    ...

public:
    void initialize();
    ...
};
}  //namespace veins

TransmissionData.cc

#include "TransmissionData.h"

namespace veins {

Define_Module(veins::TransmissionData);

void TransmissionData::initialize() {
    EV << "TransmissionData, initialized \n";
}
}  // namespace veins

DemoBaseApplLayer.cc mentioned in the error can be found here

Another observation is that the error also disappears if I run the program in Veins/examples directory and not in the separate project folder as I want to do. Could somebody help?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source