请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:DK-TM4C129X
工具/软件:TI-RTOS
您好!
我将 DK-TM4C129以及 TI RTOS 和 NDK 用于 Web 服务器应用。 我开始使用 tcpecho、然后我就能使它正常工作了。
我修改了 tcpecho 代码、如下所示、并且能够使其与动态创建的 Web 服务器任务配合使用。 但是、当我尝试使用挂钩上的 Semaphore_post 和 web_server_task 上的 Semaphore_pend 静态执行它时、我会不断收到错误。 套接字函数返回-1。
如果您继续向下滚动、我还添加了任务为静态的代码。 我找到了该计划。 挂钩被调用、然后 web_server_task 在挂起后运行其余代码。 我不明白为什么套接字返回-1错误。 顺便说一下、在这里、web_server_task 是使用配置文件创建的。 如果我删除了配置文件中的任务并切换回任务的动态创建、则代码工作正常。 如果有任何帮助,将不胜感激
谢谢
AJ
void enet_open_hook (void)
{
Task_handle taskHandle;
Task_Params taskParams;
ERROR_Block EB;
{
Task_handle taskHandle;
Task_Params taskParams;
ERROR_Block EB;
/*确保已初始化 Error_Block */
ERROR_INIT (&EB);
ERROR_INIT (&EB);
/*
* 创建一个任务,该任务将建立传入的 TCP 连接。
* arg0将是此任务侦听的端口。
*
Task_Params_init (&taskParams);
taskParams.STACKSIZE = 1024;
taskParams.priority = 1;
//taskParams.arg0 = TcpPort;
任务处理= Task_create ((Task_FuncPtr) web_server_task、&taskParams、&EB);
if (taskHandle == NULL){
System_printf ("netOpenHook:创建 tcpHandler 任务失败\n");
}
* 创建一个任务,该任务将建立传入的 TCP 连接。
* arg0将是此任务侦听的端口。
*
Task_Params_init (&taskParams);
taskParams.STACKSIZE = 1024;
taskParams.priority = 1;
//taskParams.arg0 = TcpPort;
任务处理= Task_create ((Task_FuncPtr) web_server_task、&taskParams、&EB);
if (taskHandle == NULL){
System_printf ("netOpenHook:创建 tcpHandler 任务失败\n");
}
system_flush();
}//end void enet_open_hook (void)
/********* /
void web_server_task (void)
{
uint8_t val_array[10];
int bytesRcvd;
int bytesSent;
char buffer[256];
}//end void enet_open_hook (void)
/********* /
void web_server_task (void)
{
uint8_t val_array[10];
int bytesRcvd;
int bytesSent;
char buffer[256];
int 服务器;
int clientfd;
INT 状态;
int optval;
int optlen = sizeof (optval);
struct sockaddr_in localAddr;
struct sockaddr_in clientAddr;
socklen_t addrlen = sizeof (clientAddr);
int clientfd;
INT 状态;
int optval;
int optlen = sizeof (optval);
struct sockaddr_in localAddr;
struct sockaddr_in clientAddr;
socklen_t addrlen = sizeof (clientAddr);
Write_UART ("\n\n\r\n\r\n 正在运行 Web 服务器任务...");
服务器=套接字(AF_iNet、SOCK_STREAM、IPPROTO_TCP);
Write_UART ("\n\n\r 服务器套接字=");
long_TO_ASCII (server、val_array);
WRITE_UART (val_array);
Write_UART ("\n\n\r 服务器套接字=");
long_TO_ASCII (server、val_array);
WRITE_UART (val_array);
if (服务器<=0)
{
Write_UART ("\n\r 主套接字失败");
}
{
Write_UART ("\n\r 主套接字失败");
}
memset (localAddr、0、sizeof (localAddr));
localAddr.Sin_Family = AF_iNet;
localAddr.sin_addr.s_addr = htonl (INADDR_ANY);
localAddr.Sin_port = htons(80);
localAddr.Sin_Family = AF_iNet;
localAddr.sin_addr.s_addr = htonl (INADDR_ANY);
localAddr.Sin_port = htons(80);
status = bind (server、(struct sockaddr *)&localAddr、sizeof (localAddr));
如果(状态< 0)
{
Write_UART ("\n\n\r 错误绑定");
}
如果(状态< 0)
{
Write_UART ("\n\n\r 错误绑定");
}
状态=侦听(服务器、3);
如果(状态< 0)
{
WRITE_UART ("\n\n\r 错误监听");
}
如果(状态< 0)
{
WRITE_UART ("\n\n\r 错误监听");
}
optval = 1;
if (setsockopt (server、SOL_socket、SO_keepalive、&optval、optlen)< 0)
{
Write_UART ("\n\n\rError setsockopt");
}
if (setsockopt (server、SOL_socket、SO_keepalive、&optval、optlen)< 0)
{
Write_UART ("\n\n\rError setsockopt");
}
while ((clientfd = accept (server、(struct sockaddr *)&clientAddr、&addrlen)!=-1)
{
Write_UART ("\n\rClientfd 套接字=");
long_TO_ASCII (clientfd、val_array);
WRITE_UART (val_array);
while ((bytesRcvd = recv (clientfd、buffer、256、0))> 0)
{
字节 Sent = SEND (clientfd、buffer、字节 Rcvd、0);
if (bytesSent < 0 || bytesSent!= bytesRcvd)
{
WRITE_UART ("\n\rError byte send/rcv");
}
}
}//结束 while (1)
//end void web_server_task (void)
{
字节 Sent = SEND (clientfd、buffer、字节 Rcvd、0);
if (bytesSent < 0 || bytesSent!= bytesRcvd)
{
WRITE_UART ("\n\rError byte send/rcv");
}
}
}//结束 while (1)
//end void web_server_task (void)
void enet_open_hook (void)
{
while ((clientfd = accept (server、(struct sockaddr *)&clientAddr、&addrlen)!=-1)
{
Write_UART ("\n\rClientfd 套接字=");
long_TO_ASCII (clientfd、val_array);
WRITE_UART (val_array);
{
Sempahore_post (server_sem);
}//end void enet_open_hook (void)
/********* /
void web_server_task (void)
{
uint8_t val_array[10];
int bytesRcvd;
int bytesSent;
char buffer[256];
}//end void enet_open_hook (void)
/********* /
void web_server_task (void)
{
uint8_t val_array[10];
int bytesRcvd;
int bytesSent;
char buffer[256];
int 服务器;
int clientfd;
INT 状态;
int optval;
int optlen = sizeof (optval);
struct sockaddr_in localAddr;
struct sockaddr_in clientAddr;
socklen_t addrlen = sizeof (clientAddr);
int clientfd;
INT 状态;
int optval;
int optlen = sizeof (optval);
struct sockaddr_in localAddr;
struct sockaddr_in clientAddr;
socklen_t addrlen = sizeof (clientAddr);
Semaphore_pend (server_sem、BIOS_wait_forever);
Write_UART ("\n\n\r\n\r\n 正在运行 Web 服务器任务...");
Write_UART ("\n\n\r\n\r\n 正在运行 Web 服务器任务...");
服务器=套接字(AF_iNet、SOCK_STREAM、IPPROTO_TCP);
Write_UART ("\n\n\r 服务器套接字=");
long_TO_ASCII (server、val_array);
WRITE_UART (val_array);
Write_UART ("\n\n\r 服务器套接字=");
long_TO_ASCII (server、val_array);
WRITE_UART (val_array);
if (服务器<=0)
{
Write_UART ("\n\r 主套接字失败");
}
{
Write_UART ("\n\r 主套接字失败");
}
memset (localAddr、0、sizeof (localAddr));
localAddr.Sin_Family = AF_iNet;
localAddr.sin_addr.s_addr = htonl (INADDR_ANY);
localAddr.Sin_port = htons(80);
localAddr.Sin_Family = AF_iNet;
localAddr.sin_addr.s_addr = htonl (INADDR_ANY);
localAddr.Sin_port = htons(80);
status = bind (server、(struct sockaddr *)&localAddr、sizeof (localAddr));
如果(状态< 0)
{
Write_UART ("\n\n\r 错误绑定");
}
如果(状态< 0)
{
Write_UART ("\n\n\r 错误绑定");
}
状态=侦听(服务器、3);
如果(状态< 0)
{
WRITE_UART ("\n\n\r 错误监听");
}
如果(状态< 0)
{
WRITE_UART ("\n\n\r 错误监听");
}
optval = 1;
if (setsockopt (server、SOL_socket、SO_keepalive、&optval、optlen)< 0)
{
Write_UART ("\n\n\rError setsockopt");
}
if (setsockopt (server、SOL_socket、SO_keepalive、&optval、optlen)< 0)
{
Write_UART ("\n\n\rError setsockopt");
}
while ((clientfd = accept (server、(struct sockaddr *)&clientAddr、&addrlen)!=-1)
{
Write_UART ("\n\rClientfd 套接字=");
long_TO_ASCII (clientfd、val_array);
WRITE_UART (val_array);
while ((bytesRcvd = recv (clientfd、buffer、256、0))> 0)
{
字节 Sent = SEND (clientfd、buffer、字节 Rcvd、0);
if (bytesSent < 0 || bytesSent!= bytesRcvd)
{
WRITE_UART ("\n\rError byte send/rcv");
}
}
}//结束 while (1)
//end void web_server_task (void)
{
字节 Sent = SEND (clientfd、buffer、字节 Rcvd、0);
if (bytesSent < 0 || bytesSent!= bytesRcvd)
{
WRITE_UART ("\n\rError byte send/rcv");
}
}
}//结束 while (1)
//end void web_server_task (void)