OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6400|回复: 8

F407+LAN8720A+ LWIP UDP发送卡死求助

[复制链接]

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-10-10
在线时间
68 小时
发表于 2018-3-14 10:28:33 | 显示全部楼层 |阅读模式
2金钱
F407+LAN8720A 现在出现了一个问题,相同的代码,在不同的板子上面,socket的连接和发送都没有问题。 UDP接收没有问题,UDP发送有的板子卡死,有的板子不卡死。不是偶尔的卡死,是只要UDP发送就卡死,请大神帮忙分析下。有没有人遇到过这样的情况。求助。


最佳答案

查看完整内容[请看2#楼]

问题找到了,是内存拷贝的时候出问题。。谢谢各位
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-10-10
在线时间
68 小时
 楼主| 发表于 2018-3-14 10:28:34 | 显示全部楼层
问题找到了,是内存拷贝的时候出问题。。谢谢各位
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-3-15 01:34:19 | 显示全部楼层
帮顶
回复

使用道具 举报

1

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2014-1-10
在线时间
40 小时
发表于 2018-3-15 08:15:54 | 显示全部楼层
裸奔的还是用的RTOS
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-10-10
在线时间
68 小时
 楼主| 发表于 2018-3-15 09:24:50 | 显示全部楼层
用的FreeRTOS
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-10-10
在线时间
68 小时
 楼主| 发表于 2018-3-15 09:49:20 | 显示全部楼层
还有一个现象就是,UDP发送的数据已经完全发送出来了。发送出来后就卡死了。
回复

使用道具 举报

11

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-10-10
在线时间
68 小时
 楼主| 发表于 2018-3-15 12:53:54 | 显示全部楼层
发现卡死的地方了,但是不知道原因
#define LWIP_TCPIP_CORE_LOCKING         1
err_t
tcpip_send_msg_wait_sem(tcpip_callback_fn fn, void *apimsg, sys_sem_t* sem)
{
#if LWIP_TCPIP_CORE_LOCKING
  LWIP_UNUSED_ARG(sem);

  LOCK_TCPIP_CORE();

  fn(apimsg);

  UNLOCK_TCPIP_CORE();
//检测已经运行到这里了,应该返回了。但是,就是卡住到返回
  return ERR_OK;
#else /* LWIP_TCPIP_CORE_LOCKING */
  TCPIP_MSG_VAR_DECLARE(msg);

  LWIP_ASSERT("semaphore not initialized", sys_sem_valid(sem));
  LWIP_ASSERT("Invalid mbox", sys_mbox_valid_val(mbox));

  TCPIP_MSG_VAR_ALLOC(msg);
  TCPIP_MSG_VAR_REF(msg).type = TCPIP_MSG_API;
  TCPIP_MSG_VAR_REF(msg).msg.api_msg.function = fn;
  TCPIP_MSG_VAR_REF(msg).msg.api_msg.msg = apimsg;

  sys_mbox_post(&mbox, &TCPIP_MSG_VAR_REF(msg));

  sys_arch_sem_wait(sem, 0);

  TCPIP_MSG_VAR_FREE(msg);
  return ERR_OK;
#endif /* LWIP_TCPIP_CORE_LOCKING */
}




static err_t
netconn_apimsg(tcpip_callback_fn fn, struct api_msg *apimsg)
{
  err_t err;

#ifdef LWIP_DEBUG
  /* catch functions that don't set err */
  apimsg->err = ERR_VAL;
#endif /* LWIP_DEBUG */

#if LWIP_NETCONN_SEM_PER_THREAD
  apimsg->op_completed_sem = LWIP_NETCONN_THREAD_SEM_GET();
#endif /* LWIP_NETCONN_SEM_PER_THREAD */

  err = tcpip_send_msg_wait_sem(fn, apimsg, LWIP_API_MSG_SEM(apimsg));
//卡到这里了。。但是,我检测 tcpip_send_msg_wait_sem 这个函数已经运行完了,到了最后一步了
  if (err == ERR_OK) {          
    return apimsg->err;
  }
  return err;
}
请大神帮忙看看,这到底是怎么回事
回复

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1350
金钱
1350
注册时间
2012-4-25
在线时间
195 小时
发表于 2018-3-16 08:50:27 | 显示全部楼层
明显是有个信号量,没有返回
1-1
回复

使用道具 举报

1

主题

87

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2018-11-7
在线时间
16 小时
发表于 2018-11-11 19:45:36 | 显示全部楼层
帮顶   
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 18:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表