“undefined reference to “task_xxx“ ———FreeRTOS xTaskhHandle

我使用STM32CUBEIDE的FreeRTOS ,但是没有使用它生成代码的CMSIS 的API ,我使用的是xTaskhandle , 当我对所有任务做好定义编译之后,问题就出现了
在这里插入图片描在这里插入图片描述述

 出现这个问题就是,你的任务在前面做了声明,但是没有对任务进行定义,这提示你需要在后面做定义。
* USER CODE BEGIN 0 */
///*********** QUEUE HANDLER***********/
xQueueHandle St_Queue_Handler;
//
///*********** Task HANDLER***********/
xTaskHandle Sender1_Task_Handler;
xTaskHandle Sender2_Task_Handler;
xTaskHandle Receive_Task_Handler;
//
///********** Task FUNTION ************/
void Sender1_Task(void  *argment);
void Sender2_Task(void  *argment);
void Receive_Task(void  *argment);
//
typedef struct
{
	char *str;
	int counter;
	uint16_t large_value;
}my_struct;

int dex1;
int dex2;
/* USER CODE END 0 */
/* USER CODE BEGIN 4 */
void Sender1_Task(void  *argment)
{
	my_struct *ptrostruct;

	uint32_t TickDelay = pdMS_TO_TICKS(2000);  // millisecond class
	while(1)
	{
		 char *str = "Entered SENDER1_Task \n";
		 HAL_UART_Transmit(&huart2, (uint8_t *)str, strlen(str), HAL_MAX_DELAY);
     /********** ALOOCATE MEMORY TO THE PTR ***********/
		 ptrostruct = pvPortMalloc(sizeof(my_struct));
		 /********** LODA THE DATA ****************/
		 ptrostruct->counter = 1+dex1;
		 ptrostruct->large_value = 1000*dex1;
		 ptrostruct->str = "HELLO FROM SENDER 1\n";

		 /********* send  to the queue ***********/
		 if(xQueueSend(St_Queue_Handler,&ptrostruct,portMAX_DELAY) == pdPASS)
		 {
			 char *str2 = "Successfully sent the to the Queue \n\r";
			 HAL_UART_Transmit(&huart2, (uint8_t *)str2, strlen(str2), HAL_MAX_DELAY);
		 }
		 dex1 = dex1+1;
		 vTaskDelay(TickDelay);
	}
}

void Sender2_Task(void  *argment)
{
	my_struct *ptrostruct;

	uint32_t TickDelay = pdMS_TO_TICKS(2000);  // millisecond class
	while(1)
	{
		 char *str = "Entered SENDER2_Task \n";
		 HAL_UART_Transmit(&huart2, (uint8_t *)str, strlen(str), HAL_MAX_DELAY);
     /********** ALOOCATE MEMORY TO THE PTR ***********/
		 ptrostruct = pvPortMalloc(sizeof(my_struct));
		 /********** LODA THE DATA ****************/
		 ptrostruct->counter = 1+dex2;
		 ptrostruct->large_value = 2000+200*dex2;
		 ptrostruct->str = "HELLO FROM SENDER 2\n";

		 /********* send  to the queue ***********/
		 if(xQueueSend(St_Queue_Handler,&ptrostruct,portMAX_DELAY) == pdPASS)
		 {
			 char *str2 = "Successfully sent the to the Queue \n\r";
			 HAL_UART_Transmit(&huart2, (uint8_t *)str2, strlen(str2), HAL_MAX_DELAY);
		 }
		 dex2 = dex2+1;
		 vTaskDelay(TickDelay);
	}
}


void Receive_Task(void *argment)
{
	my_struct *Rptrostruct;
	uint32_t TickDelay = pdMS_TO_TICKS(3000);
	char *ptr;
	while(1)
	{
		 char *str = "Entered Receive_Task \n";
		 HAL_UART_Transmit(&huart2, (uint8_t *)str, strlen(str), HAL_MAX_DELAY);
		 /********* Receive  to the queue ***********/
		 if(xQueueReceive(St_Queue_Handler, &Rptrostruct, portMAX_DELAY) == pdPASS)
		 {
       ptr = pvPortMalloc(100*sizeof(char));
       sprintf(ptr,"Rceive from QUUE:  Rptrostruct = %d\n  Rptrostruct = %d\n  Rptrostruct = %s",Rptrostruct->counter,Rptrostruct->large_value,Rptrostruct->str);
       HAL_UART_Transmit(&huart2, (uint8_t *)ptr, strlen(ptr), HAL_MAX_DELAY);

       vPortFree(ptr);   //free the string memory
		 }
		 vPortFree(Rptrostruct);  //free the structure memory
		 vTaskDelay(TickDelay);
	}
}
/* USER CODE END 4 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值