首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Contiki错误“执行MSP430X指令但MCU不是MSP430X”

Contiki错误“执行MSP430X指令但MCU不是MSP430X”
EN

Stack Overflow用户
提问于 2018-12-15 15:50:50
回答 1查看 339关注 0票数 1

我正在Contiki上的Cooja模拟器中运行代码,并收到以下错误消息:

执行MSP430X指令但MCU不是MSP430X

我想广播一个名为ReqMsg的结构。structure.h文件的定义如下:

代码语言:javascript
复制
   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的值如下:

代码语言:javascript
复制
    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,我使用了如下的数据包缓冲区:

代码语言:javascript
复制
    const ReqMsg *req = &r;
    const void *reqAdd = &req;
    packetbuf_copyfrom(reqAdd, 6);
    broadcast_send(&broadcast);

我将buflen宏中的packetbuf_copyfrom参数更改为8、10、255和3512。对于所有相同值的错误消息。仿真中的Contiki错误日志是:

代码语言:javascript
复制
    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错误日志是:

代码语言:javascript
复制
    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

请帮我解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2018-12-15 16:50:06

当内存损坏时,通常会出现“执行MSP430X指令”错误,因此,MCU开始尝试作为指令执行一些不包含实际指令的内存地址。

在您的代码中:

代码语言:javascript
复制
const ReqMsg *req = &r;
const void *reqAdd = &req;
packetbuf_copyfrom(reqAdd, 6);

变量reqAdd包含req变量的地址。相反,您希望将变量r的地址设置为req的值。

代码语言:javascript
复制
const void *reqAdd = req;

更好的办法就是简单地

代码语言:javascript
复制
packetbuf_copyfrom(req, 6);

代码语言:javascript
复制
packetbuf_copyfrom(&r, 6);

因为不需要额外的变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53794768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档