티스토리 뷰

[stm32] can통신 , freeRTOS 메세지 큐


can으로 모터의 angle을 받아오고, queue로 값을 전달하기

6시간을 thread가 왜 queue send할 때 멈추는가로 보냈다.. 

 

<구조>

can_request_angle.c 에

1. can thread 생성 함수

2. can thread  

3. send velocity command - 모터에 speed 전달 함수

4. SendAngleRequest  - 모터에 angle값 달라 요청

5. can통신으로 받은 값 인터럽트 callback 함수

 

먼저 can thread로 모터에 speed 전달하고 angle값을 달라 요청을 한다 -> 인터럽트가 되서 해당 id 에 맞는 값이 들어오면

xQueueSendFromISR 로 값을 전달한다. 

-> 주의!!!

   xQueueSend()를 사용하면 thread가 돌지 않는다. 아예 보드가 뻗는다.

 

void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
{
	if(xQueueSendFromISR(motor_angle_queue_handler, &motor_angle.motor_angle, 0) == pdPASS){
          PrintDbgMsg("motor_angle_send_ok\r\n");
    }
}

대충 요렇게 넣어줘야한다....


control.c 에서

xQueueReceive()로 값을 받는다.

 

'stm32 & rtos' 카테고리의 다른 글

os( busy waiting , context switching)  (0) 2022.08.12
[smt32] rtos 메시지 큐  (0) 2022.08.12
[stm32] float print가 안될때  (0) 2022.08.10
[stm32] rtos+lwip  (0) 2022.07.28
[ stm32] uart 통신  (0) 2022.07.18
댓글