我想在SAM4E上创建一个简单的Web服务器。
我找到了一个示例,但我想更改网站。现在,这只是纯HTML代码:

if(( NULL != pcRxString)
        && ( !strncmp( pcRxString, "GET", 3 ) ))
        {
            /* Update the hit count. */
            ulPageHits++;
            sprintf( cPageHits, "%d", (int)ulPageHits );

            /* Write out the HTTP OK header. */
            netconn_write( pxNetCon, webHTTP_OK, (u16_t) strlen( webHTTP_OK ), NETCONN_COPY );

            /* Generate the dynamic page... First the page header. */
            strcpy( cDynamicPage, webHTML_START );

            /* ... Then the hit count... */
            strcat( cDynamicPage, cPageHits );
            strcat( cDynamicPage, "<p><pre>Task          State  Priority  Stack #<br>************************************************<br>" );           

            /* ... Then the list of tasks and their status... */
            vTaskList( ( signed portCHAR * ) cDynamicPage + strlen( cDynamicPage ) );

            /* ... Finally the page footer. */
            strcat( cDynamicPage, webHTML_END );

            /* Write out the dynamically generated page. */
            netconn_write( pxNetCon, cDynamicPage, (u16_t) strlen( cDynamicPage ), NETCONN_COPY );
        }


是否可以包含index.html并将其包含在构建中?因此,我不必编写完整的代码,而只需包含一个简单的html文件。

#1 楼

似乎代码是C,因此,如果该代码不是该芯片型号上的限量版,则可能会执行以下操作:

将文件内容混合在一起以在strcat调用中进行编码。丑陋的意思是这段代码每个字符读取文件char。 (归功于[1])

我不确定(在家中或办公室中没有sam4e)如何存储可以通过这种方式访问​​的文件,所以我也有第三个解决方案:

您可以创建自己的html组件(请参阅[2]),并从普通服务器中包含它们,然后将它们与自定义标签一起使用,因此内容丰富,但微控制器上的代码很薄和整洁。

您的想象力为简化组件设置了限制,我制作的一个仪表的示例如下:

100 x 200尺寸的量规,只有那么多的代码。

组件创建是javacript:

int c;
FILE *file;
file = fopen("index.html", "r");
if (file) {
    while ((c = getc(file)) != EOF)
        strcat( cDynamicPage, c);
    fclose(file);
}


,可以在脚本标记中导入。

[1] https://stackoverflow.com/questions/3463426/in-c-how-should-i-read-a-text-file-and-print-all-strings

[2] https://www.html5rocks.com/zh-CN/tutorials/webcomponents/customelements/

评论


诸如fopen()之类的可用性与语言或硬件无关,而与设备上运行的系统软件或自定义组件无关,在此未指定。

–克里斯·斯特拉顿(Chris Stratton)
17年11月13日在21:35



它将在embOS下运行,这是实时操作系统。我拥有的开发套件(SAM4E Xplained Pro)上有2gb的闪存,因此该网站有足够的存储空间。

–迪伦
17年11月14日在1:11

@Dylan-仅仅因为板上有存储空间并不意味着您选择的软件就可以使用它。与其在此处发布问题,不如在审查嵌入式OS的文档和/或在他们的论坛上发布-因为您的问题是与之相关的,而从根本上讲,直到它超出了此类详细信息时,才涉及物联网。

–克里斯·斯特拉顿(Chris Stratton)
17-11-14在2:43



#2 楼

您可以执行类似的操作(提供模板),但是如果该网页要显示在Chrome之类的浏览器上并且可以运行Javascript,那么让函数在那里输出JSON对象(作为字符串)就变得更加简单:
{ "pagehits": 50, "tasks": [ {"task": "t1", "state": "idle", "priority": 1}, {"task": "t2", "state": "running", "priority": 2} ] }
并通过“ / get-data”之类的URL进行访问。使用Javascript来对“ / get-data”进行AJAX调用,获取该JSON,然后根据需要使用Javascript将其呈现为HTML DOM。显示此内容,您只需更改HTML和JS,但是您的“ / get-data”方法/ URL发送相同的数据。您还可以从页面使用它,并为您提供更大的灵活性。就像能够将任务列表与其他类型的数据组合在一起,全部都在一页中,只需要传输少量数据即可。浏览器负责呈现和显示它。

评论


不幸的是,这似乎错过了所要问的关键问题-有效地是MCU如何在不从服务器源代码中的各个引号引起来的字符串中毫不费力地写出数据的情况下,就如何处理数据块,而不是哪种HTML,Javascript,JSON ,或该Blob中包含的任何内容。

–克里斯·斯特拉顿(Chris Stratton)
17年11月15日在20:14