记一次被正点原子坑了的经历

被正点原子坑,不是买了他们的板子,而是用了他们的一个Lwip的配置文件lwipopt.h文件,事情是这样的,我现在开发的这个项目用lwip的库,版本是1.4.1,上手的时候不会lwip,正好原子家lwip家的教程是基于1.4.1的,于是就用用原子的教程学,熟悉lwip的人都知道,他需要一个lwipopt.h对lwip进行配置和裁剪。刚入门就直接拿原子的配置文件来用,因为版本一样,省去了我码字的麻烦,充分发扬了程序员copy的本领,隐患就此埋下,因为原子的lwip的一个选项有问题,就是这个配置DEFAULT_UDP_RECVMBOX_SIZE,设置UDP通信邮箱的大小,因为的项目是双网口的既需要TCP socket,也需要UDP socket,当时测试TCP没什么问题,但是UDP就会出现问题,我使用野火的UDP socket通信例子测试没有什么问题,但是加上我自己的应用就会出问题,我的应用编译完毕消耗了30kB的RAM,整个应用编译完毕剩下不到30KB的RAM(MCU的ram大小256KB),我当时没有注意到这个选项配置有问题,而是尽我所能的裁剪和优化我的应用,直至不能再优化,即便如此也只是腾出寥寥几KB的RAM,对FreeRTOS和LWIP各种裁剪,各种蹂躏,就差拿寄存器开发底层了。我槽。。。。。。。MMP,后来我在单步调试时,无意中注意到这个选项我注意到这UDP MBOX的Buffer很大,一个有8000B,尝试把他改小,顿时腾出100多KB的内存,感情TMD在逗我,我天天跟领导讲RAM不够用,可能要黄,现在你要我怎么跟领导讲。   23333333

记一次被正点原子坑了的经历_第1张图片

两种编译结果:我的环境是CCS,处理器是TM4C

记一次被正点原子坑了的经历_第2张图片

记一次被正点原子坑了的经历_第3张图片

这个太大会造成接收数据时,控制台会打印出“netconn_accept: invalid recvmbox"。明明有数据到来,却无法接收,这个问题在你RAM剩很多不会表现出来,一旦RAM剩的很小,就会出现这个问题。

记一次被正点原子坑了的经历_第4张图片

我看也有人遇到这个问题,附上链接(http://www.openedv.com/forum.php?mod=viewthread&tid=62013&extra=),看样子连正点原子自己都不知道怎么回事,MMP,LZ被这个问题困扰了半个月,年终奖又要少好几千。看来拿来主义真的不好使,以后要慎之。

我说的千真万确,不行自己下原子的代码看,这个配置是不是2000.

你可能感兴趣的:(嵌入式,编程)