|
最近在用1768做一个功能,1768与服务器能够进行数据交互,同时能够差U盘在开发板上进行数据读取。用到TCP和USB两个功能。作为两个大任务放在UCOS-II下运行。
在调试的过程遇到一些问题,叙述一下:
首先,我先单独测试TCP功能,单片机作为服务器端,电脑的调试软件作为客户端,能连接上,收发数据正常。见 图-1
然后单独测试USB的功能,也可以。
然后我把USB的功能移植到TCP工程里面,编译出错. \Out\ReleaseInFlash\LPC1700.axf: Error: L6406E: No space in execution regions with .ANY selector matching ip.o(.data).
\Out\ReleaseInFlash\LPC1700.axf: Error: L6406E: No space in execution regions with .ANY selector matching tcp.o(.data).
应该是说程序太大,RAM放不下了,然后百度了一下解决方法,把KEIL里面的Targe Option的 IRAM2前面打上勾 图-2,OK,编译通过。烧程序,运行,然后停住了,程序不走了。
我琢磨着是不是TCP和USB两个任务之间有冲突。我就创建了一个简单的任务,流水灯。我测试TCP和流水灯两个任务的运行情况(把和USB有关的代码都屏蔽了),也不能运行,灯走了几步就停了,TCP也连不上。然后我想到
这两个任务的代码没有那么大,32K的本地RAM应该可以放下,然后把IRAM2前面的勾去掉了,确实是的,编译通过,下载运行。竟然可以了,流水灯一直运行,TCP也连上了,收发数据正常。然后我回去又把IRAM2前面的勾打上,
下载运行,奇了怪了,灯走了几步就停了,TCP也连不上。同样的代码,什么都没改,仅仅在IRAM2前打了个勾,运行结果就差这么大。我就想,原先的USB和TCP一起的工程是不是也是因为这个呢?但是想不到解决的办法,程序核心发部分没法优化,只能把堆栈数组改小些,但是还是太大,不勾IRAM2编译不通过。所以上论坛和想和大家讨论交流一下,不知道你们有没有遇到这种情况,有什么解决的方法呢?
|
|