3525|18

337

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

Enet_io的Demo1例程中,当点击Toggle LED时,可以轮流显示ON与OFF,为什么此处最多... [复制链接]

请问大家Enet_io的Demo1例程中,当点击Toggle LED时,可以轮流显示ON与OFF,为什么此处最多只能够显示3个字符呢?这个限制是在什么地方设置的?

1.jpg (4.04 KB, 下载次数: 1)

1.jpg

最新回复

应该是先定义了两个变量和一个函数ledcomplete,然后后面才是顺序执行的代码。也就是定义函数处并不执行该函数,C语言也一样的。  详情 回复 发表于 2014-5-22 23:24
 
点赞 关注

回复
举报

337

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
自己已经看明白了,不过有个问题始终还没有明白,就是ON或者OFF的变化是在什么地方写进网页的。有知道的大虾没有?
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 
这个地方,确实是限制了,可以看看具体的代码里边的 SSI Tag 部分。
 
 
 

回复

337

帖子

0

TA的资源

纯净的硅(初级)

4
 
字符限制的问题自己明白了。 就是ON或者OFF的变化是在什么地方写进网页的。改变后应该还是以文本方式发出去的吧,对于io_http.html这个网页文件来说,到底是在什么地方呢?刚开始学习这些,望懂的大虾指点。

点评

在 lmi_fs.c 第 242 行, io_get_ledstate(pcBuf, 4); 这应该是 Javascript 请求方式返回 LED 状态。 还有 在 enet_io.c 372 行,因该是 SSI tag 方式的。  详情 回复 发表于 2014-4-17 22:51
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

5
 
ZHANGXUEJIE 发表于 2014-4-17 14:10
字符限制的问题自己明白了。 就是ON或者OFF的变化是在什么地方写进网页的。改变后应该还是以文本方式发出去 ...

在 lmi_fs.c 第 242 行, io_get_ledstate(pcBuf, 4); 这应该是 Javascript 请求方式返回 LED 状态。
还有 在 enet_io.c 372 行,因该是 SSI tag 方式的。

 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(中级)

6
 
现研究了一下,IO control demo 2 是用SSI来嵌入变量文本的,相信你已经看清这个了
IO control demo 1 更高级一些,发XML请求,可以局部更新网页内容。我理解大致是这样:
1 浏览器发出请求 - 调用 function ledstateGet(),每次加载网页或改变led状态都会调用
2 请求是这样的   led.open("GET", "/ledstate?id=" + Math.random(), true);
3 嵌入服务器接到请求后调用 fs_open(char *name) 来处理 (lmi_fs.c)
4 fs_open 比较请求的内容作相应处理,这里返回了led状态字符串
    else if(strncmp(name, "/ledstate?id", 12) == 0)
    {
        static char pcBuf[4];

        //
        // Get the state of the LED
        //
        io_get_ledstate(pcBuf, 4);

        ptFile->data = pcBuf;
        ptFile->len = strlen(pcBuf);
        ptFile->index = ptFile->len;
        ptFile->pextension = NULL;
        return(ptFile);
    }
5 收到回复后javascript负责把内容更新到指定位置
    function ledComplete()
    {
        if(led.readyState == 4)
        {
            if(led.status == 200)
            {
                document.getElementById("ledstate").innerHTML = "
" + led.responseText + "
";
            }
        }
    }
我也在学,一起研究
 
 
 

回复

337

帖子

0

TA的资源

纯净的硅(初级)

7
 
谢谢大家了,不过感觉还又个疑惑,就是当我们在网页上点击"Toggle LED"时,应该是执行网页文件中的toggle_led()函数吧?代码如下:
function ledComplete()
{
if(led.readyState == 4)
{
if(led.status == 200)
{
document.getElementById("ledstate").innerHTML = "
" + led.responseText + "
";
}
}
}
if(window.XMLHttpRequest)
{
req = new XMLHttpRequest();
led = new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
req = new ActiveXObject("Microsoft.XMLHTTP");
led = new ActiveXObject("Microsoft.XMLHTTP");
}
if(req)
{
req.open("GET", "/cgi-bin/toggle_led?id" + Math.random(), true);
req.send(null);
}
if(led)
{
led.open("GET", "/ledstate?id=" + Math.random(), true);
led.onreadystatechange = ledComplete;
led.send(null);
}
从上面代码顺序看,函数一开始就执行:document.getElementById("ledstate").innerHTML = "
" + led.responseText + "
";
把改变了的状态写入指定位置,可是这个时候下面服务器应该还没有返回数据吧?请问大虾们这个问题应该怎么理解呢?
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(中级)

8
 
不是的,function ledComplete() 只是定义了这个函数,并没有执行,调用发生在下面led.onreadystatechange = ledComplete; 当led 的ready state change 时调用 ledComplete()函数
不过我发现点toggle led 时led 状态显示是有问题,好像有点bug

