工具与软件:
您好!
我正在修改 TI-rtos tcpEcho 函数。 简而言之、我有两个任务:TCP 任务和 UART 任务。 这与 tcpEcho 示例最初的 TCP 任务相同。
总之、我想回显 TCP 套接字从 TCP 套接字和 UART 中接收到的任何内容。 请注意、这些是单独的任务、而 UART 的优先级较低。
我遇到的问题是、调用 NDK_send 的"send"函数似乎没有被阻止。 因此、在发送函数完成之前、TCP 任务会置于睡眠状态。 这会产生时序问题、或看起来是。
问题:1)我可以使 send 函数阻塞吗? 2) 2)是否有指示发送函数完成时间的状态或回调?
下面是我的当前代码。 我已注释掉邮箱相关项目。
谢谢!
//________________________________________________====
/**
@返回
-无效
处理 TCP 连接的任务。 可以有多个正在运行的任务
这个函数。
*/
空 tcpWorker
(
UArg arg0、 //<任务参数0
UArg arg1 ///<任务参数1
)
{
int32_t clientfd =(int32_t) arg0;
int32_t bytesRcvd;
int32_t 字节 Sent;
bool loopError = false;
volatile bool mailboxPostSuccessess = false;
system_printf ("tcpWorker: start clientfd = 0x%x\n"、clientfd);
/* SysMin 只会在您调用 flush 或 exit *时打印到控制台
system_flush();
while ((!loopError)&&((bytesRcvd = recv (clientfd、tcpTaskSys.buffer.x、TCPPACKETSIZE、0))> 0)
{
/* TCP Echo 功能*/
bytesSent = send (clientfd、tcpTaskSys.buffer.x、bytesRcvd、0);
if ((bytesSent < 0)||(bytesSent!= bytesRcvd))
{
system_printf ("错误:发送失败。\n");
/* SysMin 只会在您调用 flush 或 exit *时打印到控制台
system_flush();
休息;
// loopError = true;
}
//否则
//{
/* EGSE 代码*/
//mailboxPostSuccessess = Mailbox_post (*(tcpTaskSys.rs422Handle)、tcpTaskSys.buffer.x、BIOS_no_wait);//sizeof (buffer));//请仔细检查 sizeof (buffer)语句。
//if (true == mailboxPostSuccessess)
//{
// System_printf ("邮箱到 RS422的发布成功。\n");
/* SysMin 只会在您调用 flush 或 exit *时打印到控制台
// System_flush();
// Task_sleep(GetSleepTickCount());
//}
//否则
//{
//待如果邮箱已满、请在此处向 FIFO 添加推送
// System_printf ("邮箱错误!\n");
/* SysMin 只会在您调用 flush 或 exit *时打印到控制台
// System_flush();
//}
//}
}
system_printf ("tcpWorker stop clientfd = 0x%x\n"、clientfd);
close (clientfd);
}
