今天终于把LwIP成功移植到uC/OS-ii下了……

    经过了n天终于把LwIP这个程序包在uC/OS-ii下成功移植,今天看着程序的运行,静静的看着屏幕打出来的调试信息,我的心情是那么的激动。好几天的辛勤汗水,今天终于看到了它的结果了。
    上午的时候程序还不能建立LCP连接,每次总是拒绝PAP的参数,也就是03 04 c0 23这个参数,不知道是为什么,我的程序就是不接受这个参数,每次建立连接后和ISP协商总是出现这样的问题,直到ISP挂线为止,程序就不跑了。后来才发现原来是有一个宏定义的问题。在AXD编译器中不支持(s)<<8这个语句,只需要把这个语句修改一下就over了,就是这个小小的问题忙乎了一个上午,才发现原来是这样把我耍了。
    还以为这样就行了呢。结果下午再次跑程序的时候,问题又出现了,LCP连接已经建立了。PAP验证也过了,但是到了IPCP的过程中,程序总是把接收到的参数丢弃掉。后来把这个过程的调试信息一一的打了出来,才发现原来是FCS效验错误,我也忘记我修改了哪里就好了,程序就跑起来了,也获得了IP地址。嘿嘿……我以为这样就行了,ping一下就能通了,事情总是不能让人顺心,整个程序我一共建立了3个任务,最起码应该给我跑一个吧,结果她一个都不跑。一个都不运行,真是气晕晕我了。他怎么就不能顺利点呢,看着已经获得IP地址,ping一下电脑这里没有反应,而在我的modem接收灯再闪,每ping 一下它就闪一下,这就让我看到了希望了。说明程序已经进入了IP层了。只是我的程序没有响应ICMP数据包而已。看到了这点就象是在沙漠中看到了水一样有了希望。。。。。。我还是要仔细分析每一个任务,为什么就不都顺利跑起来呢?
    哈哈……经过了一个小时的研究才发现,原来uC/OS-ii根本就没有执行OSStart();这个函数。
原来我在调用pppOpen这个函数的时候,传的参数是pppOpen(NULL,NULL,NULL);导致

 if(!linkStatusCB) {
  while(pd >= 0 && !pc->if_up) {
   sys_msleep(500);
   if (lcp_phase[pd] == PHASE_DEAD) {
    pppClose(pd);
    if (pc->errCode)
     pd = pc->errCode;
    else
     pd = PPPERR_CONNECT;
   }
  }
 }
该函数不能正常退出,所以就不能执行OSStart()这个函数了。哈哈6程序当然不能跑了,经过分析发现暂时先把这几句话删除掉,发现一个惊喜的秘密,那就是程序的所有任务都能跑起来了。而且ping的时候也有反应了,也回应PC机。看到这里的时候我发现,做我们这行的最开心的事情莫过于此啦……
   看着调试信息,从MODEM拨号->PPP建立LCP连接->经过PAP验证->IPCP的协商->终于看到连接到internet上,然后在ping一下,也能ping通,心里那才叫做高兴呢。哈哈哈哈……

以下就是调试信息的输出结果:

今天终于把LwIP成功移植到uC/OS-ii下了……_第1张图片

你可能感兴趣的:(今天终于把LwIP成功移植到uC/OS-ii下了……)