Directorio de artículos
[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:
Tire del código a local
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
Luego abra el proyecto e ingrese:
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:
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.
- 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
- Solo quedan los siguientes métodos de asignación de memoria en kernel -> base -> mem:
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.
Luego compile el código, puede haber algunas advertencias, de la siguiente manera:
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:
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
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