'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 |
|---|
