OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4384|回复: 8

求助,使用STM32cubeMX FREERTOS 创间消息队列编译报错

[复制链接]

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2020-3-18
在线时间
23 小时
发表于 2020-3-19 11:07:01 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 风吹屁屁冷 于 2020-3-19 11:09 编辑

如题
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).

是我用的方法不对吗,求大神指导


最佳答案

查看完整内容[请看2#楼]

问题解决了,记录一下吧。之前keil用的是pack 是Keil.STM32F4xx_DFP.2.13.0.pack,卸载装了2.14版本的,结果报错更多了!!!没办法卸载装回2.13版本的,编译居然通过了!!!莫名其妙搞得
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2020-3-18
在线时间
23 小时
 楼主| 发表于 2020-3-19 11:07:02 | 显示全部楼层
问题解决了,记录一下吧。之前keil用的是pack 是Keil.STM32F4xx_DFP.2.13.0.pack,卸载装了2.14版本的,结果报错更多了!!!没办法卸载装回2.13版本的,编译居然通过了!!!莫名其妙搞得
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2020-3-18
在线时间
23 小时
 楼主| 发表于 2020-3-19 13:16:39 | 显示全部楼层
C:\Users\Administrator\Desktop
回复

使用道具 举报

19

主题

334

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1108
金钱
1108
注册时间
2018-11-6
在线时间
240 小时
发表于 2020-3-19 14:00:59 | 显示全部楼层
Undefined symbol osMessagePut

    编译器没有识别到osMessagePut,请问,你使用消息队列API函数在程序中包含了消息队列的.H文件了吗?
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2020-3-18
在线时间
23 小时
 楼主| 发表于 2020-3-19 14:07:11 | 显示全部楼层
霸王猫 发表于 2020-3-19 14:00
Undefined symbol osMessagePut

    编译器没有识别到osMessagePut,请问,你使用消息队列API函数在程序 ...

cubemx里freertos配置里,include parameters选项里是enableed的
freertos配置.png
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2020-3-18
在线时间
23 小时
 楼主| 发表于 2020-3-19 22:30:52 | 显示全部楼层
更正一下吧,不是keil pack的问题,是cube cmsis库的问题,用cmsis_v1版本的就没有问题,v1和v2版本中对osMessagePut等函数原型不一样
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2020-3-18
在线时间
23 小时
 楼主| 发表于 2020-3-19 22:33:43 | 显示全部楼层
更正一下,是cube中cmsisi库版本的问题V1和V2版本对osMessagePut等函数定义不同,v1版本没这个问题
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2020-3-18
在线时间
23 小时
 楼主| 发表于 2020-3-19 22:34:04 | 显示全部楼层
更正一下,是cube中cmsisi库版本的问题V1和V2版本对osMessagePut等函数定义不同,v1版本没这个问题
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2020-3-18
在线时间
23 小时
 楼主| 发表于 2020-3-19 22:35:11 | 显示全部楼层
更正一下,是cube中cmsisi库版本的问题V1和V2版本对osMessagePut等函数定义不同,v1版本没这个问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 21:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表