打印
[STM32F4]

关于STM32F429消息队列与网卡问题。

[复制链接]
1511|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hangbing0203|  楼主 | 2017-3-31 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题描述:
       消息队列传输字节太大,网卡就不能用。 目前,设置消息队列传输8字节,网卡工作ok,但消息队列设置传输buf=32字节,网卡就不能用了。网卡不能用的意思,就是ping局域网不通。
osPoolDef(mpool, 32, Messg);  
osMessageQDef(MsgBox, 32, sizeof(struct Messg *));
typedef struct
{
    int  pip;                                                               
    int  cmd;
    int  data[8];   //如果修改成32字节就,ETH就不能用。
}Messg;

void Message_Send(uint8_t pip,uint8_t cmd,uint8_t *msg)
{
  Messg    *mptr;
  mptr = osPoolAlloc(mpool);                     // Allocate memory for the message
  mptr->cmd=cmd;
  mptr->pip=pip;
  osMessagePut(MsgBox, (uint32_t)mptr, osWaitForever);  // Send Message
}

mpool = osPoolCreate(osPool(mpool));                 // create memory pool
MsgBox = osMessageCreate(osMessageQ(MsgBox), NULL);  // create msg queue

最初步的分析是:发送消息队列线程和接收消息队列线程堆栈太小,和LWIP内存相关部分设置太小,然后分别设置他们的值,结果,还是一样 网卡一样的不能用。 郁闷中,请大虾们指点一下。
沙发
hangbing0203|  楼主 | 2017-4-1 09:14 | 只看该作者
这个问题已经解决: 解决办法是:
typedef struct
{
    int  pip;                                                               
    int  cmd;
    int  data[16];  。
}Messg;
sizeof (messg)=72字节
修改
osPoolDef(mpool, 32, 72);  
osMessageQDef(MsgBox, 32, 72);
就ok。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