搜索
bottom↓
回复: 13

RT-Thread的几点疑问

[复制链接]

出0入0汤圆

发表于 2009-12-7 13:59:50 | 显示全部楼层 |阅读模式
测试平台:
LM3S8962,LM3S6950核心板
周立功EasyARM8962开发板

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

贴个运行图:
(我已经将文件系统禁止了)

(原文件名:未命名.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2009-12-7 14:00:31 | 显示全部楼层
网口还是挺稳定的,其他的还没有测试,不知道是不是配置问题,代码我是SVN checkout最新的

出0入0汤圆

 楼主| 发表于 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能做类似处理吗?

出0入0汤圆

 楼主| 发表于 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[pos--] = 0;
                                                if (pos < 0) pos = 0;
                                                continue;
                                        }

出0入0汤圆

发表于 2009-12-7 14:49:27 | 显示全部楼层
都不是bug

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

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

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

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

出0入0汤圆

发表于 2009-12-7 14:55:09 | 显示全部楼层
ping < 1ms的问题得核实下,另外LM3S的tick是1ms吗?STM32上默认是设置成10ms的。

出0入0汤圆

 楼主| 发表于 2009-12-7 15:09:33 | 显示全部楼层
tick是10ms,不好意思,我看错了,1ms是ping返回数据包时间

出0入0汤圆

 楼主| 发表于 2009-12-7 15:16:01 | 显示全部楼层
1.是的,看来得好好看文档,不过上面的那种改法,使得shell也支持默认的超级终端的ANSI模式;

出0入0汤圆

 楼主| 发表于 2009-12-7 15:17:44 | 显示全部楼层
结贴,好好看文档.
补充一句:文档一起放进SVN就好了,找也方便,改动了马上就有更新,配套好

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2009-12-7 15:55:34 | 显示全部楼层
to ffxz:
有没有基于S3C2440的BSP,想在SC32440上搞RT-Thread和RTGUI,对此非常感兴趣;工程基于MDK的或者ADS得都可以,谢谢了

出0入0汤圆

发表于 2009-12-7 16:14:46 | 显示全部楼层
lz既然用LM3S,还请多帮忙测试,相应的线程切换代码今天早上有过更新,可以多试试它的稳定性。

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

出0入0汤圆

发表于 2009-12-7 16:16:35 | 显示全部楼层
S3C2440会考虑推出,最近在和一家做2440开发板的厂商谈,如果谈成了,那么2440的BSP & 完整的demo就会水到渠成地推出来。

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

出0入0汤圆

 楼主| 发表于 2009-12-7 16:27:39 | 显示全部楼层
有问题我会报告的,谢谢回复
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 16:42

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表