Ошибка Contiki Cooja «Выполнение инструкции MSP430X, но MCU не является MSP430X» - PullRequest
0 голосов
/ 15 декабря 2018

Я запускаю код в симуляторе Cooja на Contiki и получаю следующее сообщение об ошибке:

Выполнение инструкции MSP430X, но MCU не является MSP430X

Я хочутранслировать структуру с именем ReqMsg.Файл structure.h был определен следующим образом:

   typedef struct {

    int id ;

    int t1 ;

    int t2 ;

    char op[4];

    char E[2][2][4];

    char S[2][2][4];

    char type[20];

}EventPattern; 

typedef struct {

    int id;

    EventPattern epin;

    EventPattern epout;

    EventPattern epresolved;

    int remainEnergy;

}ReqMsg;

Я дал значения ReqMsg r, как показано ниже:

    EventPattern ep1 = {1, 1, 20,{{"a"} , {"b"}} ,{"seq"},{{"seq","a"},{"seq", "b"}}, "re"};
    EventPattern ep2 = {2, 1, 20,{{"a"} , {"b"}} ,{"seq"},{{"seq","a"},{"seq", "b"}}, "re"};
    EventPattern ep3 = {3, 1, 20,{{"a"} , {"b"}} ,{"seq"},{{"seq","a"},{"seq", "b"}}, "re"};
    ReqMsg r = {1, ep1, ep2, ep3, 5};

и для трансляции ReqMsg я использовал пакетный буфер, как показано ниже:

    const ReqMsg *req = &r;
    const void *reqAdd = &req;
    packetbuf_copyfrom(reqAdd, 6);
    broadcast_send(&broadcast);

Я изменил параметр buflen в макросе packetbuf_copyfrom на 8, 10, 255 и 3512. Сообщение об ошибке для всех значений, где то же самое.Журнал ошибок Contiki в симуляции:

    Executing MSP430X instruction but MCU is not a MSP430X
    Stack Trace: number of calls: 2 PC: $00002
    InterruptVectors (memset.c) called from PC: $062ca (elapsed: 5)
    rtimer_run_next (memset.c) called from PC: $05b38 (elapsed: 24)
    *** Interrupt 6 from PC: $042b8

, а журнал ошибок Java:

    org.contikios.cooja.ContikiError
at org.contikios.cooja.mspmote.MspMote.execute(MspMote.java:341)
at org.contikios.cooja.mspmote.MspMote.execute(MspMote.java:298)
at org.contikios.cooja.motes.AbstractWakeupMote$1.execute(AbstractWakeupMote.java:47)
at org.contikios.cooja.Simulation.run(Simulation.java:280)
at java.lang.Thread.run(Thread.java:745)
Caused by: se.sics.mspsim.core.EmulationException: Executing MSP430X 
instruction but MCU is not a MSP430X
at se.sics.mspsim.core.MSP430Core.emulateOP(MSP430Core.java:1079)
at se.sics.mspsim.core.MSP430.stepMicros(MSP430.java:253)
at org.contikios.cooja.mspmote.MspMote.execute(MspMote.java:337)
... 4 more

Пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 15 декабря 2018

Ошибка «Выполнение инструкции MSP430X» обычно появляется при повреждении памяти, и в результате MCU начинает пытаться выполнить в качестве инструкций некоторые адреса памяти, которые не содержат фактических инструкций.

В вашем коде:

const ReqMsg *req = &r;
const void *reqAdd = &req;
packetbuf_copyfrom(reqAdd, 6);

переменная reqAdd содержит адрес переменной req.Вместо этого вы хотите установить адрес переменной r, который равен значению из req:

const void *reqAdd = req;

Еще лучше просто сделать

packetbuf_copyfrom(req, 6);

или

packetbuf_copyfrom(&r, 6);

, поскольку нет необходимости в дополнительных переменных.

...