[OpenHarmony] Portar LiteOS-M a STM32 bajo VSCode

[OpenHarmony] Portar LiteOS-M a STM32 bajo VSCode

Antes, configuré el entorno de desarrollo STM32 bajo VSCode. En esta sección, nos divertiremos basándonos en VSCode, trasplantaremos el kernel LiteOS-M de OpenHarmony al proyecto STM32 y apoyaremos a Hongmeng. Lo trasplanté hace mucho tiempo. El La versión de LiteOS no es la versión fusionada con OpenHarmony. La razón es que el código se descargó. Durante el proceso de compilación, se descubrió que faltaban varios archivos. La referencia del archivo de la capa kal es extraña. Soy bastante pesimista sobre el futuro. dirección de OpenHarmony. No es bueno, está fusionado por el bien de la fusión, y se siente como huir a la mitad, pero el núcleo de LiteOS-A se está desarrollando muy rápido, se ha actualizado básicamente todo el tiempo, la actividad es bastante alto, y el efecto final es desconocido, espere lentamente y escriba. . .

llegar al punto

1. Obtención del código fuente

Descargue el código fuente en Gitee, preste atención para seleccionar la rama Desarrollar del almacén y llévelo al local:

20220320220407

Tire del código a local

20220320221520

2. Preparando el proyecto

Prepare un entorno de ingeniería para que VSCode desarrolle STM32. He escrito este artículo anteriormente y configure el entorno de desarrollo de STM32 de acuerdo con ese artículo.

VSCode construye el entorno de desarrollo STM32

Generamos un entorno de desarrollo STM32 basado en CubeMX, modificamos el reloj del sistema a TIM1 para evitar conflictos con el Sistema, luego configuramos dos puertos IO de luz LED y finalmente generamos un proyecto Makefile

20220320223214

Luego abra el proyecto e ingrese:

20220320223830

En el directorio del proyecto, cree una carpeta OpenHarmony para almacenar el código fuente de LiteOS y luego copie la parte del código fuente descargada del almacén, y la parte de la copia se encuentra a continuación:

20220320224552

Luego haga algunas modificaciones al contenido copiado:

  • arch solo deja los archivos y las carpetas gcc en la carpeta m4 core debajo del brazo, así como todas las carpetas include, src y commom. No elimine estos archivos comunes por error.

20220320224750

  • el destino deja OS_CONFIG en f1 en el directorio como un archivo de referencia para una mayor configuración del sistema y elimina todos los demás

20220321131904

  • Solo quedan los siguientes métodos de asignación de memoria en kernel -> base -> mem:

20220320231216

otros siguen igual

3. Agregue el código fuente a la compilación

Se agrega el código fuente y el siguiente paso es modificar el archivo MAKE para realizar la compilación del código fuente. Aquí, se genera un pequeño script usando una ruta que escribí para obtener rápidamente la ruta de compilación del código fuente.

Un script para desarrollar STM32 bajo VSCode

El siguiente archivo es mi información de ruta generada

**************************************************
* 头文件路径
**************************************************
-IOpenHarmony/arch/arm/arm-m/cortex-m4\
-IOpenHarmony/arch/arm/arm-m/include\
-IOpenHarmony/arch/arm/common/cmsis\
-IOpenHarmony/kernel/base/include\
-IOpenHarmony/kernel/extended/include\
-IOpenHarmony/kernel/include\
-IOpenHarmony/osdepends/liteos/cmsis/1.0\
-IOpenHarmony/osdepends/liteos/cmsis/2.0\
-IOpenHarmony/osdepends/liteos/cmsis\
-IOpenHarmony/targets/OS_CONFIG
**************************************************
* C文件路径
**************************************************
OpenHarmony/arch/arm/arm-m/cortex-m4/los_exc.c\
OpenHarmony/arch/arm/arm-m/src/los_hw.c\
OpenHarmony/arch/arm/arm-m/src/los_hwi.c\
OpenHarmony/arch/arm/arm-m/src/los_hw_tick.c\
OpenHarmony/kernel/base/core/los_priqueue.c\
OpenHarmony/kernel/base/core/los_swtmr.c\
OpenHarmony/kernel/base/core/los_sys.c\
OpenHarmony/kernel/base/core/los_task.c\
OpenHarmony/kernel/base/core/los_tick.c\
OpenHarmony/kernel/base/core/los_timeslice.c\
OpenHarmony/kernel/base/ipc/los_event.c\
OpenHarmony/kernel/base/ipc/los_mux.c\
OpenHarmony/kernel/base/ipc/los_queue.c\
OpenHarmony/kernel/base/ipc/los_sem.c\
OpenHarmony/kernel/base/mem/bestfit_little/los_heap.c\
OpenHarmony/kernel/base/mem/bestfit_little/los_memory.c\
OpenHarmony/kernel/base/mem/common/los_memcheck.c\
OpenHarmony/kernel/base/mem/common/los_memstat.c\
OpenHarmony/kernel/base/mem/common/los_slab.c\
OpenHarmony/kernel/base/mem/common/los_slabmem.c\
OpenHarmony/kernel/base/mem/membox/los_membox.c\
OpenHarmony/kernel/base/misc/los_misc.c\
OpenHarmony/kernel/base/om/los_err.c\
OpenHarmony/kernel/extended/tickless/los_tickless.c\
OpenHarmony/kernel/los_init.c\
OpenHarmony/osdepends/liteos/atiny_osdep.c\
OpenHarmony/osdepends/liteos/cmsis/1.0/cmsis_liteos1.c\
OpenHarmony/osdepends/liteos/cmsis/2.0/cmsis_liteos2.c\
OpenHarmony/osdepends/liteos/cmsis/cmsis_liteos.c
**************************************************
* 汇编文件路径
**************************************************
OpenHarmony/arch/arm/arm-m/cortex-m4/gcc/los_dispatch_gcc.S\
OpenHarmony/arch/arm/arm-m/cortex-m4/gcc/los_hw_exc_gcc.S\
./startup_stm32f407xx.s
**************************************************

