songzi2018 发表于 2009-12-7 13:59:50

RT-Thread的几点疑问

测试平台:
LM3S8962,LM3S6950核心板
周立功EasyARM8962开发板

问题:
1.finsh shell按回退键时,没有删除字符,只是回退;
2.hello命令好像不起作用,结果显示:'}', 9341, 0x0000247d,不知道哪里问题?

贴个运行图:
(我已经将文件系统禁止了)
http://cache.amobbs.com/bbs_upload782111/files_23/ourdev_511617.jpg
(原文件名:未命名.jpg)

songzi2018 发表于 2009-12-7 14:00:31

网口还是挺稳定的,其他的还没有测试,不知道是不是配置问题,代码我是SVN checkout最新的

songzi2018 发表于 2009-12-7 14:27:22

看了一下网口中断:
void luminaryif_isr(void)
{
    unsigned long ulTemp;

    //
    // Read and Clear the interrupt.
    //
    ulTemp = EthernetIntStatus(ETH_BASE, false);
    EthernetIntClear(ETH_BASE, ulTemp);

    //
    // Check to see if an RX Interrupt has occured.
    //
    if(ulTemp & ETH_INT_RX)
    {
      //
      // Indicate that a packet has been received.
      //
      rt_err_t result;
      /* a frame has been received */
      result = eth_device_ready((struct eth_device*)&(luminaryif_dev->parent));
      RT_ASSERT(result == RT_EOK);
      //
      // Disable Ethernet RX Interrupt.
      //
      EthernetIntDisable(ETH_BASE, ETH_INT_RX);
    }
    if(ulTemp & ETH_INT_TX)
    {
      /* A frame has been transmitted. */
      rt_sem_release(&tx_sem);
    }
       
}

1. ping测试,time = 1ms,正好是1个tick,是在中断退出后,系统tick切换的;这个感觉可以再快一点;
2. 我在FreeRTOS中移植Lwip,网口中断接收到数据,立即强制上下文切换,结果ping测试基本上都是<1ms的

具体(LPC2378上的中断接收例子)
/*-----------------------------------------------------------*/
void ENET_IRQHandler(void)/*注意:中断已接受FreeRTOS保护,不能再加关键词__irq*/
{
        U32 ulTemp = 0;
        portBASE_TYPE xSwitchRequired = pdFALSE;

        /*读取EMAC中断并清EMAC中断*/
        ulTemp = MAC_INTSTATUS;
        MAC_INTCLEAR = 0xFF;

        /* Was it an Rx interrupt? */
        if( ulTemp & EMAC_INT_RXDONE )
        {
                /*使能在中断中切换到另一个任务*/
                xSwitchRequired = pdTRUE;

          /*Unblock the task by releasing the semaphore.*/
          xSemaphoreGiveFromISR(g_xWEBLwipSem, pdFALSE);

                /*禁止接收数据包*/
                MAC_INTENABLE = 0x0000; /*disable tx interrupt*/
                //EMAC_RxDisable();
        }

        /*interrupt close 通知中断控制器中断结束*/
        VICVectAddr = 0;

        /* Switch to the transmitation task.(中断没有保护,导致切换失败) */
        portEXIT_SWITCHING_ISR(xSwitchRequired);
}

LM3S6950上的网口中断:
/*-----------------------------------------------------------*/
void ENET_IRQHandler(void)
{
        portBASE_TYPE xSwitchRequired = pdFALSE;
        unsigned portLONG ulTemp;

        /* Clear the interrupt. */
        ulTemp = EthernetIntStatus( ETH_BASE, pdFALSE );
        EthernetIntClear( ETH_BASE, ulTemp );
               
        /* Was it an Rx interrupt? */
        if( ulTemp & ETH_INT_RX )
        {
                xSwitchRequired = pdTRUE;
                xSemaphoreGiveFromISR(g_xWEBLwipSem, pdFALSE);
                EthernetIntDisable( ETH_BASE, ETH_INT_RX );
        }
               
    /* Switch to the transmitation task. */
        portEND_SWITCHING_ISR( xSwitchRequired );
}

以上两个都是达到ping测试<1ms;
不知道RTThread能做类似处理吗?

songzi2018 发表于 2009-12-7 14:46:05

shell按backspace没有删除对应位置字符的解决方法之一

在shell.c文件
函数void finsh_thread_entry(void* parameter)中,修改一下:
line:311

                                        /*
                                       * handle backspace key
                                       */
                                        if (ch == 0x7f || ch == 0x08)
                                        {
                                                if (pos != 0)rt_kprintf("%c %c", ch, ch);
                                                line = 0;
                                                if (pos < 0) pos = 0;
                                                continue;
                                        }

ffxz 发表于 2009-12-7 14:49:27

都不是bug

第一个因为feature比较新,所以还没来得及写进文档里。第二个文档是有的

finsh命令即C语言表达式,hello直接做为一个变量处理了,所以打印出来hello函数的地址。正确的方法是hello()

如果有参数,就需要在括号里输入了,在C语言中如何输入在这里就如何输入

第一个问题,aozimo好像说过,因为你用的是超级终端,需要把它的属性设置成tty方式

ffxz 发表于 2009-12-7 14:55:09

ping < 1ms的问题得核实下,另外LM3S的tick是1ms吗?STM32上默认是设置成10ms的。

songzi2018 发表于 2009-12-7 15:09:33

tick是10ms,不好意思,我看错了,1ms是ping返回数据包时间

songzi2018 发表于 2009-12-7 15:16:01

1.是的,看来得好好看文档,不过上面的那种改法,使得shell也支持默认的超级终端的ANSI模式;

songzi2018 发表于 2009-12-7 15:17:44

结贴,好好看文档.
补充一句:文档一起放进SVN就好了,找也方便,改动了马上就有更新,配套好

ffxz 发表于 2009-12-7 15:40:17

【7楼】 songzi2018
        1.是的,看来得好好看文档,不过上面的那种改法,使得shell也支持默认的超级终端的ANSI模式;
------------------
好的,晚上我再对比下,当时在超级终端上也是发现了这个问题,但不知道如何解决。

songzi2018 发表于 2009-12-7 15:55:34

to ffxz:
有没有基于S3C2440的BSP,想在SC32440上搞RT-Thread和RTGUI,对此非常感兴趣;工程基于MDK的或者ADS得都可以,谢谢了

ffxz 发表于 2009-12-7 16:14:46

lz既然用LM3S,还请多帮忙测试,相应的线程切换代码今天早上有过更新,可以多试试它的稳定性。

最近会考虑发布0.3.0的第一个rc版本,面向的主要平台就是stm32和lm3s,当然发布还是分开来的,并会做英文版本的同步发布。

ffxz 发表于 2009-12-7 16:16:35

S3C2440会考虑推出,最近在和一家做2440开发板的厂商谈,如果谈成了,那么2440的BSP & 完整的demo就会水到渠成地推出来。

而面向2440的动态模块加载会在0.4.x版本中出现,这个在官方论坛上已经有些提及了。

songzi2018 发表于 2009-12-7 16:27:39

有问题我会报告的,谢谢回复
页: [1]
查看完整版本: RT-Thread的几点疑问