中级会员
 
- 积分
- 211
- 金钱
- 211
- 注册时间
- 2015-12-6
- 在线时间
- 47 小时
|
1金钱
本帖最后由 我是520老谢 于 2022-9-21 17:09 编辑
1、平台:STM32F407
2、硬件: 以太网
3、系统:FreeRtos
问题1、:(网上找的一个工程)使用消耗内存的工程,内存不够了,功能都正常
问题2、:使用cubeMx生成的工程,内存余量还比较足,但是同时使用netconn和httpd的时候
(测试1、httpd2秒刷新一次页面,而且刷新页面变得很慢。和问题1上面的工程,刷新的数据的速度,差距太大了,一个感觉不明显,一个看着刷网页 以太网的任务就不运行了,其他任务继续运行,http也不正常了)
(测试2、如果不使用httpd刷新页面,单独只有netconn任务,作为客户端往服务器上面发送数据,目前以太网还正常)
说之前:我需要使用以太网,但是不想用到太多的内存,因为我还有好些地方的代码需要使用到内存
目前情况是这样的,以太网和FreeRtos消耗了太多的ram。这个工程是之前网上找的,功能都正常沿用至今,但是消耗内存非常严重。
一开始代码还算够用,就凑合着用,用着用着就越来越被动了,到最后实在是没有办法了,
我试过修改了FreeRTOSConfig.h、lwipopts.h只有部分修改了但是不能修改得太小,修改得太小不是串口有问题,就是以太网又不行了
最后我使用cubeMx重新生成了一个工程,这个工程蛮好,内存消耗比之前小很多,(工程系统+以太网消耗内存大约40Kb。之前的大约90Kb)
但是cubeMx生成的工程,还有另外一个问题,就是问题2的情况。所以咨询一下,
mem、memp属于lwip使用heap_4 属于 freeros使用
消耗内存大的工程内存使用情况:接近100K的内存,非常的被动。
2220 14936 app_eth_client.o
23412 6260 bsp_eth.o
1200 19259 drv_st_usart.o
24576 4331 heap_4.o
1024 34017 httpd.o
24595 8605 mem.o
28583 11428 memp.o
1088 6520 mod_malloc.o
1024 992 startup_stm32f407xx.o
最大内存使用100K

使用cubeMx生成的工程内存使用情况:我自己将一些工程的内存加大了,但是余量对比还是很足的。

最大内存使用41.8K
1908 396 0 16 4156 15244 app_eth_client.o
1734 54 0 4 1720 76450 cmsis_os2.o
1810 100 32 0 1712 19407 drv_st_usart.o
1944 228 0 4 12520 11373 ethernetif.o
724 74 0 32 15360 5095 heap_4.o
4974 1332 154 36 1024 25466 httpd.o
2656 1098 0 16 1619 9061 mem.o
816 502 208 52 12427 11476 memp.o
504 60 12 20 2176 6568 mod_malloc.o
36 8 392 0 1024 868 startup_stm32f407xx.o
3444 422 0 60 1220 33244 tasks.o
目前修改方向有两个
1、要么我将之前的工程的内存缩小。
---》内存问题,这个内存不是修改.h文件这样就可以的,因为我修改过几个,修改之后要么这里不正常,要么那里不正常的。
比如修改了memp、mem的堆情况,串口、或者SPI、或者网络不能用,总会出现一些奇奇怪挂的问题。
但是我不将内存减小,已经没有办法使用内存了
2、要么我将cubuMx工程存在的问题解决。
---》以太网和httpd同时使用有问题,且网页刷新特别的卡,同时也还不确定有没有其他问题,目前来看主要是这个问题。
有朋友了解怎么处理的希望告知一下,我先自己调试看看,哪些地方能减少消耗的。
--------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------
我修改了几个地方:
1、mem
2、memp
3、heap_4
4、以太网缓存,最终由于这几个缓存都没有办法缩小,如果缩小了就有一些奇奇怪怪的问题出现
#define ETH_RXBUFNB ((uint32_t)8U) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */
#define ETH_TXBUFNB ((uint32_t)8U) /* 4 Tx buffers of size ETH_TX_BUF_SIZE */
测试1、修改freertosconfigTOTAL_HEAP_SIZE ((size_t)(22*1024))#define configTOTAL_HEAP_SIZE((size_t)(24*1024))串口发送:正常以太网httpd:正常以太网tcp连接:正常SPI:正常但是,只要串口发送数据,以太网就不正常,系统卡主
测试2、MEM_SIZE 从 24减小到20 串口不正常#define MEM_SIZE (20*1024)//(16*1024) 临时测试使用 SPI已经无法使用 24
测试3、ETH_RXBUFNB、ETH_TXBUFNB较小到7。以太网就无法使用
|
|