【DigiKey好物畅享】NXP FRDM-MCXN236开发板—移植FreeRTOS

测试在开发板上移植FreeRTOS系统。

一、源码下载

下载FreeRTOS源码.

下载地址:Releases · FreeRTOS/FreeRTOS

二、程序部分

2.1、下载的文件源码复制到项目文件middleware下,只保留Source文件夹。添加源码和头文件到工程。

2.2、代码

2.2.1、fun_task.c

#include "main.h"

#define START_TASK_PRO		1				
#define START_STK_SIZE		128
TaskHandle_t StartTask_Handler;

#define TASK1_PRIO      4                   
#define TASK1_STK_SIZE  128                 
static TaskHandle_t            Task1Task_Handler = NULL;  
           
#define TASK2_PRIO      3                   
#define TASK2_STK_SIZE  128                 
static TaskHandle_t            Task2Task_Handler = NULL;  

#define TASK_LM8168_PRIO      5                   
#define TASK_LM8168_STK_SIZE  128                 
static TaskHandle_t            Task_LM8168_Task_Handler = NULL; 

void start_task(void *pvParameters); 
void gui_task(void *pvParameters);

void task1(void *pvParameters);  
void task2(void *pvParameters);
void task_LM8168(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*  )&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*  )&Task1Task_Handler);    
	//task2
	xTaskCreate((TaskFunction_t )task2,                  
							(const char*    )"task2",                
							(uint16_t       )TASK2_STK_SIZE,        
							(void*          )NULL,                  
							(UBaseType_t    )TASK2_PRIO,             
							(TaskHandle_t*  )&Task2Task_Handler); 
	taskEXIT_CRITICAL();
	vTaskDelete(StartTask_Handler);						
}


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

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


2.2.2、main.c

/*
 * Copyright (c) 2015, Freescale Semiconductor, Inc.
 * Copyright 2016-2017 NXP
 * All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */
#include "main.h"

int main(void)
{

    /* Board pin, clock, debug console init */
    BOARD_InitHardware();
		init_led();
		task_create();
    while (1)
    {
		
    }
}

三、运行结果

编译后下载程序,开发板上的LED闪烁和串口输出任务打印