搜索
查看: 5361|回复: 12

[求助] STM32H743通过以太网连续发送图片,一段时间后,发送会很慢

[复制链接]

该用户从未签到

3

主题

11

帖子

0

蝴蝶豆

初级会员

最后登录
2019-3-12
发表于 2019-1-11 11:27:37 | 显示全部楼层 |阅读模式
5ST金币
我用的芯片是STM32H743+LAN8742,在这个平台上实现摄像头图片采集压缩成JPEG格式,然后通过以太网(LWIP)的netconn_write函数发送出去,我这边是服务器端,电脑端使用的是原子开发板资料中的软件“串口&网络摄像头软件”作为客户端。我建了两个线程一个用来采集图像和压缩,一个是以太网连接和发送压缩图片的,每个线程结束后加一个osDelay(30); 一开始运行都正常一秒钟可以发送几帧图片,但运行一段时间后,我这一个小时,图片发送就卡了,很慢大概一分钟才发出一帧图片。线程后的延时时间长了,正常运行的时间就会长一些。因为就卡在err = netconn_write(newconn, Jpeg_Image_Buffer,JPEG_ImageSize_Bytes, NETCONN_COPY);这条语句的地方,我对LWIP内部不了解,所以不清楚可能的原因,希望有了解的朋友可以给予指点指点,非常感谢!

回复

使用道具 举报

该用户从未签到

3

主题

11

帖子

0

蝴蝶豆

初级会员

最后登录
2019-3-12
 楼主| 发表于 2019-1-14 09:12:09 | 显示全部楼层
自己顶一下
回复

使用道具 举报

该用户从未签到

29

主题

1285

帖子

59

蝴蝶豆

论坛元老

最后登录
2021-6-27
发表于 2019-1-15 09:24:34 | 显示全部楼层
帮顶
回复

使用道具 举报

该用户从未签到

6

主题

1029

帖子

133

蝴蝶豆

金牌会员

最后登录
2021-4-24
发表于 2019-1-15 09:35:23 | 显示全部楼层
帮顶
回复

使用道具 举报

该用户从未签到

4

主题

456

帖子

2

蝴蝶豆

金牌会员

最后登录
2020-7-8
发表于 2019-1-15 09:46:58 | 显示全部楼层
帮顶
回复

使用道具 举报

该用户从未签到

60

主题

2111

帖子

31

蝴蝶豆

版主

最后登录
2023-6-21
发表于 2019-1-15 17:40:09 | 显示全部楼层

帮顶
回复

使用道具 举报

该用户从未签到

52

主题

1122

帖子

67

蝴蝶豆

论坛元老

最后登录
2021-4-24
发表于 2019-1-15 20:32:06 | 显示全部楼层
我不知道我的理解对吗。正常情况下你没接收到的数据都想要发出去。但是你采用的会不会是另一个思路:
采集图片的线程优先级低,发送的现成优先级高。每次发完你就等待读取图像的线程释放一个semaphore。这样发送一旦获得这个semaphore就执行发送任务。依次类推。所以如果发送堵塞,就停止读取?

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

回复

使用道具 举报

该用户从未签到

3

主题

11

帖子

0

蝴蝶豆

初级会员

最后登录
2019-3-12
 楼主| 发表于 2019-1-16 09:54:39 | 显示全部楼层
watershade 发表于 2019-1-15 20:32
我不知道我的理解对吗。正常情况下你没接收到的数据都想要发出去。但是你采用的会不会是另一个思路:
采集 ...

感谢你的回复,的确图片采集线程的优先级低,发送线程的优先级高,现在是图像采集完成后,进入发送线程,然后就发送的很慢,也不是完全停止,是发送很慢很慢,发送完了还是有图像采集,然后又是很慢很慢的发送进程了。
回复

使用道具 举报

该用户从未签到

52

主题

1122

帖子

67

蝴蝶豆

论坛元老

最后登录
2021-4-24
发表于 2019-1-16 15:58:55 | 显示全部楼层
zhangh002 发表于 2019-1-16 09:54
感谢你的回复,的确图片采集线程的优先级低,发送线程的优先级高,现在是图像采集完成后,进入发送线程, ...

你可以改用UDP发送试一下。TCP可能会有网络堵塞的可能。先确保你这边没有问题。(如果UDP也是这种情况就可能有问题)
回复

使用道具 举报

该用户从未签到

3

主题

11

帖子

0

蝴蝶豆

初级会员

最后登录
2019-3-12
 楼主| 发表于 2019-1-17 18:07:46 | 显示全部楼层
watershade 发表于 2019-1-16 15:58
你可以改用UDP发送试一下。TCP可能会有网络堵塞的可能。先确保你这边没有问题。(如果UDP也是这种情况就 ...

通过仿真,网络发送线程发送缓慢的时候,程序一直停留在static void prvCheckTasksWaitingTermination( void )
和static portTASK_FUNCTION( prvIdleTask, pvParameters )这两个函数间来回执行,不明白为何会调到这里来。
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-25 16:00 , Processed in 0.182513 second(s), 41 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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