Protject 진행 중 Netconn_write 호출 시 다른 Task가 unknown이 되어버리는 현상이 발생하였다.
문제가 발생 전 화면
netconn_write 호출 후 Task 깨지는 화면
디버깅 결과 이 문제는 netconn_write 문제라기 보다 tcp초기화를 하지 않은 상태에서 netconn api를 호출하여 발생하는 문제로 보인다.(애초에 netconn_bind에서 ERR_OK를 Return하면 안되는거 아닌가?)
저 상태에서 몇번 ContextSwitching 하다가 CameraTask 까지 깨진다.
앞서 언급한 대로 tcp 초기화 진행 후 TCP_Task를 만들어주면 또는 세마포어나 뮤텍스를 활용하여 TCP초기화 전에 netconn api를 건들 지 못하도록 하면 된다
여기서는 main에서 생성 했던 TCP_TASK를 DefaultTask에서 MX_LWIP_INIT을 호출 후 생성하게 하였다.
void MX_FREERTOS_Init(void) {
TCPLinkSemaphoreHandle = osSemaphoreNew(1, 1, &TCPLinkSemaphore_attributes);
/* creation of CmraSemaphore */
CmraSemaphoreHandle = osSemaphoreNew(1, 1, &CmraSemaphore_attributes);
TCPQUEUEHandle = osMessageQueueNew (16, sizeof(uint16_t), &TCPQUEUE_attributes);
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
/* creation of TcpTask */
//TcpTaskHandle = osThreadNew(Tcp_Task, NULL, &TcpTask_attributes); 초기화에서 TCP_TASK 생성 x
/* creation of CameraTask */
CameraTaskHandle = osThreadNew(Camera_Task, NULL, &CameraTask_attributes);
/* USER CODE BEGIN RTOS_THREADS */
/* add threads, ... */
TCP_arg.netconn = tcpconn;
TCP_arg.semaphore = TCPLinkSemaphoreHandle;
CMRA_arg.netconn = tcpconn;
CMRA_arg.semaphore = CmraSemaphoreHandle;
/* USER CODE END RTOS_THREADS */
}
초기화에서 제거한 osThreadNew 함수를 StartDefaultTask에 추가한 코드
void StartDefaultTask(void *argument)
{
/* init code for LWIP */
MX_LWIP_Init();
/* USER CODE BEGIN StartDefaultTask */
TcpTaskHandle = osThreadNew(Tcp_Task, NULL, &TcpTask_attributes);
/* Infinite loop */
for(;;)
{
osThreadTerminate(defaultTaskHandle);
}
/* USER CODE END StartDefaultTask */
}
위와 같이 StartDefaultTask에서 Tcp_Task를 생성 후 netconn_write를 호출 후 Task 상태 화면
Link_Thr은 ethernetif_set_link 함수로 케이블이 연결 되었을 시 netif_set_link_up(link_arg->netif);를 호출하고
만약 분리 하였을 시 netif_set_link_down(link_arg->netif); 을 호출하여 지속적으로 update 한다.
defaultTask와 CameraTask는 정상 동작 확인함
일단 각 Task 실행에는 문제 없어서 계속 진행
'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(osThreadSetPriority 문제) (0) | 2020.04.17 |
OV5642_LWIP_RTOS Project -1 (0) | 2020.04.12 |
stm32cubeIDE (Eclipse) Import Project (0) | 2019.12.30 |