点评

我也发现点toggle led 时led 状态显示是有点问题,就是点toggle led 时,ON与OFF有时不变化。这个现象是由应用层引起的呢还是协议栈本身有问题?  详情 回复 发表于 2014-4-28 10:10
 
 
 

回复

337

帖子

0

TA的资源

纯净的硅(初级)

9
 
这段完整代码是这样:
function toggle_led()
{
var req = false;
var led = false;
function ledComplete()
{
if(led.readyState == 4)
{
if(led.status == 200)
{
document.getElementById("ledstate").innerHTML = "
" + led.responseText + "
";
}
}
}
if(window.XMLHttpRequest)
{
req = new XMLHttpRequest();
led = new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
req = new ActiveXObject("Microsoft.XMLHTTP");
led = new ActiveXObject("Microsoft.XMLHTTP");
}
if(req)
{
req.open("GET", "/cgi-bin/toggle_led?id" + Math.random(), true);
req.send(null);
}
if(led)
{
led.open("GET", "/ledstate?id=" + Math.random(), true);
led.onreadystatechange = ledComplete;
led.send(null);
}
}

是从toggle_led()函数开始的,里面又定义了function ledComplete()函数。怎么也没有看明白啊 ?

点评

看了下有关介绍javascript函数方面的东西,也没有明白上面的意思,有知道的是否能讲讲呢?  详情 回复 发表于 2014-5-8 13:54
 
 
 

回复

337

帖子

0

TA的资源

纯净的硅(初级)

10
 
斑竹,知道否?
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

11
 
这是 Javascript 的代码。不能用完全用 C 语言的方式去理解。
肯定是服务器回应了 HTTP request 请求后,才开始l调用ledComplete在网页显示状态的。

点评

好的,谢谢!回头再看看有关 Javascript 方面的东西  详情 回复 发表于 2014-4-28 10:03
 
 
 

回复

337

帖子

0

TA的资源

纯净的硅(初级)

12
 
Study_Stellaris 发表于 2014-4-27 16:48
这是 Javascript 的代码。不能用完全用 C 语言的方式去理解。
肯定是服务器回应了 HTTP request 请求后, ...

好的,谢谢!回头再看看有关 Javascript 方面的东西
 
 
 

回复

337

帖子

0

TA的资源

纯净的硅(初级)

13
 
mangoal 发表于 2014-4-22 22:14
不是的,function ledComplete() 只是定义了这个函数,并没有执行,调用发生在下面led.onreadystatechange  ...

我也发现点toggle led 时led 状态显示是有点问题,就是点toggle led 时,ON与OFF有时不变化。这个现象是由应用层引起的呢还是协议栈本身有问题?
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(中级)

14
 
可能是因为toggleled 和ledstate 两个请求连续发,web服务器或网络原因丢了第二个?
我也对javascript 不熟,不然可以让toggleled返回led 状态或让ledstate请求延时一段再发来试试

点评

谢谢你提出的思路。  详情 回复 发表于 2014-5-4 13:39
 
 
 

回复

337

帖子

0

TA的资源

纯净的硅(初级)

15
 
mangoal 发表于 2014-4-29 22:21
可能是因为toggleled 和ledstate 两个请求连续发,web服务器或网络原因丢了第二个?
我也对javascript 不 ...

谢谢你提出的思路。
 
 
 

回复

337

帖子

0

TA的资源

纯净的硅(初级)

16
 
ZHANGXUEJIE 发表于 2014-4-23 16:39
这段完整代码是这样:
function toggle_led()
{

看了下有关介绍javascript函数方面的东西,也没有明白上面的意思,有知道的是否能讲讲呢?

点评

也许你可以装一个 wireshark 来抓包分析分析,这会加深你的理解。  详情 回复 发表于 2014-5-16 10:07
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

17
 
ZHANGXUEJIE 发表于 2014-5-8 13:54
看了下有关介绍javascript函数方面的东西,也没有明白上面的意思,有知道的是否能讲讲呢?

也许你可以装一个 wireshark 来抓包分析分析,这会加深你的理解。

点评

我很想从语法上知道那段javascript代码,  详情 回复 发表于 2014-5-19 16:47
 
 
 

回复

337

帖子

0

TA的资源

纯净的硅(初级)

18
 
Study_Stellaris 发表于 2014-5-16 10:07
也许你可以装一个 wireshark 来抓包分析分析,这会加深你的理解。

我很想从语法上知道那段javascript代码,
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(中级)

19
 
应该是先定义了两个变量和一个函数ledcomplete,然后后面才是顺序执行的代码。也就是定义函数处并不执行该函数,C语言也一样的。
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表