Entre ellos queremos eliminar algún contenido

eliminación de archivos de encabezado

-IOpenHarmony/osdepends/liteos/cmsis/1.0\
-IOpenHarmony/osdepends/liteos/cmsis/2.0\

Eliminar archivo C

OpenHarmony/osdepends/liteos/atiny_osdep.c\
OpenHarmony/osdepends/liteos/cmsis/1.0/cmsis_liteos1.c\
OpenHarmony/osdepends/liteos/cmsis/2.0/cmsis_liteos2.c\

eliminación de ensamblaje

OpenHarmony/arch/arm/arm-m/cortex-m4/gcc/los_hw_exc_gcc.S\
./startup_stm32f407xx.s

Voluntad

OpenHarmony/arch/arm/arm-m/cortex-m4/gcc/los_dispatch_gcc.S\

cambie a

OpenHarmony/arch/arm/arm-m/cortex-m4/gcc/los_dispatch_gcc.s\

Y cambie el sufijo del nombre del archivo a minúsculas, porque el Makefile generado crea el archivo en minúsculas

Luego copie el resto al archivo MAKE respectivamente

Los archivos C siguen C_SOURCES, las rutas de archivo de encabezado siguen C_INCLUDES y los archivos de ensamblaje siguen ASM_SOURCES

Una vez completada la copia, elimine la interrupción del temporizador del kernel y la interrupción anormal pendsv bajo stm32f4xx_it.c en el código generado por STM32CubeMX, porque LiteOS necesita hacerse cargo de estas dos interrupciones.

20220320231216

Luego compile el código, puede haber algunas advertencias, de la siguiente manera:

20220321125212

El error es que a la función los_printf le falta el archivo de encabezado stdio.h. Después de agregar el archivo de encabezado, no se reportará ningún error. Los resultados de la compilación son los siguientes:

20220320232230

Cuarto, agregue tareas de iluminación

Modifique el código de memoria en el archivo target_config.h, y modifique la SRAM a 112 K. Aunque la RAM del STM32F407 tiene 192 K, está dividida en tres secciones de memoria, no espacio de memoria continuo. Aquí usamos la sección RAM, comenzando desde 0x20000000 112K espacio

20220321150154

Ingrese a la función man.c y llame a la interfaz cmsis

#include "cmsis_os.h"

A continuación, defina el identificador de la tarea.

osThreadId_t led_taskHandle;
const osThreadAttr_t led_task_attributes = {
    
    
    .name = "led_task",
    .stack_size = 512 * 1,
    .priority = (osPriority_t)osPriorityNormal,
};

escribir entidad de tarea

void Led_Task(void *argument)
{
    
    
    while (1)
    {
    
    
        HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
        HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
        osDelay(1000);
    }
}

En la función principal, inicialice el sistema, maneje la tarea e inicie el kernel del sistema

    osKernelInitialize();
    led_taskHandle = osThreadNew(Led_Task, NULL, &led_task_attributes);
    osKernelStart();

Fenómeno posterior a la descarga

Por favor agregue la descripción de la imagen

Supongo que te gusta

Origin blog.csdn.net/qq_45396672/article/details/123637034
Recomendado
Clasificación