我使用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 */