Project 진행 중 osThreadSetPriority 함수 실행에 문제가 발생했다.
위 함수의 문제는 ThreadSetPriority(defaultTaskHandle,osPriorityNone)에서 2번 째 인자 값이 0(osPriorityNone) 일 때
우선 순위가 변경 되지 않는다.
즉 Task의 우선순위를 변경 할려면 IDLE Task의 우선순위보다 커야하며 (Priority>0) 같게 하였을 경우 우선순위가 변경 되지 않고 이전 priority를 유지한다.
netconn_accept 함수에서는 Client가 Connect 할 때 까지 Task는 Block 상태가 된다.
netconn_write (struct netconn *conn , void *data , u16_t len , u8_t aApiFlags );
netconn_write 함수에 3번쨰 인자 값을 보면 aApiFlags 로 되어있는데 이 플래그는 전송 할 때 버퍼의 상태를 나타낸다.
플래그는 다음과 같이 조합을 할 수 있다.
#define NETCONN_NOFLAG 0x00 // 데이터를 복사하지 않고 참조한다.
#define NETCONN_COPY 0x01 // 데이터를 내부 버퍼에 복사한다.
#define NETCONN_MORE 0x02 // TCP 연결에 사용 되며 마지막 전송 된 세그먼트에 psh 플래그가 설정됨을 나타낸다.
#define NETCONN_DONTBLOCK 0x04 //스택에 있는 모든 데이터를 한번에 쓸수 있는 경우 데이터를 쓰도록 지시한다.
void Tcp_Task(void *argument)
{
/* USER CODE BEGIN Tcp_Task */
struct netconn *conn, *newconn;
err_t err, accept_err;
struct netbuf *buf;
char *data;
u16_t len;
LWIP_UNUSED_ARG(argument);
conn = netconn_new(NETCONN_TCP);
if (conn!=NULL)
{
err = netconn_bind(conn, NULL, 1460);
if (err == ERR_OK)
{
netconn_listen(conn);
while (1)
{
accept_err = netconn_accept(conn, &newconn); //Client가 Connect 될때까지 Block 한다.
tcpconn = newconn;
if (accept_err == ERR_OK)
{
while (netconn_recv(newconn, &buf) == ERR_OK)
{
netbuf_data(buf, &data, &len);
if(strcmp(data,"CMRA") == 0)
{
netconn_write(newconn, data, len, NETCONN_COPY);
}
else
{
netconn_write(newconn, data, len, NETCONN_COPY);
char* data2 = "Netconn Write";
netconn_write(newconn, data2, sizeof("Netconn Write"), NETCONN_MORE);
//netconn_write에서 같은 데이터 주소를 참조하여 보낼 시 2번 출력이 되지 않는다.
//netconn_write(newconn, data, len, NETCONN_COPY); 43번 코드 대신 이코드로 할시 동작x
}
netbuf_delete(buf);
}
netconn_close(newconn);
netconn_delete(newconn);
}
osDelay(100);
}
}
else
{
netconn_delete(newconn);
}
}
위 코드와 같이 netconn_write에서 NETCONN_COPY 후 다시 NETCONN_MORE 를 호출해야 TCP Client로 전송된다.
'Firmware > stm32' 카테고리의 다른 글
OV5642_LWIP_RTOS Project -2(Camera API) (0) | 2020.04.24 |
---|---|
OV5642_LWIP_RTOS Project -2(Camera Interface 구현 ) (1) | 2020.04.23 |
OV5642_LWIP_RTOS Project -1(Netconn_write 호출 시 문제) (0) | 2020.04.23 |
OV5642_LWIP_RTOS Project -1 (0) | 2020.04.12 |
stm32cubeIDE (Eclipse) Import Project (0) | 2019.12.30 |