[FreeRTOS] Introducción detallada a los pasos del trasplante stm32 de FreeRTOS

Estoy buscando muy pocos tutoriales relacionados con el trasplante de FreeRTOS, por lo que me gustaría presentar los pasos detallados del trasplante de FreeRTOS a stm32 con gran detalle, incluida la descarga del código fuente, la introducción del código fuente, el trasplante del sistema, la verificación del código, etc. Una introducción y explicación correspondiente, espero que pueda ayudarte.
Insertar descripción de la imagen aquí



1. Descargue el código fuente de FreeRTOS

Descarga del sitio web oficial, descarga del almacén, descarga espejo, descarga del disco de red Baidu, mensaje privado


1.1 Puede ir al sitio web oficial de FreeRTOS para descargar, [Portal del sitio web oficial de FreeRTOS] , pero la velocidad de descarga es muy lenta. Si no desea sortear el muro, no se recomienda utilizar este método para descargar.

1.1.1 La página del sitio web oficial es la siguiente, haga clic en la entrada de descarga en la esquina superior derecha o debajo

Insertar descripción de la imagen aquí


1.1.2 Hay dos opciones de descarga al ingresar a la página de descarga.

  • La primera opción es FreeRTOS 202212.01. El paquete descargado contiene el último kernel FreeRTOS, la biblioteca FreeRTOS-Plus y la biblioteca AWS IoT, así como proyectos de muestra.
  • La segunda opción es FreeRTOS 202210.01 LTS, el paquete contiene la biblioteca FreeRTOS LTS, que incluye el kernel FreeRTOS y las bibliotecas IoT, pero no hay proyectos de muestra.

Normalmente solo descargamos el primero.

Insertar descripción de la imagen aquí


1.2 La descarga directa a través del almacén, [Portal de direcciones del almacén] , también es muy lenta y ni siquiera se puede abrir la página web. Este método no se recomienda.


1.3 Descarga a través de espejos nacionales. Este método de descarga no se ve afectado por el nombre de dominio. Es el método más directo
[portal espejo nacional] . Se recomienda utilizar


1.3.1 Abrir la página de enlace

Insertar descripción de la imagen aquí


1.3.2 Haga clic en Descargar/Clonar, la descarga se realizó correctamente

Insertar descripción de la imagen aquí


1.4 Utilice el código fuente que subí a Baidu Netdisk, que es un paquete de datos descargado directamente del sitio web oficial, se recomienda usarlo, al menos es más rápido que el sitio web y el almacén oficiales.

Enlace: [Portal Baidu Netdisk]
Código de extracción: sqml


1.5 Si ninguno de los métodos anteriores funciona, puedes enviarme un mensaje privado directamente.

El paquete comprimido descargado y el archivo descomprimido contienen el siguiente contenido:
Insertar descripción de la imagen aquí

El paquete comprimido tiene 88,3 MB y la carpeta descomprimida tiene 506 MB.


2. Introducción al código fuente de FreeRTOS

El artículo anterior se presentó en detalle. Puede ir directamente al artículo anterior para comprender la estructura del código fuente, lo que puede ayudarlo a comprender mejor el principio de trasplante y el principio de implementación de FreeRTOS.

Portal de blogs: [FreeRTOS] Estructura y funciones detalladas del directorio

Básicamente se puede resumir en la siguiente imagen:
Insertar descripción de la imagen aquí


3. Trasplante del sistema FreeRTOS

3.1 Prepare el código fuente de FreeRTOS y un proyecto STM32 configurado. Estoy usando un proyecto de parpadeo LED que se ha implementado con éxito antes.

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí


3.2 Cree una carpeta FreeRTOS en el proyecto del proyecto para almacenar todos los archivos de trasplante

Insertar descripción de la imagen aquí


3.3 En la carpeta FreeRTOS que acaba de crear, cree nuevas carpetas src, inc y port:

  • La carpeta src se utiliza para almacenar el código fuente.
  • La carpeta inc se utiliza para almacenar archivos de encabezado.
  • La carpeta del puerto se utiliza para almacenar archivos relacionados con la plataforma de trasplante.

Insertar descripción de la imagen aquí


3.4 A continuación, trasplantaremos el código fuente de FreeRTOS a nuestra carpeta recién creada.

3.4.1 Primero, abrimos la carpeta portátil en la carpeta Soure en el código fuente y buscamos la carpeta MemMang. Esta carpeta está llena de archivos de administración de memoria. Solo usamos el archivo heap_4.c y lo copiamos a la carpeta del puerto.

Insertar descripción de la imagen aquí


3.4.2 Luego encontramos la carpeta RVDS en la carpeta portátil en este momento, seleccionamos los archivos port.c y portmacro.h en ARM_M3 dentro y los copiamos a la carpeta de puerto de nuestro archivo de proyecto.

Insertar descripción de la imagen aquí


3.4.3 Regrese a la carpeta de origen y copie todos los archivos .c en esta carpeta a la carpeta src recién creada del proyecto.


