查看: 3409|回复: 2

[MQX] MQX新手报到,求指导

[复制链接]
  • TA的每日心情
    开心
    2019-9-17 17:18
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    26

    主题

    394

    帖子

    0

    高级会员

    Rank: 4

    积分
    967
    最后登录
    2019-10-9
    发表于 2014-3-14 17:23:35 | 显示全部楼层 |阅读模式
    各位好
    小弟因使用TWR-k60d100m进行websever开发而初次接触MQX_4.0。
    在编译库文件之后,调试了MQX自带的web_hvac例程。现在想修改一下网页上面实现内容。
    在CodeWarrior10.5中看到web_sever例程各个文件,一头雾水。
    1. 不知道MQX工程内部文件是如何联系起来的?
    2. 运用MQX是如何进行开发的?
    由于项目吃紧,请各位指导一下,给点思路,分享一下资源。
    谢谢!
    我知道答案 目前已有1人回答
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-9-17 17:18
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    26

    主题

    394

    帖子

    0

    高级会员

    Rank: 4

    积分
    967
    最后登录
    2019-10-9
     楼主| 发表于 2014-3-18 09:21:39 | 显示全部楼层

    回复:MQX新手报到,求指导

    玩MQX的大侠在哪里?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    30

    主题

    61

    帖子

    0

    高级会员

    Rank: 4

    积分
    969
    最后登录
    2025-7-8
    发表于 2014-3-27 18:19:30 | 显示全部楼层

    RE:MQX新手报到,求指导

    MQX的Web-Server可以参考例程$MQX\rtcs\examples\httpsrv和$MQX\demo\web_hvac二个现成的例子。
    MQX提供了转换工具,可以将用户的web_pages目录中的全部网页文件转换为TFS的数组形式(参考tfs_data.c文件,mktfs.bat)。下面以$MQX\rtcs\examples\httpsrv的rtc.html查询为例子,介绍http server的工作过程。
    static const unsigned char tfs_web_pages_favicon_ico[] = {
             /* web_pages/favicon.ico */
                 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x10, 0x00, 0x00,
    ……………….
    }
    const TFS_DIR_ENTRY tfs_data[] = {
    .......
             { "/index.html", 0, (unsigned char*)tfs_web_pages_index_html, sizeof(tfs_web_pages_index_html) },
             { "/ipstat.html", 0, (unsigned char*)tfs_web_pages_ipstat_html, sizeof(tfs_web_pages_ipstat_html) },
    ...........
             { 0, 0, 0, 0 }
    };
    const HTTPD_ROOT_DIR_STRUCT root_dir[] = {
        { "", "tfs:" },
        { 0, 0 }
    };
    void main_task(uint_32 temp) {
    ………………..
        error = _io_tfs_install("tfs:", tfs_data);
        for (i = 0; i < n_devices; i++)
        {
            params = httpd_default_params(NULL);
            params->af = HTTP_INET_AF;  //IPv4+IPv6, set connection family from config.h
            if (params)
            {
                sprintf(indexes, "\\index.html", i);
                params->root_dir = (HTTPD_ROOT_DIR_STRUCT*)root_dir;
                params->index_page = indexes;
                printf("Starting http server No.%d on IP", i);
                 /*
                ** If there is only one interface listen on any IP address
                ** so address can change in runtime (DHCP etc.)
                */
                #if RTCSCFG_ENABLE_IP4
                if ((i == 0) && (n_devices == 1))
                {
                    params->address = INADDR_ANY;
                }
                else
                {
                    params->address = ip_addr;
                }
                /* Print active ip addresses */
                printf(" %d.%d.%d.%d", IPBYTES(ip_addr));
                #endif
                server = httpd_init(params);
            }
            HTTPD_SET_PARAM_CGI_TBL(server, (HTTPD_CGI_LINK_STRUCT*)cgi_lnk_tbl);
    #if HTTPD_SEPARATE_TASK || !HTTPDCFG_POLL_MODE
            printf("...");
            error = httpd_server_run(server);
    }
    1. 在IE浏览器中输入设备的IP地址后,默认请求index.html
    2. MQX返回保存在tfs的index.html网页内容
    3.IE显示index.htm网页,如果用户点击RTC链接,请求rtc.html网页
    查看rtc.html可以发现,这个网页使用了javascript技术,在网页加载时,触发Onload事件,定时1秒发送更新请求
    function loop() {
             if (!data_received)
                             makeRequest("rtcdata.cgi");
             setTimeout("loop()", 1000);
    }
    window.onload=loop;
    javascript 调用cgi请求“rtcdata.cgi”,在web server中的文件cgi.c中定义了cgi请求服务函数cgi_rtc_data
    const HTTPD_CGI_LINK_STRUCT cgi_lnk_tbl[] = {
        { "ipstat",         cgi_ipstat},
        { "icmpstat",       cgi_icmpstat},
        { "udpstat",        cgi_udpstat},
        { "tcpstat",        cgi_tcpstat},
        { "rtcdata",        cgi_rtc_data},
        { 0, 0 }    // DO NOT REMOVE - last item - end of table
    };
    static _mqx_int cgi_rtc_data(HTTPD_SESSION_STRUCT *session) {
        TIME_STRUCT time;
        int min, hour;
       
        _time_get(&time);
       
        min = time.SECONDS / 60;
        hour = min / 60;
        min %= 60;
       
        session->response.contenttype = CONTENT_TYPE_PLAIN;
        httpd_sendhdr(session, 0, 0);
       
        CGI_SEND_NUM(hour);
        CGI_SEND_NUM(min);
        CGI_SEND_NUM(time.SECONDS % 60);
        return session->request.content_len;
    }
    4. IE浏览器javascript代码将上述cgi_rtc_data返回的数据进行进一步解析,并呈现给用户
    function parse_vars(data) {
             var parsed = data.split( "\n" );
             rtc_value[0]                       = parsed[0];
             rtc_value[1]                       = parsed[1];
             rtc_value[2]                       = parsed[2];
             hour.innerHTML               =   ""+rtc_value[0]+"

    ";
             minute.innerHTML          = ""+rtc_value[1]+"

    ";
             second.innerHTML          = ""+rtc_value[2]+"

    ";
    }
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 03:34 , Processed in 0.086927 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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