2023-03-27 11:42 PM
The generated code:
/* Definitions for TouchGFXTask */
osThreadId_t TouchGFXTaskHandle;
const osThreadAttr_t TouchGFXTask_attributes = {
.name = "TouchGFXTask",
.stack_size = 3048 * 4,
.priority = (osPriority_t) osPriorityNormal,
};
and
TouchGFXTaskHandle = osThreadNew(TouchGFX_Task, NULL, &TouchGFXTask_attributes);
With this code TouchGFX_Task() is never called.
So as a test I duplicated everything:
/* Definitions for TouchGFXTask */
osThreadId_t TouchGFXTaskHandle;
const osThreadAttr_t TouchGFXTask_attributes = {
.name = "TouchGFXTask",
.stack_size = 3048 * 4,
.priority = (osPriority_t) osPriorityNormal,
};
osThreadId_t TouchGFXTaskHandle2;
const osThreadAttr_t TouchGFXTask_attributes2 = {
.name = "TouchGFXTask2",
.stack_size = 3048 * 4,
.priority = (osPriority_t) osPriorityNormal,
};
and
/* Create the thread(s) */
/* creation of TouchGFXTask */
TouchGFXTaskHandle = osThreadNew(TouchGFX_Task, NULL, &TouchGFXTask_attributes);
/* USER CODE BEGIN RTOS_THREADS */
/* add threads, ... */
TouchGFXTaskHandle2 = osThreadNew(TouchGFX_Task2, NULL, &TouchGFXTask_attributes2);
/* USER CODE END RTOS_THREADS */
Now TouchGFX_Task() is called but TouchGFX_Task2() is not called!
Adding more threads has no difference, they are never called but TouchGFX_Task() is.
Has anyone any idea what might be going on here?
Thanks
Andy
2023-03-28 12:44 AM
Hello @ACapo.1,
Not sure that it is the solution, but if you are using FreeRTOS, did you think about creating a task in CubeMX, like it is written in the documentation ?
/Yoann
2023-03-28 01:28 AM
Hi, Thanks for the reply.
The TouchGFX_TASK is already defined there, so I added two more
With this setup StartTask02() is called, the other two are not called!
The changes made are basically what I was doing manually but with a different outcome!
diff --git a/CM7/Core/Src/main.c b/CM7/Core/Src/main.c
index ea728a4..2406fbd 100644
--- a/CM7/Core/Src/main.c
+++ b/CM7/Core/Src/main.c
@@ -71,6 +71,20 @@ const osThreadAttr_t TouchGFXTask_attributes = {
.stack_size = 3048 * 4,
.priority = (osPriority_t) osPriorityNormal,
};
+/* Definitions for myTask02 */
+osThreadId_t myTask02Handle;
+const osThreadAttr_t myTask02_attributes = {
+ .name = "myTask02",
+ .stack_size = 3048 * 4,
+ .priority = (osPriority_t) osPriorityNormal,
+};
+/* Definitions for myTask03 */
+osThreadId_t myTask03Handle;
+const osThreadAttr_t myTask03_attributes = {
+ .name = "myTask03",
+ .stack_size = 3048 * 4,
+ .priority = (osPriority_t) osPriorityNormal,
+};
/* USER CODE BEGIN PV */
OTM8009A_Object_t OTM8009AObj;
OTM8009A_IO_t IOCtx;
@@ -87,6 +101,8 @@ static void MX_DMA2D_Init(void);
static void MX_DSIHOST_DSI_Init(void);
static void MX_LTDC_Init(void);
void TouchGFX_Task(void *argument);
+void StartTask02(void *argument);
+void StartTask03(void *argument);
/* USER CODE BEGIN PFP */
@@ -212,6 +228,12 @@ Error_Handler();
/* creation of TouchGFXTask */
TouchGFXTaskHandle = osThreadNew(TouchGFX_Task, NULL, &TouchGFXTask_attributes);
+ /* creation of myTask02 */
+ myTask02Handle = osThreadNew(StartTask02, NULL, &myTask02_attributes);
+
+ /* creation of myTask03 */
+ myTask03Handle = osThreadNew(StartTask03, NULL, &myTask03_attributes);
+
/* USER CODE BEGIN RTOS_THREADS */
/* add threads, ... */
/* USER CODE END RTOS_THREADS */
@@ -806,6 +828,42 @@ __weak void TouchGFX_Task(void *argument)
/* USER CODE END 5 */
}
+/* USER CODE BEGIN Header_StartTask02 */
+/**
+* @brief Function implementing the myTask02 thread.
+* @param argument: Not used
+* @retval None
+*/
+/* USER CODE END Header_StartTask02 */
+__weak void StartTask02(void *argument)
+{
+ /* USER CODE BEGIN StartTask02 */
+ /* Infinite loop */
+ for(;;)
+ {
+ osDelay(1);
+ }
+ /* USER CODE END StartTask02 */
+}
+
+/* USER CODE BEGIN Header_StartTask03 */
+/**
+* @brief Function implementing the myTask03 thread.
+* @param argument: Not used
+* @retval None
+*/
+/* USER CODE END Header_StartTask03 */
+__weak void StartTask03(void *argument)
+{
+ /* USER CODE BEGIN StartTask03 */
+ /* Infinite loop */
+ for(;;)
+ {
+ osDelay(1);
+ }
+ /* USER CODE END StartTask03 */
+}
+
/* MPU Configuration */
void MPU_Config(void)
2023-03-28 01:45 AM
Ok I think I have worked it out.
That TouchGFX_Task code should not be in main.c, I have no idea why it was generated there.
The actual TouchGFX_Task() is in app_touchgfx.c
Still a little strange that only one of the other tasks is being called though!