我用的芯片是STM32H743+LAN8742,在这个平台上实现摄像头图片采集压缩成JPEG格式,然后通过以太网(LWIP)的netconn_write函数发送出去,我这边是服务器端,电脑端使用的是原子开发板资料中的软件“串口&网络摄像头软件”作为客户端。我建了两个线程一个用来采集图像和压缩,一个是以太网连接和发送压缩图片的,每个线程结束后加一个osDelay(30); 一开始运行都正常一秒钟可以发送几帧图片,但运行一段时间后,我这一个小时,图片发送就卡了,很慢大概一分钟才发出一帧图片。线程后的延时时间长了,正常运行的时间就会长一些。因为就卡在err = netconn_write(newconn, Jpeg_Image_Buffer,JPEG_ImageSize_Bytes, NETCONN_COPY);这条语句的地方,我对LWIP内部不了解,所以不清楚可能的原因,希望有了解的朋友可以给予指点指点,非常感谢! |
STM32H7ZGT6使用SPI+DMA方式驱动屏幕时候,使用阻塞式发送不会花屏幕,但是使用DMA方式会花屏。
STM32H750内部flash读写
STM32H743采用flash swap 进行IAP升级,reset后启动不了
STM32双核H7核间通信的方法
STM32H743IIC,HAL库驱动硬件I2C,hi2c2.state一直是busy. 为什么?
H747 DSI 模块的官方例程跑不通
MAC回环或以太网PHY芯片回环怎么实现?
STM32745/747芯片固件升级问题
H743 DAC通道缓冲器的校准问题
STM32H750更改时钟后,程序无法运行
帮顶
采集图片的线程优先级低,发送的现成优先级高。每次发完你就等待读取图像的线程释放一个semaphore。这样发送一旦获得这个semaphore就执行发送任务。依次类推。所以如果发送堵塞,就停止读取?
评分
查看全部评分
感谢你的回复,的确图片采集线程的优先级低,发送线程的优先级高,现在是图像采集完成后,进入发送线程,然后就发送的很慢,也不是完全停止,是发送很慢很慢,发送完了还是有图像采集,然后又是很慢很慢的发送进程了。
你可以改用UDP发送试一下。TCP可能会有网络堵塞的可能。先确保你这边没有问题。(如果UDP也是这种情况就可能有问题)
通过仿真,网络发送线程发送缓慢的时候,程序一直停留在static void prvCheckTasksWaitingTermination( void )
和static portTASK_FUNCTION( prvIdleTask, pvParameters )这两个函数间来回执行,不明白为何会调到这里来。
仿真器调试发现发送卡的时候,程序一直在prvCheckTasksWaitingTermination和 portTASK_FUNCTION这两个函数间来回跳,不明白为何会调到这里来?