野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 37039|回复: 6

飞鸟内核基于野火stm32 lwip实验

[复制链接]
发表于 2013-5-3 15:48:58 | 显示全部楼层 |阅读模式
本帖最后由 飞鸟 于 2013-5-4 14:36 编辑

    若不能ping通,可能是路由的限制:
          可尝试把M3与PC直接用网线相连, 再 ping 192.168.1.18  ,

和链接路由器方式相比,网线有区别吗?普通网线就行?
回复

使用道具 举报

发表于 2013-5-3 16:01:54 | 显示全部楼层
比如有的路由设置了掩码之类的,M3的IP可能会受到限制。用普通网线连接就行~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-3 16:11:07 | 显示全部楼层
明天我要移植野火的eth代码到飞鸟上,搞个大例子。 支持一下啊。
回复 支持 反对

使用道具 举报

发表于 2013-5-3 21:05:54 | 显示全部楼层
飞鸟 发表于 2013-5-3 16:11
明天我要移植野火的eth代码到飞鸟上,搞个大例子。 支持一下啊。

沙发
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-4 12:06:39 | 显示全部楼层
本帖最后由 飞鸟 于 2013-5-4 13:05 编辑

初步成功。tcp线程单独处理lwip事务。在os上跑tcp线程和原版裸跑tcp速度相比基本没区别。板子和笔记本对联,大概142KB/s。
不过理论上,轮询方式下,如果线程多了,tcp线程性能应该不是很好。官方有中断方式的代码吗?
flynet.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-7 08:58:12 | 显示全部楼层
本帖最后由 飞鸟 于 2013-5-7 08:59 编辑

尝试中断方式,代码这样写的

int EVB_WF3_NetCheck(void)
{
    int value = 0;

    if (EXTI_GetITStatus(EXTI_Line13) != RESET)
    {
        EXTI_ClearITPendingBit(EXTI_Line13);
        value = 1;
    }

    return value;
}

static void EVB_NET_ISR(TVector vector)
{
    EVB_WF3_NetCheck();
    //if (enc28j60PacketRxDone()==1)
    {
        TclIsrReleaseSemaphore(&NetSemaphore);
    }   
}
void EVB_ENT_INT_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    /* config the extiline(PE5) clock and AFIO clock */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

    /* config P[A|B|C|D|E]13 */
    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    /* EXTI line gpio config(PB13) */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_Init(GPIOB, &GPIO_InitStructure);  

    /* EXTI line(PB13) mode config */
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource13);
    EXTI_InitStructure.EXTI_Line = EXTI_Line13;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);
}

实验是成功的。版主帮确认一下这样行不行?
Pb13的每次中断都会通过信号量唤醒lwip任务,然后去调用lwip的周期处理函数(里面去掉了while(1))。上面的代码能保证都是网卡的中断吗?
担心pb13的外中断,不一定都是网口的中断。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-7 13:26:15 | 显示全部楼层
file:///C:\DOCUME~1\LIUXUM~1\LOCALS~1\Temp\0C}X5`C2]]H5JZU1`Z}~~GK.jpg做了个PC上位机软件,通过网络来控制板子LED的开启和熄灭。
0C}X5`C2]]H5JZU1`Z}~~GK.jpg
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-19 07:36 , Processed in 0.034004 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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