6831|9

56

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

基于LM3S8962以太网的简单TFTP的服务器学习系列三 [复制链接]

基于LM3S8962以太网的简单TFTP的服务器学习系列三

 

 一、 首先,我们先来看看网页效果图吧,接着再来分析与讲述过程:

 

  

[ 本帖最后由 zhongxueliang 于 2010-11-5 23:37 编辑 ]

TI简介.jpg (132.57 KB, 下载次数: 3)

TI简介.jpg

群星家庭.jpg (192.07 KB, 下载次数: 0)

群星家庭.jpg

模块框架图.jpg (81.82 KB, 下载次数: 0)

模块框架图.jpg

IO控制演示1.jpg (93.68 KB, 下载次数: 0)

IO控制演示1.jpg

IO控制演示2.jpg (112.01 KB, 下载次数: 0)

IO控制演示2.jpg

LM3S8962_TCP_IP.rar

898.29 KB, 下载次数: 230

最新回复

顶一下。。很不错LZ。。能不能给我发一份啊??122825585@qq.com  详情 回复 发表于 2011-12-19 16:12
 
点赞 关注

回复
举报

56

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

二、具体介绍

 

1、这个例程仿照了  enet_io 例程的过程,不过我在这里主要是讲述一下我自己的学习经验,以及如何进行类似的操作:

 

   例程中同样采用了直接给     ulUser0=0x5555aaaa;ulUser1=0x5555aaaa;  赋值的办法

 

   它的赋值规则在  Luminary Micro?Flash Programmer-Build 776 中也有介绍:

  

如果 MAC 地址是:00-1A-B6-00-02-74  话,则  ulUser0=0x00B61A00 ; ulUser1=0x00740200;

 

 

 

 

    例程中:  lwIPInit(pucMACArray, 0xC0A80164, 0xffffff00, 0xC0A80101, IPADDR_USE_STATIC);

   这条语句是设置 MAC 地址、子网掩码的、网关地址。其中网关地址  可设置为 0 也不会影响正常的网络通讯。关于电脑的本地连接上的设置,大家可以参考前面我写的《基于LM3S8962以太网的简单TFTP的服务器学习系列一》PDF 文档

 

 

 

 

2、这里我具体分析一下 lmi_fs.c 这个C文件:

struct fs_file *

fs_open(char *name)

