ETH0_THREAD_PRIORITY osPriorityAboveNormal
NET_THREAD_PRIORITY osPriorityNormal
自己的任务线程(sockTask)优先级是 osPriorityNormal1;
在tcp回调中把数据放入buf,并激活任务处理线程
[C] 纯文本查看 复制代码 uint32_t tcp_cb_func (int32_t socket, netTCP_Event event,
const NET_ADDR *addr, const uint8_t *buf, uint32_t len) {
if(event == netTCP_EventData){
// 把数据放入buf
osThreadFlagsSet(sockTaskHandle,0x00000001U);
}
return (0);
}
在任务处理线程中读取数据,并回复
[C] 纯文本查看 复制代码 int32_t tcp_sock;
void iap_sock_rec_task(void* arg){
netInitialize ();
tcp_sock = netTCP_GetSocket (tcp_cb_func);
while (1)
{
uint32_t flag = osThreadFlagsWait(0x00000001U,osFlagsWaitAny,1000);
netTCP_State state =netTCP_GetState(tcp_sock);
if(state == netTCP_StateESTABLISHED) // 连接成功
{
if(flag == 0x00000001U){
if(netTCP_SendReady(tcp_sock)){
// 处理数据,并回复
netTCP_Send (tcp_sock, response, response_len);
}else{
log_debug("sock busy");
}
}
}
else if (state == netTCP_StateCLOSED){
if(g_ucEthLinkStatus == 2){
netTCP_Connect (tcp_sock, (NET_ADDR *)&addr, 0);
log_info("try connect");
}
}
}
}
测试中发现,每次netTCP_SendReady 都返回false。
如果将任务优先级设为osPriorityNormal时可以发送。
请问:调用tcp发送的线程不能高于网络线程嘛?
|