Insertar descripción de la imagen aquí


3.4.4 Todas las carpetas de inclusión en la carpeta de origen son archivos de encabezado de FreeRTOS. Agréguelos a la carpeta inc recién creada del proyecto.

Insertar descripción de la imagen aquí


3.4.5 Agregue un archivo de configuración, busque la carpeta CORTEX_STM32F103_Keil en la carpeta de demostración en la carpeta FreeRTOS y copie el archivo FreerRTOSConfig.h dentro de la nueva carpeta FreeRTOS

Insertar descripción de la imagen aquí


3.5 A continuación, agregamos la ruta del archivo, abrimos el software keil, hacemos clic en la varita mágica, ingresamos C/C++, agregamos la ruta del archivo en Incluir rutas y agregamos todas las rutas de FreeRTO, src, inc y port.

Insertar descripción de la imagen aquí


3.6 Crear un nuevo grupo. Agregue todos los archivos al proyecto. Haga clic en los tres íconos de cuadrícula al lado de la varita mágica y seleccione Nuevo grupo. Creamos tres nuevos grupos: FreeRTOS_src, FreeRTOS_inc y FreeRTOS_port, y agregamos todos los archivos .c en la carpeta del proyecto src. Vaya a FreeRTOS_src, agregue todos los archivos .h en la carpeta del proyecto inc a FreeRTOS_inc (excluyendo .readme), agregue los archivos en el puerto de la carpeta del proyecto (heap_4.c, port.c) a FreeRTOS_port y configure The El archivo FreeRTOSConfig.h se agrega al grupo FreeRTOS_inc.

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí


3.7 Complete la definición de macro de la función de interrupción y agréguela a la compilación condicional en FreeRTOSConfig.h

#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler

Insertar descripción de la imagen aquí


3.8 Comente las tres funciones vacías de interrupción en la función de biblioteca STM

Ellos son:

void SVC_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);

Insertar descripción de la imagen aquí

En este punto, la migración del sistema se ha completado.


4. Verificación del código del sistema

4.1 Primero agregue los archivos de encabezado FreeRTOS.h y task.h al archivo principal

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "FreeRTOS.H"
#include "task.h"

4.2 Usamos directamente el código intermitente del LED para verificar, primero creamos una función de tarea

static void task1(void *arg)
{
    
    
	while(1)
	{
    
    
		GPIO_ResetBits(GPIOC, GPIO_Pin_13);
		vTaskDelay(500);
		GPIO_SetBits(GPIOC, GPIO_Pin_13);
		vTaskDelay(500);
	}
}

4.3 Crear una tarea en la función principal e iniciar el programador de tareas

	xTaskCreate(task1,"task1",512,NULL,2,&task1Handler);
	vTaskStartScheduler();

4.4 Por supuesto, si desea utilizar LED, debe inicializar el puerto serie. Tomemos GPIO_Pin_13 en GPIOC como ejemplo.

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &GPIO_InitStructure);

4.5 Todos los códigos en el archivo principal son

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "FreeRTOS.H"
#include "task.h"

TaskHandle_t task1Handler;

static void task1(void *arg)
{
    
    
	while(1)
	{
    
    
		GPIO_ResetBits(GPIOC, GPIO_Pin_13);
		vTaskDelay(500);
		GPIO_SetBits(GPIOC, GPIO_Pin_13);
		vTaskDelay(500);
	}
}
int main(void)
{
    
    
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	
	xTaskCreate(task1,"task1",512,NULL,2,&task1Handler);
	vTaskStartScheduler();
	
}

Puerto de transferencia de funciones comunes de FreeRTOS: [FreeRTOS] Resumen de funciones comunes


4.6 Después de la compilación, se puede grabar en la placa de desarrollo para su verificación.


4.7 O use el depurador que viene con keil para depurar
4.7.1 Primero busque la opción de depuración en la varita mágica, seleccione usar simulación y configúrela con el modelo de microcontrolador correspondiente a continuación.

Insertar descripción de la imagen aquí


4.7.2 Haga clic en el botón depurar y agregue el analizador lógico arriba

Insertar descripción de la imagen aquí


4.7.3 Haga clic en la configuración del analizador lógico y agregue la señal. Estamos usando stm32f103c8t6, ​​por lo que la señal es PORTC.13. Diferentes placas de desarrollo pueden ver el puerto serie configurado y el registro correspondiente al microcontrolador. Tenga en cuenta que el el tipo de señal debe seleccionarse como bit.

Insertar descripción de la imagen aquí


4.7.4 Al ejecutar a máxima velocidad se pueden obtener formas de onda precisas del puerto serie

Insertar descripción de la imagen aquí

También puede crear varias tareas y ver el estado de ejecución de las tareas de análisis de formas de onda.


Puerto de transferencia de código completo del proyecto:
Enlace: proyecto de muestra FreeRTOS
Código de extracción: k8uk

Guess you like

Origin blog.csdn.net/Goforyouqp/article/details/133481567