저는 FreeRTOS를 사용하여 새로운 임베디드 시스템 디자인을 시작하고 있습니다. 마지막으로 eCos를 사용했는데, HTTP 서버가 내장되어 있습니다. 특히 파일 시스템이 없기 때문에 실제로 가볍습니다. 간단히 말해서 모든 페이지는 HTTP 데몬이 필요할 때 호출되는 CGI와 유사한 C 함수였습니다. 특히,이 형태의 함수 작성합니다 URL의 페이지 부분이었다 page
스레드의 C 또는 C++ HTTP 데몬?
int MyWebPage(FILE* resp, const char* page, const char* params, void* uData);
이 params
는 어떤 형태의 매개 변수였다을 (단지 지원 GET, 파일 업로드를 방지하고, 따라서 연소를하게하는 게시하지 플래시가 아프다), uData
은 함수를 등록 할 때 전달 된 토큰이며, 동일한 기능을 여러 데이터 나 다른 범위의 URL로 제공 할 수 있습니다. resp
은 HTTP 응답을 작성하는 파일 핸들입니다 헤더와 모두) 밖으로.
그런 다음 당신이 기능 등록 : CYG_HTTPD_TABLE_ENTRY
는 첫 번째 매개 변수는 변수 이름이었다 매크로입니다
CYG_HTTPD_TABLE_ENTRY(www_myPage, "/", MyWebPage, 0);
가, 두 번째는 페이지의 URL을했다합니다 (*
와일드 카드가 허용되고, 따라서 page
를 전달하기 MyWebPage()
), 세 번째는 함수 포인터이고 last는 uData
값입니다.
그래서 간단한 예 :
int HelloWorldPage(FILE* resp, const char*, const char* params, void*)
{
fprintf("Content-Type: text/html;\n\n");
fprintf("<html><head><title>Hello World!</title></head>\n");
fprintf("<body>\n");
fprintf("<h1>Hello, World!</h1>\n");
fprintf("<p>You passed in: %s</p>\n", params);
fprintf("</body></html>\n");
}
CYG_HTTPD_TABLE_ENTRY(www_hello, "/", HelloWorldPage, 0);
(사실,
params
는 HTML 마법 문자를 이스케이프하는 함수를 통해 전달 될 것입니다, 나는 밖으로
<ul>
을 PARAMS을 분할하는 또 다른 커플 기능을 사용 할 것).
서버 자체가 단지 작업 (즉 스레드)으로 실행되었지만 중요한 작업보다 우선 순위가 낮은 한 방해를받지 않았습니다.
말할 필요도없이 테스트 및 디버깅에이 값이 매우 중요한 것으로 입증되었습니다. (임베디드 작업에 대한 하나의 문제는 대개 로그로 사용하기 위해 XTerm을 버릴 수 없다는 것입니다.) 그래서 Supreme Programmer가 반사적으로 작동하지 않는 것을 비난했을 때 (최소한의 저항의 경로, 나는 짐작할 수 있습니다) 그가 나쁜 매개 변수를 보냈다는 것을 보여줍니다. 통합에 많은 디버깅 시간을 절약했습니다.
어쨌든 ... 나는 이 (가) 독립적 인 라이브러리로 제공하고 있습니까? 내가 연결할 수 있고, 콜백을 등록하고, 스레드를 생성하고, 마술을 할 수있는 것이 있습니까? 아니면 내 자신을 밖으로 크랭크 필요합니까? C++을 선호하지만 아마도 C 라이브러리도 사용할 수 있습니다.
EDIT : 나는 그것에 현상금을 넣었으므로 라이브러리가 오픈 소스 라이센스하에 있어야 할 필요가 있음을 명확히해야합니다.
FreeRTOS는 자체 IP 스택을 제공하지 않지만 LwIP 및 uIP를 지원합니다. 기본적으로 소켓과 같은 API를 지원하는 라이브러리 나 라이브러리에서 "send bytes"및 "bytes bytes"함수를 작성해야하는 라이브러리가 있으면 좋을 것입니다. –