{

    char *data;

    int i;

    const struct fsdata_file *ptTree;

struct fs_file *ptFile = NULL;

/*分派内存给文件系统                                         */

    ptFile = mem_malloc(sizeof(struct fs_file));

    if(NULL == ptFile)

    {

        return(NULL);

    }

/* 19代表字符串长度*/

 

   if(strncmp(name, "/cgi-bin/toggle_led", 19) == 0)

    {

        io_set_led(!io_is_led_on());

ptFile->data = NULL;

        ptFile->len = 0;

        ptFile->index = 0;

        ptFile->pextension = NULL;

return(ptFile);

    }

 

// 处理PWM ON/OFF状态的请求

if(strncmp(name, "/cgi-bin/pwm_onoff", 18) == 0)

    {

io_set_pwm(!io_is_pwm_on());

ptFile->data = NULL;

        ptFile->len = 0;

        ptFile->index = 0;

        ptFile->pextension = NULL;

return(ptFile);

    }
 
 

回复

56

帖子

0

TA的资源

一粒金砂(高级)

板凳
 

回复 沙发 zhongxueliang 的帖子

// 处理PWM 频率更新
if(strncmp(name, "/pwm_freq?value=", 16) == 0)
    {
         // Get Frequency String
         data = name;
        data += 16;
        i = 0;
        do
        {
            switch(data)
            {
                case 0:
                case '&':
                    g_cSampleTextBuffer = 0;
                    break;
                case '+':
                    g_cSampleTextBuffer = ' ';
                    break;
                default:
                    g_cSampleTextBuffer = data;
                    break;
            }
            if(g_cSampleTextBuffer == 0)
            {
                break;
            }
            i++;
        }while(i < sizeof(g_cSampleTextBuffer));
// 设置PWM频率
         io_pwm_freq(ustrtoul(g_cSampleTextBuffer,NULL,10));
// Setup the file structure to return whatever.
        ptFile->data = NULL;
        ptFile->len = 0;
        ptFile->index = 0;
        ptFile->pextension = NULL;
// 返回系统文件指针。
         return(ptFile);
    }
// 处理PWM占空比的更新
     if(strncmp(name, "/pwm_dutycycle?value=", 21) == 0)
    {
       // 得到占空比字符串
        data = name;
        data += 21;
        i = 0;
        do
        {
            switch(data)
            {
                case 0:
                case '&':
                    g_cSampleTextBuffer = 0;
                    break;
                case '+':
                    g_cSampleTextBuffer = ' ';
                    break;
                default:
                    g_cSampleTextBuffer = data;
                    break;
            }
            if(g_cSampleTextBuffer == 0)
            {
                break;
            }
            i++;
        }while(i < sizeof(g_cSampleTextBuffer));
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(高级)

4
 

回复 板凳 zhongxueliang 的帖子

// 设置PWM的占空比
         io_pwm_dutycycle(ustrtoul(g_cSampleTextBuffer,NULL,10));
// Setup the file structure to return whatever.
         ptFile->data = NULL;
        ptFile->len = 0;
        ptFile->index = 0;
        ptFile->pextension = NULL;
// 返回系统指针.
         return(ptFile);
    }
//检查LED的开关状态?
     if(strncmp(name, "/ledstate?id", 12) == 0)
    {
        static char pcBuf[4];
//获取LED的状态
        io_get_ledstate(pcBuf, 4);
ptFile->data = pcBuf;
        ptFile->len = strlen(pcBuf);
        ptFile->index = ptFile->len;
        ptFile->pextension = NULL;
        return(ptFile);
    }
// 检查PWM的频率状态?
     if(strncmp(name, "/pwmstate?id", 12) == 0)
    {
        static char pcBuf[4];

    // 获得PWM的状态
        io_get_pwmstate(pcBuf, 4);
ptFile->data = pcBuf;
        ptFile->len = strlen(pcBuf);
        ptFile->index = ptFile->len;
        ptFile->pextension = NULL;
        return(ptFile);
    }
// Request PWM Frequency?
     if(strncmp(name, "/pwmfreqget?id", 14) == 0)
    {
        static char pcBuf[16];
// Get the frequency of the PWM
        usprintf(pcBuf,"%d",io_get_pwmfreq());
ptFile->data = pcBuf;
        ptFile->len = strlen(pcBuf);
        ptFile->index = ptFile->len;
        ptFile->pextension = NULL;
        return(ptFile);
    }
// 检查PWM的占空比?
     if(strncmp(name, "/pwmdutycycleget?id", 19) == 0)
    {
        static char pcBuf[16];
// 获得PWM的占空比
        usprintf(pcBuf,"%d",io_get_pwmdutycycle());
ptFile->data = pcBuf;
        ptFile->len = strlen(pcBuf);
        ptFile->index = ptFile->len;
        ptFile->pextension = NULL;
        return(ptFile);
    }
else
    {
  /*00        把全部网页名称 都 赋值给  ptTree 变量 ,以便下面的   名称 比较*/                                                    ptTree = FS_ROOT;
/*          检查  网页名称 不为 NULL  */                                                                                                                                         while(NULL != ptTree)
        {
/*01         当输入的  NAME  变量不是上面的任何一个情况时,则为一个网页名称.
//   于是就和 网页名称 数组 进行全部比较,如果是其中一个网页名称则进入如下程序*/
if(strncmp(name, (char *)ptTree->name, ptTree->len) == 0)
            {
               ptFile->data = (char *)ptTree->data;
                ptFile->len = ptTree->len;
                ptFile->index = ptTree->len;
ptFile->pextension = NULL;
// 退出循环,返回系统文件.
/* 02 执行完上面的程序后说明  NAME 的相关操作已经得到 数据处理          直接退出即可                */
                break;
}
/*01 否则就将下一个网页名称赋值给ptTree回到上面的while(NULL != ptTree) 进行比较是否相同*/
           ptTree = ptTree->next;
/*03     其中 next 就为网页 的  名称 指针,用 NEXT 来代替 名称 方便 编程             */
        }
    }
/*        检查   通过 处理后(也有可能没有得到数据,也就没有进入过循环)  的数据 是否为空        */         if(NULL == ptTree)
    {
        mem_free(ptFile);
        ptFile = NULL;
    }
/*                返回得到 数据 或 为 空的   ptFile 变量*/                                                                                                                                           return(ptFile);
}
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(高级)

5
 

回复 4楼 zhongxueliang 的帖子

我在这里要说明的是,前面的LED处理与PWM处理程序 只是改变了相关变量使 相关引脚反复切换状来控制LED的开/关,或者是改变切换的频率及占空比来控制PWM(即 蜂鸣器的驱动频率及占空比),这样可以改变 蜂鸣器的声音。
重点介绍的是红色部分程序:FS_ROOT 是一个 所有网页与图片数据 名称的结构体变量。
程序中 name 为要找的一个网页或者图片的 名称,然后程序中对 结构体变量中的所有的相关名称进行一一对比,如果name与相关名称相同,则把 FS_ROOT 结构体中的 子结构体变量的数据 赋值 给 ptFile 结构体变量。这样就达到了以名称name来寻找相关网页与图片数据的目的。

const struct fsdata_file file_block_htm[] =
{
{    file_family_htm,
                data_block_htm,
                data_block_htm + 11,
                sizeof(data_block_htm) - 11
}};
const struct fsdata_file file_404_htm[] =
{
{    file_block_htm,
                data_404_htm,
                data_404_htm + 9,
                sizeof(data_404_htm) - 9
        }};
    大家从上面的结构体中看出了什么?我们会发现这是一个嵌套的结构体,这样的目的也许是方便我们寻找相关文件及其相关数据。


   系列三 就暂时讲述到这里了,如果上面表达不清楚或描述欠妥的地方请大家谅解,并回贴提出建议及改过方案。谢谢大家!
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(高级)

6
 

回复 5楼 zhongxueliang 的帖子

C:\StellarisWare\boards\ek-lm3s8962

当然要在库路径下才能找到文件哦,我是放在C盘
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(高级)

7
 

回复 6楼 zhongxueliang 的帖子

自己顶一下,哈哈
 
 
 

回复

918

帖子

0

TA的资源

纯净的硅(中级)

8
 

回复 7楼 zhongxueliang 的帖子

楼主写的不错,可是没看到有TFTP的内容啊?
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 7楼 zhongxueliang 的帖子

网页设置在那里?
您能把图片里的网页给我看看么,就是那些.html文件
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(中级)

10
 
顶一下。。很不错LZ。。能不能给我发一份啊??122825585@qq.com
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表