麻烦各位专家高手给点调试意见,现象如下:
使用的是C6678芯片,自己新建了一个TCP client数据发送的简单工程,采用非阻塞模式。在线仿真调试能正常连接服务器并发送数据。现在我们打算通过EMIF NOR FLASH引导启动上述工程,发现以下现象:
1 自己写了一个bootloader的小工程,映射在0x70000000位置,负责将TCP client工程进行引导搬运;而 TCP client工程的数据存放在0x70200000位置;
2 为了验证bootloader是否功能正常,我们首先将TCP client工程烧写到nor Flash的0x70200000位置,然后将bootloader工程cmd映射修改为 共享内存0x0C000000,并用仿真器在线调试,走完全部bootloader过程,程序跳转到TCP client工程的起始运行地址后,能正常连接服务器并发送 数据。
4 最后,将bootloader工程烧写到0x70000000位置,上电启动后服务端一直没有接收到数据,这时用仿真器load symbol后,观察到TCP client工程引导已经完成,客户端程序在执行connect函数时一直返回的是EHOSTDOWN,感到比较疑惑是什么导致connect返回EHOSTDOWN?
另外,上述TCP client工程通过SPI模式引导是能成功运行的。
Allen35065:
因为你的Bootloader放在SL2和EMIF地址执行的结果不一致,怀疑你的TCP client和bootloader在内存段的分配上有重叠,先查一查两者的map文件看是否有可疑的地方。
另一种可能性是Bootloader代码里有越界,放在SL2里执行时越界不会影响EMIF的数据。
countryhotel:
回复 Allen35065:
感谢答复,查看了两个工程的map文件如下,没有存储区间重叠问题,而且异常情况时变现为connect返回EHOSTDOWN,程序并没有跑飞。
TCP工程map:
OUTPUT FILE NAME: <tcp.out>ENTRY POINT SYMBOL: "_c_int00" address: 8036d5c0MEMORY CONFIGURATION name origin length used unused attr fill———————- ——– ——— ——– ——– —- ——– MSMCSRAM 0c000000 00400000 00000000 00400000 RW X L2SRAM 10804000 0007c000 0005fb6e 0001c492 RW X DDR3 80000000 10000000 003a16d4 0fc5e92c RW X
boot工程map:
OUTPUT FILE NAME: <jl_c0_bootloader.out>ENTRY POINT SYMBOL: "_c_int00" address: 70000000MEMORY CONFIGURATION name origin length used unused attr fill———————- ——– ——— ——– ——– —- ——–X VECTORS 10800000 00000200 00000000 00000200 RWIX L2 10800200 0007fe00 00002074 0007dd8c RWIX BOOT 70000000 00000100 00000080 00000080 RWIX ROM 70000100 01ffff00 00013898 01fec668 RWIX