TL-LED 发表于 2024-12-10 13:57

【极海APM32M3514电机通用评估板】 运行freertos系统

<p><span style="font-size:16px;">测试下在开发板上运行FreeRTOS系统。</span></p>

<p>&nbsp;</p>

<p><span style="font-size:16px;"><strong>一、下载FreeRTOS源码</strong></span></p>

<p><span style="font-size:16px;">下载地址:<a href="https://www.freertos.org" target="_blank">https://www.freertos.org</a>/</span></p>

<p><span style="font-size:16px;"></span></p>

<p>&nbsp;</p>

<p><span style="font-size:16px;"><strong>二、添加代码</strong></span></p>

<p>&nbsp;</p>

<p><span style="font-size:16px;">2.1、添加FreeRTOS源代码到工程</span></p>

<p><span style="font-size:16px;"></span></p>

<p>&nbsp;</p>

<p><span style="font-size:16px;">2.2、fun_task.c</span></p>

<pre>
<code>#include "main.h"

#define START_TASK_PRO                1                               
#define START_STK_SIZE                64
TaskHandle_t StartTask_Handler;

#define TASK1_PRIO      2                  
#define TASK1_STK_SIZE64               
static TaskHandle_t            Task1Task_Handler = NULL;
         
#define TASK2_PRIO      3                  
#define TASK2_STK_SIZE64               
static TaskHandle_t            Task2Task_Handler = NULL;

#define TASK3_PRIO      4                  
#define TASK3_STK_SIZE64               
static TaskHandle_t            Task3Task_Handler = NULL;


void start_task(void *pvParameters);

void task1(void *pvParameters);
void task2(void *pvParameters);
void task3(void *pvParameters);

void task_create(void)
{
       
        //start_task
        xTaskCreate((TaskFunction_t )start_task,                  
                                                        (const char*    )"start_task",               
                                                        (uint16_t       )START_STK_SIZE,         
                                                        (void*          )NULL,                  
                                                        (UBaseType_t    )START_TASK_PRO,            
                                                        (TaskHandle_t*)&amp;StartTask_Handler);   

        vTaskStartScheduler();
}

void start_task(void *pvParameters)
{
        taskENTER_CRITICAL();
        //task1
        xTaskCreate((TaskFunction_t )task1,                  
                                                        (const char*    )"task1",               
                                                        (uint16_t       )TASK1_STK_SIZE,         
                                                        (void*          )NULL,                  
                                                        (UBaseType_t    )TASK1_PRIO,            
                                                        (TaskHandle_t*)&amp;Task1Task_Handler);   
        //task2
        xTaskCreate((TaskFunction_t )task2,                  
                                                        (const char*    )"task2",               
                                                        (uint16_t       )TASK2_STK_SIZE,      
                                                        (void*          )NULL,                  
                                                        (UBaseType_t    )TASK2_PRIO,            
                                                        (TaskHandle_t*)&amp;Task2Task_Handler);
                                                       
        //task3
        xTaskCreate((TaskFunction_t )task3,                  
                                                        (const char*    )"task3",               
                                                        (uint16_t       )TASK3_STK_SIZE,      
                                                        (void*          )NULL,                  
                                                        (UBaseType_t    )TASK3_PRIO,            
                                                        (TaskHandle_t*)&amp;Task3Task_Handler);                                                
        taskEXIT_CRITICAL();
        vTaskDelete(StartTask_Handler);                                               
}


//task1
void task1(void *pvParameters)
{
    while (1)
    {
      printf("task1 run ...\r\n");
      vTaskDelay(100);
    }
}

//task2
void task2(void *pvParameters)
{
    while (1)
    {       
      printf("task2 run ...\r\n");
      vTaskDelay(200);
    }
}

//task3
void task3(void *pvParameters)
{
    while (1)
    {       
      printf("task3 run ...\r\n");
      vTaskDelay(300);
    }
}

</code></pre>

<p>&nbsp;</p>

<p><span style="font-size:16px;">2.3、main.c</span></p>

<pre>
<code>int main(void)
{
        APM_DelayInit();
        APM_DelayMs(5000);
       
        init_usart();
        init_led();
        task_create();

        while (1)
        {
        }
}</code></pre>

<p>&nbsp;</p>

<p><strong><span style="font-size:16px;">三、运行结果</span></strong></p>

<p>&nbsp;</p>

<p><span style="font-size:16px;">下载程序后,串口输出内容:</span></p>

<p></p>

<p>&nbsp;</p>

q1233 发表于 2024-12-11 09:46

<p>多谢分享!多谢分享!多谢分享!多谢分享!多谢分享!</p>
页: [1]
查看完整版本: 【极海APM32M3514电机通用评估板】 运行freertos系统