RT-Thread的几点疑问
测试平台:LM3S8962,LM3S6950核心板
周立功EasyARM8962开发板
问题:
1.finsh shell按回退键时,没有删除字符,只是回退;
2.hello命令好像不起作用,结果显示:'}', 9341, 0x0000247d,不知道哪里问题?
贴个运行图:
(我已经将文件系统禁止了)
http://cache.amobbs.com/bbs_upload782111/files_23/ourdev_511617.jpg
(原文件名:未命名.jpg) 网口还是挺稳定的,其他的还没有测试,不知道是不是配置问题,代码我是SVN checkout最新的 看了一下网口中断:
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能做类似处理吗? 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;
} 都不是bug
第一个因为feature比较新,所以还没来得及写进文档里。第二个文档是有的
finsh命令即C语言表达式,hello直接做为一个变量处理了,所以打印出来hello函数的地址。正确的方法是hello()
如果有参数,就需要在括号里输入了,在C语言中如何输入在这里就如何输入
第一个问题,aozimo好像说过,因为你用的是超级终端,需要把它的属性设置成tty方式 ping < 1ms的问题得核实下,另外LM3S的tick是1ms吗?STM32上默认是设置成10ms的。 tick是10ms,不好意思,我看错了,1ms是ping返回数据包时间 1.是的,看来得好好看文档,不过上面的那种改法,使得shell也支持默认的超级终端的ANSI模式; 结贴,好好看文档.
补充一句:文档一起放进SVN就好了,找也方便,改动了马上就有更新,配套好 【7楼】 songzi2018
1.是的,看来得好好看文档,不过上面的那种改法,使得shell也支持默认的超级终端的ANSI模式;
------------------
好的,晚上我再对比下,当时在超级终端上也是发现了这个问题,但不知道如何解决。 to ffxz:
有没有基于S3C2440的BSP,想在SC32440上搞RT-Thread和RTGUI,对此非常感兴趣;工程基于MDK的或者ADS得都可以,谢谢了 lz既然用LM3S,还请多帮忙测试,相应的线程切换代码今天早上有过更新,可以多试试它的稳定性。
最近会考虑发布0.3.0的第一个rc版本,面向的主要平台就是stm32和lm3s,当然发布还是分开来的,并会做英文版本的同步发布。 S3C2440会考虑推出,最近在和一家做2440开发板的厂商谈,如果谈成了,那么2440的BSP & 完整的demo就会水到渠成地推出来。
而面向2440的动态模块加载会在0.4.x版本中出现,这个在官方论坛上已经有些提及了。 有问题我会报告的,谢谢回复
页:
[1]