記錄問題--------使用STM32cubeMX FREERTOS 創間消息隊列編譯報錯

 

stm32cubemx 版本5.6.0
keil版本5.29.0
freertos.c中代碼
 



/* Includes ------------------------------------------------------------------*/
#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"

  
#include "can.h"
#include "gpio.h"
#include "KincoServo.h"




osThreadId_t defaultTaskHandle;
const osThreadAttr_t defaultTask_attributes = {
  .name = "defaultTask",
  .priority = (osPriority_t) osPriorityNormal,
  .stack_size = 128 * 4
};

osThreadId_t myTask02_LedHandle;
const osThreadAttr_t myTask02_Led_attributes = {
  .name = "myTask02_Led",
  .priority = (osPriority_t) osPriorityLow,
  .stack_size = 128 * 4
};

osThreadId_t myTask03_MotorHandle;
const osThreadAttr_t myTask03_Motor_attributes = {
  .name = "myTask03_Motor",
  .priority = (osPriority_t) osPriorityLow,
  .stack_size = 128 * 4
};

osThreadId_t myTask04_CanTxHandle;
const osThreadAttr_t myTask04_CanTx_attributes = {
  .name = "myTask04_CanTx",
  .priority = (osPriority_t) osPriorityLow,
  .stack_size = 128 * 4
};

osMessageQueueId_t myQueue01Handle;
const osMessageQueueAttr_t myQueue01_attributes = {
  .name = "myQueue01"
};



void StartDefaultTask(void *argument);
void StartTask02_LedFunction(void *argument);
void StartTask03_MotorFunction(void *argument);
void StartTask04_CanTxFunction(void *argument);

void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */


void MX_FREERTOS_Init(void) {




  myQueue01Handle = osMessageQueueNew (16, sizeof(uint16_t), &myQueue01_attributes);


  defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
  myTask02_LedHandle = osThreadNew(StartTask02_LedFunction, NULL, &myTask02_Led_attributes);
  myTask03_MotorHandle = osThreadNew(StartTask03_MotorFunction, NULL, &myTask03_Motor_attributes);


  myTask04_CanTxHandle = osThreadNew(StartTask04_CanTxFunction, NULL, &myTask04_CanTx_attributes);


}


void StartDefaultTask(void *argument)
{

  for(;;)
  {
    osDelay(1);
  }
}


void StartTask02_LedFunction(void *argument)
{

  for(;;)
  {
                HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
                osDelay(1000);
                HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
  }

}


void StartTask03_MotorFunction(void *argument)
{


        FindOrigin(1);
        osDelay(2000);
        GetStates(1);

        SetInterpolationModeType();
        osMessagePut(myQueue01Handle,1,osWaitForever);

  for(;;)
  {                   
                osDelay(1);        
  }

}


void StartTask04_CanTxFunction(void *argument)
{

  for(;;)
  {
                osDelay(1);
  }

}


敲代碼的時候 能自動補全,也沒有報錯  osMessagePut(myQueue01Handle,1,osWaitForever);
但編譯的時候報錯了 ,提示沒有定義
test\test.axf: Error: L6218E: Undefined symbol osMessagePut (referred from freertos.o).

 

問題解決,是cube中cmsisi庫版本的問題V1和V2版本對osMessagePut等函數定義不同,v1版本沒這個問題 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章