From dc7a0675fa162d1d01cdf2c87bfdfaf61573da5f Mon Sep 17 00:00:00 2001 From: zhangzheng <1358745329@qq.com> Date: Mon, 10 Mar 2025 22:45:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=9D=99=E6=80=81=E5=A0=86&s?= =?UTF-8?q?tm32f4=E7=BC=96=E8=AF=91=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 +- CMakeLists.txt | 2 - TODO.md | 5 + armv7_8.cmake | 18 +-- mkrtos_bootstrap/bsp/STM32F4/link.lds | 6 +- mkrtos_configs/ATSURFF437_defconfig | 2 +- mkrtos_configs/STM32F407VET6_defconfig | 93 ++---------- mkrtos_img/CMakeLists.txt | 3 +- mkrtos_knl/CMakeLists.txt | 2 +- mkrtos_knl/arch/cortex-m/CMakeLists.txt | 15 +- mkrtos_knl/arch/cortex-m/stm32f2/mk_sys.h | 2 +- .../arch/cortex-m/stm32f2/uart/stm32f2_uart.c | 11 +- .../arch/cortex-m/stm32f4/CMakeLists.txt | 5 +- .../arch/cortex-m/stm32f4/uart/stm32f4_uart.c | 6 +- mkrtos_knl/inc/lib/xprintf.h | 6 +- mkrtos_knl/knl/mm/mln_utils.h | 1 - mkrtos_script/build_at32f437.sh | 2 +- mkrtos_script/build_f4.sh | 7 +- mkrtos_script/run_m3.sh | 2 +- .../lib/letter-shell/demo/mkrtos/shell_test.c | 9 ++ .../libc_backend/src/armv7_8m/mm_backend.c | 19 +-- mkrtos_user/lib/mlibc/crt/start.S | 1 + mkrtos_user/lib/sys/inc/u_arch.h | 4 +- mkrtos_user/lib/sys/inc/u_syscall.h | 3 - mkrtos_user/lib/sys/src/u_factory.c | 7 + mkrtos_user/lib/sys/src/u_futex.c | 1 + mkrtos_user/lib/sys/src/u_ipc.c | 1 + mkrtos_user/lib/sys/src/u_irq_sender.c | 3 + mkrtos_user/lib/sys/src/u_log.c | 5 +- mkrtos_user/lib/sys/src/u_sema.c | 2 + mkrtos_user/lib/sys/src/u_share_mem.c | 3 +- mkrtos_user/lib/sys/src/u_sys.c | 6 +- mkrtos_user/lib/sys/src/u_task.c | 29 ++-- mkrtos_user/lib/sys/src/u_thread.c | 10 ++ mkrtos_user/lib/sys/src/u_vmam.c | 5 +- mkrtos_user/server/fs/appfs/heap_stack.c | 14 +- mkrtos_user/server/fs/cpiofs/heap_stack.c | 3 + mkrtos_user/server/fs/fatfs/heap_stack.c | 12 +- mkrtos_user/server/fs/lxext4/heap_stack.c | 1 + .../server/init/board/STM32F407VET6/init.cfg | 14 ++ mkrtos_user/server/init/src/heap_stack.c | 6 +- mkrtos_user/server/init/src/init.c | 6 +- mkrtos_user/server/net/src/heap_stack.c | 4 +- mkrtos_user/server/shell/src/heap_stack.c | 3 +- mkrtos_user/server/uvmm/src/heap_stack.c | 1 + .../user/app/ATSURFF437/3d_test/heap_stack.c | 1 + .../user/app/ATSURFF437/drv_test/heap_stack.c | 1 + .../app/ATSURFF437/nes_simulator/heap_stack.c | 1 + mkrtos_user/user/app/CMakeLists.txt | 4 +- .../app/STM32F103ZET6/app/src/heap_stack.c | 1 + .../app/binutils-2.33.1/binutils/addr2line.c | 1 + .../user/app/binutils-2.33.1/binutils/ar.c | 1 + .../user/app/binutils-2.33.1/binutils/bin2c.c | 1 + .../user/app/binutils-2.33.1/binutils/nm.c | 1 + .../app/binutils-2.33.1/binutils/objcopy.c | 1 + .../app/binutils-2.33.1/binutils/objdump.c | 1 + .../user/app/binutils-2.33.1/binutils/size.c | 1 + mkrtos_user/user/app/coremark/heap_stack.c | 2 + .../user/app/misc/dm9000_drv/src/heap_stack.c | 1 + .../user/app/misc/lcd_drv/src/heap_stack.c | 1 + .../user/app/misc/mr_drv/src/heap_stack.c | 1 + mkrtos_user/user/app/test/heap_stack.c | 2 + mkrtos_user/user/app/test2/heap_stack.c | 2 + .../tinycc-arm-thumb/armv7_8m/heap_stack.c | 3 +- mkrtos_user/user/app/vi/CMakeLists.txt | 4 - mkrtos_user/user/app/vi/heap_stack.c | 2 + .../user/drv/ATSURFF437/block/heap_stack.c | 1 + .../user/drv/ATSURFF437/display/heap_stack.c | 1 + .../user/drv/ATSURFF437/eth/heap_stack.c | 1 + .../user/drv/ATSURFF437/i2c/heap_stack.c | 1 + .../user/drv/ATSURFF437/pca9555/heap_stack.c | 1 + .../user/drv/ATSURFF437/pin/heap_stack.c | 1 + .../user/drv/ATSURFF437/snd/heap_stack.c | 1 + .../user/drv/STM32F205/block/heap_stack.c | 4 +- .../user/drv/STM32F407VET6/CMakeLists.txt | 3 + .../drv/STM32F407VET6/block/CMakeLists.txt | 76 ++++++++++ .../drv/STM32F407VET6/block/armv7_8m/link.lds | 124 ++++++++++++++++ .../user/drv/STM32F407VET6/block/flash.c | 63 +++++++++ .../user/drv/STM32F407VET6/block/flash.h | 9 ++ .../user/drv/STM32F407VET6/block/heap_stack.c | 19 +++ .../user/drv/STM32F407VET6/block/main.c | 133 ++++++++++++++++++ .../user/drv/common/ram_block/heap_stack.c | 2 + 82 files changed, 645 insertions(+), 191 deletions(-) delete mode 100644 mkrtos_user/lib/sys/inc/u_syscall.h create mode 100644 mkrtos_user/server/init/board/STM32F407VET6/init.cfg create mode 100644 mkrtos_user/user/drv/STM32F407VET6/CMakeLists.txt create mode 100644 mkrtos_user/user/drv/STM32F407VET6/block/CMakeLists.txt create mode 100644 mkrtos_user/user/drv/STM32F407VET6/block/armv7_8m/link.lds create mode 100644 mkrtos_user/user/drv/STM32F407VET6/block/flash.c create mode 100644 mkrtos_user/user/drv/STM32F407VET6/block/flash.h create mode 100644 mkrtos_user/user/drv/STM32F407VET6/block/heap_stack.c create mode 100644 mkrtos_user/user/drv/STM32F407VET6/block/main.c diff --git a/.vscode/settings.json b/.vscode/settings.json index 52f124557..cbd7b4e49 100755 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -208,7 +208,8 @@ "cons.h": "c", "*.def": "c", "poll.h": "c", - "u_rpc_1.h": "c" + "u_rpc_1.h": "c", + "mk_sys.h": "c" }, "cortex-debug.showRTOS": false, "cortex-debug.variableUseNaturalFormat": true, diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a27d6be0..b7761035d 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,5 +43,3 @@ if ((NOT DEFINED CONFIG_MMU) OR (CONFIG_MMU STREQUAL "n")) add_subdirectory(mkrtos_img) endif() add_subdirectory(mkrtos_user) - - diff --git a/TODO.md b/TODO.md index 501b400c7..0d72ccdef 100644 --- a/TODO.md +++ b/TODO.md @@ -21,6 +21,11 @@ * [x] TTY驱动支持 * [ ] proc支持 * [ ] 新进程中env支持 +* [ ] posix mq支持 +* [ ] posix sig支持 +* [ ] posix shm支持 +* [ ] posix sema支持 +* [ ] vfork + exec实现 ### mid prio * [x] net server support * [x] block driver diff --git a/armv7_8.cmake b/armv7_8.cmake index aafbac8cf..268ae3b6b 100644 --- a/armv7_8.cmake +++ b/armv7_8.cmake @@ -1,34 +1,34 @@ message("========use armv7_8.cmake") -set(CMAKE_C_FLAGS "-mcpu=${CONFIG_ARCH} -Ofast -g3 -mfloat-abi=${CONFIG_FLOAT_TYPE} -mthumb -DMKRTOS \ +set(CMAKE_C_FLAGS "-mcpu=${CONFIG_ARCH} -O0 -g3 -mfloat-abi=${CONFIG_FLOAT_TYPE} -mthumb -DMKRTOS \ -std=gnu11 -ffunction-sections -fdata-sections -fno-builtin -u=_printf_float \ -nostartfiles -nodefaultlibs -nostdlib -nostdinc \ -fno-stack-protector -Wl,--gc-section -D__ARM_ARCH_7M__ \ -include ${CMAKE_SOURCE_DIR}/build/autoconf.h \ " CACHE STRING "" FORCE) -set(CMAKE_CXX_FLAGS "-mcpu=${CONFIG_ARCH} -Ofast -g3 -mfloat-abi=${CONFIG_FLOAT_TYPE} -mthumb -DMKRTOS -std=c++11 \ +set(CMAKE_CXX_FLAGS "-mcpu=${CONFIG_ARCH} -O0 -g3 -mfloat-abi=${CONFIG_FLOAT_TYPE} -mthumb -DMKRTOS -std=c++11 \ -fmessage-length=0 -Xlinker --print-map -Wall -W -fno-stack-protector \ -u=_printf_float -D__ARM_ARCH_7M__ \ -ffunction-sections -fdata-sections -fno-builtin -nostartfiles -nodefaultlibs -nostdlib -nostdinc -Xlinker \ -include ${CMAKE_SOURCE_DIR}/build/autoconf.h \ " CACHE STRING "" FORCE) -set(CMAKE_ASM_FLAGS "-mcpu=${CONFIG_ARCH} -Ofast -g3 -mfloat-abi=${CONFIG_FLOAT_TYPE} -mthumb -DMKRTOS \ +set(CMAKE_ASM_FLAGS "-mcpu=${CONFIG_ARCH} -O0 -g3 -mfloat-abi=${CONFIG_FLOAT_TYPE} -mthumb -DMKRTOS \ -u=_printf_float -std=gnu11 -ffunction-sections -fdata-sections -fno-builtin \ -nostartfiles -nodefaultlibs -nostdlib -nostdinc -Xlinker -fno-stack-protector -D__ARM_ARCH_7M__ \ -include ${CMAKE_SOURCE_DIR}/build/autoconf.h \ " CACHE STRING "" FORCE) if (${CONFIG_FLOAT_TYPE} STREQUAL "hard") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DMKRTOS_USE_FPU ") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMKRTOS_USE_FPU ") - set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -DMKRTOS_USE_FPU ") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DMKRTOS_USE_FPU -mfpu=fpv4-sp-d16 ") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMKRTOS_USE_FPU -mfpu=fpv4-sp-d16 ") + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -DMKRTOS_USE_FPU -mfpu=fpv4-sp-d16 ") endif() if (${CONFIG_FLOAT_TYPE} STREQUAL "softfp") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ") - set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DMKRTOS_USE_FPU -mfpu=fpv4-sp-d16 ") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMKRTOS_USE_FPU -mfpu=fpv4-sp-d16 ") + set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -DMKRTOS_USE_FPU -mfpu=fpv4-sp-d16 ") endif() diff --git a/mkrtos_bootstrap/bsp/STM32F4/link.lds b/mkrtos_bootstrap/bsp/STM32F4/link.lds index bb21f6f25..ece2d1f57 100755 --- a/mkrtos_bootstrap/bsp/STM32F4/link.lds +++ b/mkrtos_bootstrap/bsp/STM32F4/link.lds @@ -1,11 +1,11 @@ ENTRY(Reset_Handler) -_estack = 0x20000000 + 0x20000; +_estack = 0x20000000 + 0x2000000; _Min_Heap_Size = 0; _Min_Stack_Size = 0x300; MEMORY { -RAM (xrw) : ORIGIN = 0x20000000 + 0x20000 - 0x4000, LENGTH = 0x4000 - 0x300 -FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 0x2000 +RAM (xrw) : ORIGIN = 0x20000000 + 0x2000000 - 0x4000, LENGTH = 0x4000 - 0x300 +FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 0x3000 } SECTIONS { diff --git a/mkrtos_configs/ATSURFF437_defconfig b/mkrtos_configs/ATSURFF437_defconfig index 969475464..f267f8103 100644 --- a/mkrtos_configs/ATSURFF437_defconfig +++ b/mkrtos_configs/ATSURFF437_defconfig @@ -40,7 +40,7 @@ CONFIG_SIG_THREAD_PRIO=3 CONFIG_CPU_TYPE="at32f437" CONFIG_ARCH="cortex-m4" -CONFIG_FLOAT_TYPE="soft" +CONFIG_FLOAT_TYPE="hard" CONFIG_BOARD_NAME="ATSURFF437" CONFIG_BUDDY_SLAB=n CONFIG_SMP=n diff --git a/mkrtos_configs/STM32F407VET6_defconfig b/mkrtos_configs/STM32F407VET6_defconfig index bf92ae70f..a25ea4869 100644 --- a/mkrtos_configs/STM32F407VET6_defconfig +++ b/mkrtos_configs/STM32F407VET6_defconfig @@ -6,10 +6,10 @@ CONFIG_KNL_INFO=y CONFIG_SYS_TEXT_ADDR=0x8000000 CONFIG_SYS_TEXT_SIZE=0x800000 CONFIG_SYS_DATA_ADDR=0x20000000 -CONFIG_SYS_DATA_SIZE=0x20000 -CONFIG_BOOTSTRAP_TEXT_SIZE=0x2000 +CONFIG_SYS_DATA_SIZE=0x2000000 +CONFIG_BOOTSTRAP_TEXT_SIZE=0x3000 CONFIG_DTBO_TEXT_SIZE=0x1000 -CONFIG_KNL_TEXT_SIZE=0x30000 +CONFIG_KNL_TEXT_SIZE=0x10000 CONFIG_MPU=y CONFIG_FT_ADDR_NR=16 @@ -37,98 +37,27 @@ CONFIG_SIG_THREAD_STACK_SIZE=512 CONFIG_SIG_THREAD_PRIO=3 # end of Sys util config -# -# DFS: device virtual file system -# -CONFIG_RT_USING_DFS=y -CONFIG_DFS_USING_POSIX=y -CONFIG_DFS_USING_WORKDIR=y -# CONFIG_RT_USING_DFS_MNTTABLE is not set -CONFIG_DFS_FD_MAX=16 -CONFIG_RT_USING_DFS_V1=y -# CONFIG_RT_USING_DFS_V2 is not set -CONFIG_DFS_FILESYSTEMS_MAX=4 -CONFIG_DFS_FILESYSTEM_TYPES_MAX=4 -# CONFIG_RT_USING_DFS_ELMFAT is not set -CONFIG_RT_USING_DFS_DEVFS=y -# CONFIG_RT_USING_DFS_ROMFS is not set -# CONFIG_RT_USING_DFS_CROMFS is not set -# CONFIG_RT_USING_DFS_RAMFS is not set -# CONFIG_RT_USING_DFS_TMPFS is not set -# CONFIG_RT_USING_DFS_MQUEUE is not set -# end of DFS: device virtual file system - -# -# Device Drivers -# -# CONFIG_RT_USING_DM is not set -CONFIG_RT_USING_DEVICE_IPC=y -CONFIG_RT_UNAMED_PIPE_NUMBER=64 -# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set -CONFIG_RT_USING_SERIAL=y -CONFIG_RT_USING_SERIAL_V1=y -# CONFIG_RT_USING_SERIAL_V2 is not set -CONFIG_RT_SERIAL_USING_DMA=y -CONFIG_RT_SERIAL_RB_BUFSZ=64 -# CONFIG_RT_USING_CAN is not set -# CONFIG_RT_USING_HWTIMER is not set -# CONFIG_RT_USING_CPUTIME is not set -# CONFIG_RT_USING_I2C is not set -# CONFIG_RT_USING_PHY is not set -CONFIG_RT_USING_PIN=y -# CONFIG_RT_USING_ADC is not set -# CONFIG_RT_USING_DAC is not set -# CONFIG_RT_USING_NULL is not set -# CONFIG_RT_USING_ZERO is not set -# CONFIG_RT_USING_RANDOM is not set -# CONFIG_RT_USING_PWM is not set -# CONFIG_RT_USING_MTD_NOR is not set -# CONFIG_RT_USING_MTD_NAND is not set -# CONFIG_RT_USING_PM is not set -# CONFIG_RT_USING_RTC is not set -# CONFIG_RT_USING_SDIO is not set -# CONFIG_RT_USING_SPI is not set -# CONFIG_RT_USING_WDT is not set -# CONFIG_RT_USING_AUDIO is not set -# CONFIG_RT_USING_SENSOR is not set -# CONFIG_RT_USING_TOUCH is not set -# CONFIG_RT_USING_LCD is not set -# CONFIG_RT_USING_HWCRYPTO is not set -# CONFIG_RT_USING_PULSE_ENCODER is not set -# CONFIG_RT_USING_INPUT_CAPTURE is not set -# CONFIG_RT_USING_DEV_BUS is not set -# CONFIG_RT_USING_WIFI is not set -# CONFIG_RT_USING_VIRTIO is not set - -# -# Using USB -# -# CONFIG_RT_USING_USB_HOST is not set -# CONFIG_RT_USING_USB_DEVICE is not set -# end of Using USB -# end of Device Drivers - CONFIG_CPU_TYPE="stm32f4" -CONFIG_RTT_DIR="./" CONFIG_ARCH="cortex-m4" -CONFIG_FLOAT_TYPE="hard" +CONFIG_FLOAT_TYPE="soft" CONFIG_BOARD_NAME="STM32F407VET6" CONFIG_BUDDY_SLAB=n CONFIG_SMP=n CONFIG_CPU=1 -CONFIG_THREAD_BLOCK_SIZE=0x400 +CONFIG_THREAD_BLOCK_SIZE=0x800 CONFIG_PAGE_SHIFT=9 CONFIG_MMU=n CONFIG_KNL_TEST=n CONFIG_ELF_LAUNCH=n -CONFIG_THREAD_MSG_BUG_LEN=128 -CONFIG_THREAD_IPC_MSG_LEN=24 +CONFIG_THREAD_MSG_BUG_LEN=256 +CONFIG_THREAD_IPC_MSG_LEN=56 CONFIG_THREAD_MAP_BUF_LEN=4 CONFIG_THREAD_USER_BUF_LEN=4 CONFIG_MSG_BUF_VADDR=0xE0000000 CONFIG_BOOT_FS_VADDR=0xE0001000 -CONFIG_MPU_PAGE_FAULT_SUPPORT=n -CONFIG_MPU_PAGE_NUM=64 +CONFIG_MPU_PAGE_FAULT_SUPPORT=y CONFIG_MPU_PAGE_FAULT_REGIONS_NUM=2 CONFIG_BOOT_INFO_SUPPORT=y -CONFIG_DTBO_SUPPORT=y \ No newline at end of file +CONFIG_DTBO_SUPPORT=y +CONFIG_CPIO_SUPPORT=n +CONFIG_APP_PARAMS_NR=16 \ No newline at end of file diff --git a/mkrtos_img/CMakeLists.txt b/mkrtos_img/CMakeLists.txt index a2249112f..eb62a614d 100755 --- a/mkrtos_img/CMakeLists.txt +++ b/mkrtos_img/CMakeLists.txt @@ -66,4 +66,5 @@ add_dependencies(mkrtos_img_dump # eth_dump # nes_dump # net_dump -) \ No newline at end of file +) + diff --git a/mkrtos_knl/CMakeLists.txt b/mkrtos_knl/CMakeLists.txt index 9d622fa56..a360aecc7 100755 --- a/mkrtos_knl/CMakeLists.txt +++ b/mkrtos_knl/CMakeLists.txt @@ -33,9 +33,9 @@ target_link_libraries( mkrtos.elf PUBLIC --whole-archive - knl arch lib + knl test --no-whole-archive ) diff --git a/mkrtos_knl/arch/cortex-m/CMakeLists.txt b/mkrtos_knl/arch/cortex-m/CMakeLists.txt index 9a816c66b..539aa17ff 100755 --- a/mkrtos_knl/arch/cortex-m/CMakeLists.txt +++ b/mkrtos_knl/arch/cortex-m/CMakeLists.txt @@ -1,18 +1,7 @@ cmake_minimum_required(VERSION 3.13) -file(GLOB deps - ../cortex-m/arch.c - ../cortex-m/atomic.S - ../cortex-m/atomics.c - ../cortex-m/core_it.c - ../cortex-m/mm_space.c - ../cortex-m/sche.S - ../cortex-m/sched_arch.c - ../cortex-m/syscall.S - ../cortex-m/systick.c - ../cortex-m/thread_armv7m.c -) -# list(REMOVE_ITEM deps ${CMAKE_SOURCE_DIR}/mkrtos_knl/arch/${CONFIG_ARCH}/link.lds.S) +file(GLOB deps *.c *.S) +list(REMOVE_ITEM deps ${CMAKE_SOURCE_DIR}/mkrtos_knl/arch/${CONFIG_ARCH}/link.lds.S) add_library(arch STATIC ${deps}) diff --git a/mkrtos_knl/arch/cortex-m/stm32f2/mk_sys.h b/mkrtos_knl/arch/cortex-m/stm32f2/mk_sys.h index b46bfb903..26b98f63a 100755 --- a/mkrtos_knl/arch/cortex-m/stm32f2/mk_sys.h +++ b/mkrtos_knl/arch/cortex-m/stm32f2/mk_sys.h @@ -3,7 +3,7 @@ #include #include - +#include //位带操作,实现51类似的GPIO控制功能 //具体实现思想,参考<>第五章(87页~92页). //IO口操作宏定义 diff --git a/mkrtos_knl/arch/cortex-m/stm32f2/uart/stm32f2_uart.c b/mkrtos_knl/arch/cortex-m/stm32f2/uart/stm32f2_uart.c index cfe157143..c6df2e5e4 100755 --- a/mkrtos_knl/arch/cortex-m/stm32f2/uart/stm32f2_uart.c +++ b/mkrtos_knl/arch/cortex-m/stm32f2/uart/stm32f2_uart.c @@ -135,11 +135,11 @@ uart_t *uart_get_global(void) #define QUEUE_LEN 129 static queue_t queue; static uint8_t queue_data[QUEUE_LEN]; -static uint32_t last_tick; #if 0 +static uint32_t last_tick; void uart_check_timeover(irq_entry_t *irq) { - if (last_tick != 0 && (sys_tick_cnt_get() - last_tick > 5)) + if (last_tick != 0 && (sys_tick_cnt_get() - last_tick > 10)) { if (irq->irq->wait_thread && thread_get_status(irq->irq->wait_thread) == THREAD_SUSPEND) { @@ -155,12 +155,15 @@ void uart_tigger(irq_entry_t *irq) { // 清除中断标志位 USART_ClearITPendingBit(USART1, USART_IT_RXNE); - q_enqueue(&queue, USART_ReceiveData(USART1)); + if (q_enqueue(&queue, USART_ReceiveData(USART1)) < 0) + { + + } if (irq->irq->wait_thread && thread_get_status(irq->irq->wait_thread) == THREAD_SUSPEND) { thread_ready_remote(irq->irq->wait_thread, TRUE); } - last_tick = sys_tick_cnt_get(); + // last_tick = sys_tick_cnt_get(); } // if (USART_GetITStatus(USART1, USART_IT_IDLE) != RESET) // { diff --git a/mkrtos_knl/arch/cortex-m/stm32f4/CMakeLists.txt b/mkrtos_knl/arch/cortex-m/stm32f4/CMakeLists.txt index 3175af880..b674161b3 100755 --- a/mkrtos_knl/arch/cortex-m/stm32f4/CMakeLists.txt +++ b/mkrtos_knl/arch/cortex-m/stm32f4/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.13) -file(GLOB deps **/*.s *.s **/*.C *.c) +file(GLOB deps **/*.s *.s **/*.C *.c uart/*.c) file(GLOB bsp_src ${CMAKE_SOURCE_DIR}/mkrtos_bsp/STM32/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Libraries/STM32F4xx_StdPeriph_Driver/src/*.c) list(APPEND deps ${bsp_src}) @@ -15,9 +15,10 @@ target_include_directories( PUBLIC ${CMAKE_SOURCE_DIR}/mkrtos_knl/arch/${CONFIG_ARCH}/${CONFIG_CPU_TYPE} ${CMAKE_SOURCE_DIR}/mkrtos_knl/arch/${CONFIG_ARCH}/ - ${CMAKE_SOURCE_DIR}/mkrtos_knl/arch/inc ${CMAKE_SOURCE_DIR}/mkrtos_knl/inc/lib + ${CMAKE_SOURCE_DIR}/mkrtos_knl/inc/drv ${CMAKE_SOURCE_DIR}/mkrtos_knl/inc/knl + ${CMAKE_SOURCE_DIR}/mkrtos_knl/arch/inc ${CMAKE_SOURCE_DIR}/mkrtos_bsp/STM32/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Libraries/CMSIS/Device/ST/STM32F4xx/Include ${CMAKE_SOURCE_DIR}/mkrtos_bsp/STM32/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Libraries/STM32F4xx_StdPeriph_Driver/inc ${CMAKE_SOURCE_DIR}/mkrtos_bsp/STM32/STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Libraries/CMSIS/Include diff --git a/mkrtos_knl/arch/cortex-m/stm32f4/uart/stm32f4_uart.c b/mkrtos_knl/arch/cortex-m/stm32f4/uart/stm32f4_uart.c index 03b66b7b9..b26c2506b 100755 --- a/mkrtos_knl/arch/cortex-m/stm32f4/uart/stm32f4_uart.c +++ b/mkrtos_knl/arch/cortex-m/stm32f4/uart/stm32f4_uart.c @@ -138,14 +138,15 @@ void uart_tigger(irq_entry_t *irq) { if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { - // 清除中断标志位 - USART_ClearITPendingBit(USART1, USART_IT_RXNE); + q_enqueue(&queue, USART_ReceiveData(USART1)); if (irq->irq->wait_thread && thread_get_status(irq->irq->wait_thread) == THREAD_SUSPEND) { thread_ready_remote(irq->irq->wait_thread, TRUE); } + // 清除中断标志位 + USART_ClearITPendingBit(USART1, USART_IT_RXNE); } } @@ -191,6 +192,7 @@ void uart_init(void) NVIC_Init(&USART1_NVIC_InitStru); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); + // USART_ITConfig(USART1, USART_IT_IDLE, ENABLE); USART_Cmd(USART1, ENABLE); } diff --git a/mkrtos_knl/inc/lib/xprintf.h b/mkrtos_knl/inc/lib/xprintf.h index 74d2d902c..7d9f0ce15 100755 --- a/mkrtos_knl/inc/lib/xprintf.h +++ b/mkrtos_knl/inc/lib/xprintf.h @@ -11,13 +11,13 @@ extern "C" #endif #include "stdarg.h" #define XF_USE_OUTPUT 1 /* 1: Enable output functions */ -#define XF_CRLF 1 /* 1: Convert \n ==> \r\n in the output char */ -#define XF_USE_DUMP 1 /* 1: Enable put_dump function */ +#define XF_CRLF 0 /* 1: Convert \n ==> \r\n in the output char */ +#define XF_USE_DUMP 0 /* 1: Enable put_dump function */ #define XF_USE_LLI 0 /* 1: Enable long long integer in size prefix ll */ #define XF_USE_FP 0 /* 1: Enable support for floating point in type e and f */ #define XF_DPC '.' /* Decimal separator for floating point */ #define XF_USE_INPUT 0 /* 1: Enable input functions */ -#define XF_INPUT_ECHO 1 /* 1: Echo back input chars in xgets function */ +#define XF_INPUT_ECHO 0 /* 1: Echo back input chars in xgets function */ #if defined(__GNUC__) && __GNUC__ >= 10 #pragma GCC diagnostic ignored "-Wcast-function-type" diff --git a/mkrtos_knl/knl/mm/mln_utils.h b/mkrtos_knl/knl/mm/mln_utils.h index 40ff1a18b..82f377c15 100644 --- a/mkrtos_knl/knl/mm/mln_utils.h +++ b/mkrtos_knl/knl/mm/mln_utils.h @@ -5,7 +5,6 @@ #ifndef __MLN_DEFS_H #define __MLN_DEFS_H -// #include #include "mln_func.h" #ifdef __DEBUG__ diff --git a/mkrtos_script/build_at32f437.sh b/mkrtos_script/build_at32f437.sh index 10656b19f..d8cb5a7a2 100755 --- a/mkrtos_script/build_at32f437.sh +++ b/mkrtos_script/build_at32f437.sh @@ -9,7 +9,7 @@ # mac compile export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/ -export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/softfp +export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard # windows compile # export TOOLCHAIN=/d/GNUArmEmbeddedToolchain/102021.10/bin/ diff --git a/mkrtos_script/build_f4.sh b/mkrtos_script/build_f4.sh index e980d1f2c..7c658e804 100755 --- a/mkrtos_script/build_f4.sh +++ b/mkrtos_script/build_f4.sh @@ -3,8 +3,11 @@ # export TOOLCHAIN=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/bin/ # export TOOLCHAIN_LIB=/home/zhangzheng/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu -export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/ -export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard +export TOOLCHAIN=/home/zhangzheng/toolchain/gcc-arm-10.3-2021.07-x86_64-arm-none-eabi/bin/ +export TOOLCHAIN_LIB=/home/zhangzheng/toolchain/gcc-arm-10.3-2021.07-x86_64-arm-none-eabi/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp + +# export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/ +# export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7e-m+fp/hard # export TOOLCHAIN=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/ # export TOOLCHAIN_LIB=/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp diff --git a/mkrtos_script/run_m3.sh b/mkrtos_script/run_m3.sh index 90dbf5058..7cc988f51 100755 --- a/mkrtos_script/run_m3.sh +++ b/mkrtos_script/run_m3.sh @@ -10,5 +10,5 @@ fi qemu-system-arm -machine\ $1 -cpu cortex-m3 \ - -nographic -m size=2 \ + -nographic -m size=32 \ -kernel $PWD/build/output/kernel.img diff --git a/mkrtos_user/lib/letter-shell/demo/mkrtos/shell_test.c b/mkrtos_user/lib/letter-shell/demo/mkrtos/shell_test.c index 5db0f829e..dae9315bf 100644 --- a/mkrtos_user/lib/letter-shell/demo/mkrtos/shell_test.c +++ b/mkrtos_user/lib/letter-shell/demo/mkrtos/shell_test.c @@ -37,4 +37,13 @@ int shell_test_sig(int argc, char *argv[]) return ret; } SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), test_sig, shell_test_sig, shell_test_sig command); + +int shell_float_test(int argc, char *argv[]) +{ + float a = 1.1, b = 1.2; + + printf("%f\n", a + b); + return 0; +} +SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), ftest, shell_float_test, ftest command); #endif diff --git a/mkrtos_user/lib/libc_backend/src/armv7_8m/mm_backend.c b/mkrtos_user/lib/libc_backend/src/armv7_8m/mm_backend.c index 4f3829bcf..14ccfe13b 100644 --- a/mkrtos_user/lib/libc_backend/src/armv7_8m/mm_backend.c +++ b/mkrtos_user/lib/libc_backend/src/armv7_8m/mm_backend.c @@ -14,11 +14,10 @@ static int lock_is_init; static u_mutex_t lock; extern void *app_start_addr; -#ifdef CONFIG_EX_RAM_SIZE -static umword_t mm_bitmap[ROUND(CONFIG_EX_RAM_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; -#else +#if 0 static umword_t mm_bitmap[ROUND(CONFIG_SYS_DATA_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; #endif +extern umword_t _____mm_bitmap_____[]; static void *mm_page_alloc(int page_nr) { int cnt = 0; @@ -32,10 +31,12 @@ static void *mm_page_alloc(int page_nr) { return NULL; } - if (max_page_nr > sizeof(mm_bitmap) * WORD_BITS) + #if 0 + if (max_page_nr > sizeof(_____mm_bitmap_____) * WORD_BITS) { cons_write_str("mm bitmap is to small.\n"); } + #endif // printf("heap is 0x%x, max page nr is %d.\n", heap_addr, max_page_nr); if (!lock_is_init) { @@ -47,17 +48,17 @@ static void *mm_page_alloc(int page_nr) cons_write_str("mutex_hd alloc failed.\n"); assert(0); } - u_mutex_init(&lock, handler_alloc()); + u_mutex_init(&lock, mutex_hd); lock_is_init = 1; } u_mutex_lock(&lock, 0, NULL); for (umword_t i = 0; i < ROUND_UP(max_page_nr, WORD_BITS); i++) { - if (mm_bitmap[i] != (umword_t)(-1)) + if (_____mm_bitmap_____[i] != (umword_t)(-1)) { for (int j = 0; j < WORD_BITS; j++) { - if (MK_GET_BIT(mm_bitmap[i], j) == 0) + if (MK_GET_BIT(_____mm_bitmap_____[i], j) == 0) { // 找到空闲的 if (find_inx == -1) @@ -75,7 +76,7 @@ static void *mm_page_alloc(int page_nr) for (int m = find_inx; m < find_inx + cnt; m++) { - MK_SET_BIT(mm_bitmap[m / WORD_BITS], m % WORD_BITS); + MK_SET_BIT(_____mm_bitmap_____[m / WORD_BITS], m % WORD_BITS); } u_mutex_unlock(&lock); // printf("st_inx:%d, cnt:%d\n", find_inx, cnt); @@ -109,7 +110,7 @@ static int mm_page_free(int st, int nr) u_mutex_lock(&lock, 0, NULL); for (int i = st; (i < st + nr) && (i < max_page_nr); i++) { - MK_CLR_BIT(mm_bitmap[i / WORD_BITS], i % WORD_BITS); + MK_CLR_BIT(_____mm_bitmap_____[i / WORD_BITS], i % WORD_BITS); } u_mutex_unlock(&lock); return 0; diff --git a/mkrtos_user/lib/mlibc/crt/start.S b/mkrtos_user/lib/mlibc/crt/start.S index 762a165d3..32ded2461 100644 --- a/mkrtos_user/lib/mlibc/crt/start.S +++ b/mkrtos_user/lib/mlibc/crt/start.S @@ -2,6 +2,7 @@ .section .first .globl reloc + .globl heap_size .align 2 .globl _start_ diff --git a/mkrtos_user/lib/sys/inc/u_arch.h b/mkrtos_user/lib/sys/inc/u_arch.h index b619c103b..cc0fcd9cf 100644 --- a/mkrtos_user/lib/sys/inc/u_arch.h +++ b/mkrtos_user/lib/sys/inc/u_arch.h @@ -5,15 +5,17 @@ #ifndef PAGE_SIZE #define PAGE_SIZE (1UL << CONFIG_PAGE_SHIFT) #endif + #define MK_PAGE_SIZE (PAGE_SIZE) #define WORD_BYTES (sizeof(void *)) #define WORD_BITS (WORD_BYTES * 8) - static inline uint16_t swap_u16(uint16_t data) { return (uint16_t)((data >> (uint16_t)8) & (uint16_t)0xffUL) | (uint16_t)((uint16_t)(data & (uint16_t)0xff) << (uint16_t)8); } +#define MK_SYSCALL __attribute__((optimize(1))) + int mk_syscall(unsigned long nr, ...); diff --git a/mkrtos_user/lib/sys/inc/u_syscall.h b/mkrtos_user/lib/sys/inc/u_syscall.h deleted file mode 100644 index b0ff143a8..000000000 --- a/mkrtos_user/lib/sys/inc/u_syscall.h +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once - -int syscall(int nr, ...); diff --git a/mkrtos_user/lib/sys/src/u_factory.c b/mkrtos_user/lib/sys/src/u_factory.c index 42ee5a4d0..875e41574 100644 --- a/mkrtos_user/lib/sys/src/u_factory.c +++ b/mkrtos_user/lib/sys/src/u_factory.c @@ -7,6 +7,7 @@ enum { FACTORY_CREATE_KOBJ }; +MK_SYSCALL msg_tag_t factory_create_irq_sender(obj_handler_t obj, vpage_t vpage) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -22,6 +23,7 @@ msg_tag_t factory_create_irq_sender(obj_handler_t obj, vpage_t vpage) return tag; } +MK_SYSCALL msg_tag_t factory_create_thread(obj_handler_t obj, vpage_t vpage) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -37,6 +39,7 @@ msg_tag_t factory_create_thread(obj_handler_t obj, vpage_t vpage) return tag; } +MK_SYSCALL msg_tag_t factory_create_thread_vcpu(obj_handler_t obj, vpage_t vpage) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -52,6 +55,7 @@ msg_tag_t factory_create_thread_vcpu(obj_handler_t obj, vpage_t vpage) return tag; } +MK_SYSCALL msg_tag_t factory_create_task(obj_handler_t obj, vpage_t vpage) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -67,6 +71,7 @@ msg_tag_t factory_create_task(obj_handler_t obj, vpage_t vpage) return tag; } +MK_SYSCALL msg_tag_t factory_create_ipc(obj_handler_t obj, vpage_t vpage) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -86,6 +91,7 @@ msg_tag_t factory_create_ipc(obj_handler_t obj, vpage_t vpage) return tag; } +MK_SYSCALL msg_tag_t facotry_create_share_mem(obj_handler_t obj, vpage_t vpage, share_mem_type_t mem_type, umword_t size) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -105,6 +111,7 @@ msg_tag_t facotry_create_share_mem(obj_handler_t obj, vpage_t vpage, share_mem_t return tag; } +MK_SYSCALL msg_tag_t facotry_create_sema(obj_handler_t obj, vpage_t vpage, int cnt, int max) { register volatile umword_t r0 asm(ARCH_REG_0); diff --git a/mkrtos_user/lib/sys/src/u_futex.c b/mkrtos_user/lib/sys/src/u_futex.c index bdd6433af..037d49ced 100644 --- a/mkrtos_user/lib/sys/src/u_futex.c +++ b/mkrtos_user/lib/sys/src/u_futex.c @@ -9,6 +9,7 @@ enum futex_op { FUTEX_CTRL, }; +MK_SYSCALL msg_tag_t futex_ctrl(obj_handler_t obj, uint32_t *uaddr, int futex_op, uint32_t val, umword_t timeout, uint32_t uaddr2, uint32_t val3, int tid) { diff --git a/mkrtos_user/lib/sys/src/u_ipc.c b/mkrtos_user/lib/sys/src/u_ipc.c index 8432bb965..f4801e865 100644 --- a/mkrtos_user/lib/sys/src/u_ipc.c +++ b/mkrtos_user/lib/sys/src/u_ipc.c @@ -9,6 +9,7 @@ enum ipc_op IPC_BIND, IPC_DO = 6, }; +MK_SYSCALL msg_tag_t ipc_bind(obj_handler_t obj, obj_handler_t tk_obj, umword_t user_obj) { register volatile umword_t r0 asm(ARCH_REG_0); diff --git a/mkrtos_user/lib/sys/src/u_irq_sender.c b/mkrtos_user/lib/sys/src/u_irq_sender.c index 9c6265ca2..a003df592 100644 --- a/mkrtos_user/lib/sys/src/u_irq_sender.c +++ b/mkrtos_user/lib/sys/src/u_irq_sender.c @@ -20,6 +20,7 @@ enum irq_sender_op WAIT_IRQ, //!< 等待中断触发 ACK_IRQ, //!< 中断确认 }; +MK_SYSCALL msg_tag_t uirq_bind(obj_handler_t obj_inx, umword_t irq_no, u_irq_prio_t prio_sub_pre) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -39,6 +40,7 @@ msg_tag_t uirq_bind(obj_handler_t obj_inx, umword_t irq_no, u_irq_prio_t prio_su return tag; } +MK_SYSCALL msg_tag_t uirq_wait(obj_handler_t obj_inx, int flags) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -58,6 +60,7 @@ msg_tag_t uirq_wait(obj_handler_t obj_inx, int flags) return tag; } +MK_SYSCALL msg_tag_t uirq_ack(obj_handler_t obj_inx, umword_t irq_no) { register volatile umword_t r0 asm(ARCH_REG_0); diff --git a/mkrtos_user/lib/sys/src/u_log.c b/mkrtos_user/lib/sys/src/u_log.c index aebda1cc4..195218c00 100644 --- a/mkrtos_user/lib/sys/src/u_log.c +++ b/mkrtos_user/lib/sys/src/u_log.c @@ -12,6 +12,7 @@ enum log_op READ_DATA, SET_FLAGS }; +MK_SYSCALL static msg_tag_t ulog_read_bytes_raw(obj_handler_t obj_inx, umword_t data[5], int len) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -42,6 +43,7 @@ static msg_tag_t ulog_read_bytes_raw(obj_handler_t obj_inx, umword_t data[5], in return tag; } +MK_SYSCALL int ulog_read_bytes(obj_handler_t obj_inx, uint8_t *data, umword_t len) { umword_t buffer[5]; @@ -57,6 +59,7 @@ int ulog_read_bytes(obj_handler_t obj_inx, uint8_t *data, umword_t len) } return msg_tag_get_val(tag); } +MK_SYSCALL void ulog_write_bytes(obj_handler_t obj_inx, const uint8_t *data, umword_t len) { uint8_t write_buf[ULOG_RW_MAX_BYTES] = {0}; @@ -90,7 +93,7 @@ void ulog_write_bytes(obj_handler_t obj_inx, const uint8_t *data, umword_t len) } } } - +MK_SYSCALL void ulog_write_str(obj_handler_t obj_inx, const char *str) { size_t i; diff --git a/mkrtos_user/lib/sys/src/u_sema.c b/mkrtos_user/lib/sys/src/u_sema.c index 316d396ac..d6869deb2 100644 --- a/mkrtos_user/lib/sys/src/u_sema.c +++ b/mkrtos_user/lib/sys/src/u_sema.c @@ -7,6 +7,7 @@ enum SEMA_OP SEMA_UP, SEMA_DOWN, }; +MK_SYSCALL msg_tag_t u_sema_up(obj_handler_t obj) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -22,6 +23,7 @@ msg_tag_t u_sema_up(obj_handler_t obj) return tag; } +MK_SYSCALL msg_tag_t u_sema_down(obj_handler_t obj, umword_t timeout, umword_t *remain_times) { register volatile umword_t r0 asm(ARCH_REG_0); diff --git a/mkrtos_user/lib/sys/src/u_share_mem.c b/mkrtos_user/lib/sys/src/u_share_mem.c index d63f14060..70b4dab87 100644 --- a/mkrtos_user/lib/sys/src/u_share_mem.c +++ b/mkrtos_user/lib/sys/src/u_share_mem.c @@ -8,7 +8,7 @@ enum share_mem_op SHARE_MEM_MAP, SHARE_MEM_UNMAP, }; - +MK_SYSCALL msg_tag_t share_mem_map(obj_handler_t obj, vma_addr_t vaddr, umword_t *addr, umword_t *size) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -35,6 +35,7 @@ msg_tag_t share_mem_map(obj_handler_t obj, vma_addr_t vaddr, umword_t *addr, umw } return msg_tag_init(r0); } +MK_SYSCALL msg_tag_t share_mem_unmap(obj_handler_t obj) { register volatile umword_t r0 asm(ARCH_REG_0); diff --git a/mkrtos_user/lib/sys/src/u_sys.c b/mkrtos_user/lib/sys/src/u_sys.c index 1f0c46c7d..b470a937c 100644 --- a/mkrtos_user/lib/sys/src/u_sys.c +++ b/mkrtos_user/lib/sys/src/u_sys.c @@ -15,7 +15,7 @@ enum sys_op MEM_INFO, DIS_IRQ, }; - +MK_SYSCALL msg_tag_t sys_read_info(obj_handler_t obj, sys_info_t *info, umword_t flags) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -43,6 +43,7 @@ msg_tag_t sys_read_info(obj_handler_t obj, sys_info_t *info, umword_t flags) return msg_tag_init(r0); } +MK_SYSCALL msg_tag_t sys_read_info2(obj_handler_t obj, sys_info2_t *info, umword_t flags) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -69,6 +70,7 @@ msg_tag_t sys_read_info2(obj_handler_t obj, sys_info2_t *info, umword_t flags) return msg_tag_init(r0); } +MK_SYSCALL msg_tag_t sys_reboot(obj_handler_t obj) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -90,6 +92,7 @@ msg_tag_t sys_reboot(obj_handler_t obj) return tag; } +MK_SYSCALL msg_tag_t sys_mem_info(obj_handler_t obj, umword_t *total, umword_t *free) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -120,6 +123,7 @@ msg_tag_t sys_mem_info(obj_handler_t obj, umword_t *total, umword_t *free) return tag; } +MK_SYSCALL msg_tag_t sys_dis_info(obj_handler_t obj, umword_t irq_inx) { register volatile umword_t r0 asm(ARCH_REG_0); diff --git a/mkrtos_user/lib/sys/src/u_task.c b/mkrtos_user/lib/sys/src/u_task.c index 47d2128b9..7bfa95d0f 100644 --- a/mkrtos_user/lib/sys/src/u_task.c +++ b/mkrtos_user/lib/sys/src/u_task.c @@ -18,7 +18,7 @@ enum task_op_code TASK_COM_UNLOCK, TASK_COM_LOCK, }; - +MK_SYSCALL msg_tag_t task_set_obj_name(obj_handler_t dst_task, obj_handler_t obj, const char *name) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -37,7 +37,9 @@ msg_tag_t task_set_obj_name(obj_handler_t dst_task, obj_handler_t obj, const cha : : ARCH_REG_0); msg_tag_t tag = msg_tag_init(r0); + return tag; } +MK_SYSCALL msg_tag_t task_set_pid(obj_handler_t dst_task, umword_t pid) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -57,6 +59,7 @@ msg_tag_t task_set_pid(obj_handler_t dst_task, umword_t pid) return tag; } +MK_SYSCALL msg_tag_t task_get_pid(obj_handler_t dst_task, umword_t *pid) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -80,6 +83,7 @@ msg_tag_t task_get_pid(obj_handler_t dst_task, umword_t *pid) return msg_tag_init(r0); } +MK_SYSCALL msg_tag_t task_obj_valid(obj_handler_t dst_task, obj_handler_t obj_inx, int *obj_type) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -95,7 +99,7 @@ msg_tag_t task_obj_valid(obj_handler_t dst_task, obj_handler_t obj_inx, int *obj asm __volatile__("" : : - : ARCH_REG_0); + : ARCH_REG_0, ARCH_REG_1); if (obj_type) { *obj_type = r1; @@ -103,7 +107,7 @@ msg_tag_t task_obj_valid(obj_handler_t dst_task, obj_handler_t obj_inx, int *obj return msg_tag_init(r0); } - +MK_SYSCALL msg_tag_t task_map(obj_handler_t dst_task, obj_handler_t src_obj, obj_handler_t dst_obj, uint8_t attrs) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -123,7 +127,7 @@ msg_tag_t task_map(obj_handler_t dst_task, obj_handler_t src_obj, obj_handler_t return tag; } - +MK_SYSCALL msg_tag_t task_unmap(obj_handler_t task_han, vpage_t vpage) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -139,6 +143,7 @@ msg_tag_t task_unmap(obj_handler_t task_han, vpage_t vpage) return tag; } +MK_SYSCALL msg_tag_t task_alloc_ram_base(obj_handler_t task_han, umword_t size, addr_t *alloc_addr,int mem_block) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -162,6 +167,7 @@ msg_tag_t task_alloc_ram_base(obj_handler_t task_han, umword_t size, addr_t *all return msg_tag_init(r0); } +MK_SYSCALL msg_tag_t task_copy_data(obj_handler_t task_obj, void *st_addr, umword_t size) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -176,10 +182,11 @@ msg_tag_t task_copy_data(obj_handler_t task_obj, void *st_addr, umword_t size) asm __volatile__("" : : - : ARCH_REG_0, ARCH_REG_1); + : ARCH_REG_0); return msg_tag_init(r0); } +MK_SYSCALL msg_tag_t task_copy_data_to(obj_handler_t task_obj, obj_handler_t dst_task_obj, void *st_addr, void *dst_addr, umword_t size) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -194,10 +201,11 @@ msg_tag_t task_copy_data_to(obj_handler_t task_obj, obj_handler_t dst_task_obj, asm __volatile__("" : : - : ARCH_REG_0, ARCH_REG_1); + : ARCH_REG_0); return msg_tag_init(r0); } +MK_SYSCALL msg_tag_t task_set_com_point(obj_handler_t task_obj, void *com_point_func, addr_t stack, umword_t stack_size, void *bitmap, int bitmap_len, void *msg_buf) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -212,10 +220,11 @@ msg_tag_t task_set_com_point(obj_handler_t task_obj, void *com_point_func, addr_ asm __volatile__("" : : - : ARCH_REG_0, ARCH_REG_1); + : ARCH_REG_0); return msg_tag_init(r0); } +MK_SYSCALL msg_tag_t task_com_unlock(obj_handler_t task_obj) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -230,11 +239,11 @@ msg_tag_t task_com_unlock(obj_handler_t task_obj) asm __volatile__("" : : - : ARCH_REG_0, ARCH_REG_1); + : ARCH_REG_0); return msg_tag_init(r0); } - +MK_SYSCALL msg_tag_t task_com_lock(obj_handler_t task_obj) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -249,7 +258,7 @@ msg_tag_t task_com_lock(obj_handler_t task_obj) asm __volatile__("" : : - : ARCH_REG_0, ARCH_REG_1); + : ARCH_REG_0); return msg_tag_init(r0); } diff --git a/mkrtos_user/lib/sys/src/u_thread.c b/mkrtos_user/lib/sys/src/u_thread.c index de5d1869a..b3a62e5c5 100644 --- a/mkrtos_user/lib/sys/src/u_thread.c +++ b/mkrtos_user/lib/sys/src/u_thread.c @@ -96,6 +96,7 @@ msg_tag_t thread_ipc_call(msg_tag_t in_tag, obj_handler_t target_th_obj, ipc_tim return msg_tag_init(r0); } #endif +MK_SYSCALL msg_tag_t thread_sleep(umword_t ticks) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -111,6 +112,7 @@ msg_tag_t thread_sleep(umword_t ticks) : : ARCH_REG_0); } +MK_SYSCALL msg_tag_t thread_ipc_fast_call(msg_tag_t in_tag, obj_handler_t target_obj, umword_t arg0, umword_t arg1, umword_t arg2) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -127,6 +129,7 @@ msg_tag_t thread_ipc_fast_call(msg_tag_t in_tag, obj_handler_t target_obj, umwor : ARCH_REG_0); return msg_tag_init(r0); } +MK_SYSCALL msg_tag_t thread_ipc_fast_replay(msg_tag_t in_tag, obj_handler_t target_obj, int unlock_bitmap) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -143,6 +146,7 @@ msg_tag_t thread_ipc_fast_replay(msg_tag_t in_tag, obj_handler_t target_obj, int : ARCH_REG_0); return msg_tag_init(r0); } +MK_SYSCALL msg_tag_t thread_yield(obj_handler_t obj) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -160,6 +164,7 @@ msg_tag_t thread_yield(obj_handler_t obj) : ARCH_REG_0, ARCH_REG_1, ARCH_REG_2); return msg_tag_init(r0); } +MK_SYSCALL msg_tag_t thread_msg_buf_set(obj_handler_t obj, void *msg) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -179,6 +184,7 @@ msg_tag_t thread_msg_buf_set(obj_handler_t obj, void *msg) : ARCH_REG_0, ARCH_REG_1, ARCH_REG_2); return msg_tag_init(r0); } +MK_SYSCALL msg_tag_t thread_msg_buf_get(obj_handler_t obj, umword_t *msg, umword_t *len) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -207,6 +213,7 @@ msg_tag_t thread_msg_buf_get(obj_handler_t obj, umword_t *msg, umword_t *len) return msg_tag_init(r0); } +MK_SYSCALL msg_tag_t thread_exec_regs(obj_handler_t obj, umword_t pc, umword_t sp, umword_t ram, umword_t cp_stack) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -226,6 +233,7 @@ msg_tag_t thread_exec_regs(obj_handler_t obj, umword_t pc, umword_t sp, umword_t return tag; } +MK_SYSCALL msg_tag_t thread_run_cpu(obj_handler_t obj, uint8_t prio, umword_t cpu) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -245,6 +253,7 @@ msg_tag_t thread_run_cpu(obj_handler_t obj, uint8_t prio, umword_t cpu) return tag; } +MK_SYSCALL msg_tag_t thread_bind_task(obj_handler_t obj, obj_handler_t tk_obj) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -263,6 +272,7 @@ msg_tag_t thread_bind_task(obj_handler_t obj, obj_handler_t tk_obj) return tag; } +MK_SYSCALL msg_tag_t thread_set_exec(obj_handler_t obj, obj_handler_t exec_th) { register volatile umword_t r0 asm(ARCH_REG_0); diff --git a/mkrtos_user/lib/sys/src/u_vmam.c b/mkrtos_user/lib/sys/src/u_vmam.c index a568589b4..2ca315cac 100644 --- a/mkrtos_user/lib/sys/src/u_vmam.c +++ b/mkrtos_user/lib/sys/src/u_vmam.c @@ -9,7 +9,7 @@ enum VMA_FREE, VMA_GRANT, }; - +MK_SYSCALL msg_tag_t u_vmam_alloc(obj_handler_t obj, vma_addr_t addr, size_t size, addr_t paddr, addr_t *vaddr) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -33,6 +33,7 @@ msg_tag_t u_vmam_alloc(obj_handler_t obj, vma_addr_t addr, size_t size, addr_t p return msg_tag_init(r0); } +MK_SYSCALL msg_tag_t u_vmam_grant(obj_handler_t obj, obj_handler_t dst_task_obj, addr_t src_addr, addr_t dst_addr, size_t size) { @@ -52,7 +53,7 @@ msg_tag_t u_vmam_grant(obj_handler_t obj, obj_handler_t dst_task_obj, return msg_tag_init(r0); } - +MK_SYSCALL msg_tag_t u_vmam_free(obj_handler_t obj, addr_t addr, size_t size) { register volatile umword_t r0 asm(ARCH_REG_0); diff --git a/mkrtos_user/server/fs/appfs/heap_stack.c b/mkrtos_user/server/fs/appfs/heap_stack.c index b8e18a138..e0bbc17d5 100644 --- a/mkrtos_user/server/fs/appfs/heap_stack.c +++ b/mkrtos_user/server/fs/appfs/heap_stack.c @@ -1,17 +1,13 @@ +#include +#include -#define HEAP_SIZE (4*1024) +#define HEAP_SIZE (512) #define STACK_SIZE (1024*2) -#if defined(__CC_ARM) -#define HEAP_ATTR SECTION("HEAP") __attribute__((zero_init)) -#define STACK_ATTR SECTION("STACK") __attribute__((zero_init)) -#elif defined(__GNUC__) #define HEAP_ATTR __attribute__((__section__(".bss.heap"))) #define STACK_ATTR __attribute__((__section__(".bss.stack"))) -#elif defined(__IAR_SYSTEMS_ICC__) -#define HEAP_ATTR -#define STACK_ATTR -#endif __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; + diff --git a/mkrtos_user/server/fs/cpiofs/heap_stack.c b/mkrtos_user/server/fs/cpiofs/heap_stack.c index c791618b2..c6c210098 100644 --- a/mkrtos_user/server/fs/cpiofs/heap_stack.c +++ b/mkrtos_user/server/fs/cpiofs/heap_stack.c @@ -1,4 +1,6 @@ #include +#include + #if !IS_ENABLED(CONFIG_MMU) #define HEAP_SIZE 1024 #define STACK_SIZE (2*1024) @@ -16,4 +18,5 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; #endif diff --git a/mkrtos_user/server/fs/fatfs/heap_stack.c b/mkrtos_user/server/fs/fatfs/heap_stack.c index a88cb819e..9d1b0cb6b 100644 --- a/mkrtos_user/server/fs/fatfs/heap_stack.c +++ b/mkrtos_user/server/fs/fatfs/heap_stack.c @@ -1,17 +1,13 @@ +#include +#include + #define HEAP_SIZE 512 #define STACK_SIZE 1024 * 2 -#if defined(__CC_ARM) -#define HEAP_ATTR SECTION("HEAP") __attribute__((zero_init)) -#define STACK_ATTR SECTION("STACK") __attribute__((zero_init)) -#elif defined(__GNUC__) #define HEAP_ATTR __attribute__((__section__(".bss.heap"))) #define STACK_ATTR __attribute__((__section__(".bss.stack"))) -#elif defined(__IAR_SYSTEMS_ICC__) -#define HEAP_ATTR -#define STACK_ATTR -#endif __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/server/fs/lxext4/heap_stack.c b/mkrtos_user/server/fs/lxext4/heap_stack.c index 81b91c820..53a858fda 100644 --- a/mkrtos_user/server/fs/lxext4/heap_stack.c +++ b/mkrtos_user/server/fs/lxext4/heap_stack.c @@ -16,4 +16,5 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; #endif diff --git a/mkrtos_user/server/init/board/STM32F407VET6/init.cfg b/mkrtos_user/server/init/board/STM32F407VET6/init.cfg new file mode 100644 index 000000000..8ab68fb7a --- /dev/null +++ b/mkrtos_user/server/init/board/STM32F407VET6/init.cfg @@ -0,0 +1,14 @@ +#一次读取一行,每行代表启动的应用程序 +block /dev/block +appfs -m /bin -d /dev/block +# cpiofs -m /bin +# fatfs +# pin +# i2c +# pca9555 +# display +# eth +# snd +# net +# nes +sh \ No newline at end of file diff --git a/mkrtos_user/server/init/src/heap_stack.c b/mkrtos_user/server/init/src/heap_stack.c index be4feebb9..cd8cf5dc5 100644 --- a/mkrtos_user/server/init/src/heap_stack.c +++ b/mkrtos_user/server/init/src/heap_stack.c @@ -1,5 +1,3 @@ -#include -#if !IS_ENABLED(CONFIG_MMU) /** * @file heap_stack.c * @author ATShining (1358745329@qq.com) @@ -10,6 +8,9 @@ * @copyright Copyright (c) 2023 * */ +#include + +#if !IS_ENABLED(CONFIG_MMU) #ifdef MKRTOS_TEST_MODE #define HEAP_SIZE (256 * 1024) #define STACK_SIZE (2 * 1024) //(1024 + 256) @@ -31,4 +32,5 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; #endif diff --git a/mkrtos_user/server/init/src/init.c b/mkrtos_user/server/init/src/init.c index 11aa68895..0764ac7c1 100644 --- a/mkrtos_user/server/init/src/init.c +++ b/mkrtos_user/server/init/src/init.c @@ -34,8 +34,8 @@ #include "tty.h" #define DEFAULT_INIT_CFG "init.cfg" -#define STACK_COM_ITME_SIZE ((1024+512) * 4) -#define STACK_NUM 2 +#define STACK_NUM 4 +#define STACK_COM_ITME_SIZE ((1024+512) * STACK_NUM) ATTR_ALIGN(8) static uint8_t stack_coms[STACK_COM_ITME_SIZE * STACK_NUM]; static uint8_t msg_buf_coms[MSG_BUG_LEN * STACK_NUM]; @@ -65,7 +65,6 @@ int main(int argc, char *args[]) rpc_meta_init_def(TASK_THIS, &env->ns_hd); namespace_init(env->ns_hd); pm_init(); - // console_init(); parse_cfg_init(); fs_ns_mkdir("/dev"); @@ -77,7 +76,6 @@ int main(int argc, char *args[]) tty_svr_init(); ret = parse_cfg(DEFAULT_INIT_CFG, env); printf("run app num is %d.\n", ret); - // task_unmap(TASK_THIS, vpage_create_raw3(KOBJ_DELETE_RIGHT, 0, THREAD_MAIN)); while (1) { u_sleep_ms(U_SLEEP_ALWAYS); diff --git a/mkrtos_user/server/net/src/heap_stack.c b/mkrtos_user/server/net/src/heap_stack.c index 665fc845c..e6240ec65 100644 --- a/mkrtos_user/server/net/src/heap_stack.c +++ b/mkrtos_user/server/net/src/heap_stack.c @@ -1,4 +1,5 @@ -#include +#include + #if !IS_ENABLED(CONFIG_MMU) #define HEAP_SIZE (16 * 1024) #define STACK_SIZE (2048) @@ -16,4 +17,5 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; #endif \ No newline at end of file diff --git a/mkrtos_user/server/shell/src/heap_stack.c b/mkrtos_user/server/shell/src/heap_stack.c index 2f0100348..f66f79aba 100644 --- a/mkrtos_user/server/shell/src/heap_stack.c +++ b/mkrtos_user/server/shell/src/heap_stack.c @@ -1,4 +1,4 @@ -#include +#include #if !IS_ENABLED(CONFIG_MMU) #define HEAP_SIZE 16 * 1024 #define STACK_SIZE (2 * 1024) @@ -16,4 +16,5 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; #endif \ No newline at end of file diff --git a/mkrtos_user/server/uvmm/src/heap_stack.c b/mkrtos_user/server/uvmm/src/heap_stack.c index 7b07a9d03..7e74d0a92 100644 --- a/mkrtos_user/server/uvmm/src/heap_stack.c +++ b/mkrtos_user/server/uvmm/src/heap_stack.c @@ -17,4 +17,5 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; #endif diff --git a/mkrtos_user/user/app/ATSURFF437/3d_test/heap_stack.c b/mkrtos_user/user/app/ATSURFF437/3d_test/heap_stack.c index 9d74cba03..f8e15612f 100644 --- a/mkrtos_user/user/app/ATSURFF437/3d_test/heap_stack.c +++ b/mkrtos_user/user/app/ATSURFF437/3d_test/heap_stack.c @@ -15,3 +15,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/app/ATSURFF437/drv_test/heap_stack.c b/mkrtos_user/user/app/ATSURFF437/drv_test/heap_stack.c index 9d74cba03..f8e15612f 100644 --- a/mkrtos_user/user/app/ATSURFF437/drv_test/heap_stack.c +++ b/mkrtos_user/user/app/ATSURFF437/drv_test/heap_stack.c @@ -15,3 +15,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/app/ATSURFF437/nes_simulator/heap_stack.c b/mkrtos_user/user/app/ATSURFF437/nes_simulator/heap_stack.c index 1c162d34e..b616d06e3 100644 --- a/mkrtos_user/user/app/ATSURFF437/nes_simulator/heap_stack.c +++ b/mkrtos_user/user/app/ATSURFF437/nes_simulator/heap_stack.c @@ -15,3 +15,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/app/CMakeLists.txt b/mkrtos_user/user/app/CMakeLists.txt index b319775ea..6bef59d15 100644 --- a/mkrtos_user/user/app/CMakeLists.txt +++ b/mkrtos_user/user/app/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.13) -# add_subdirectory(coremark) -# add_subdirectory(tinycc-arm-thumb) +add_subdirectory(coremark) +add_subdirectory(tinycc-arm-thumb) add_subdirectory(test) add_subdirectory(test2) add_subdirectory(vi) diff --git a/mkrtos_user/user/app/STM32F103ZET6/app/src/heap_stack.c b/mkrtos_user/user/app/STM32F103ZET6/app/src/heap_stack.c index 44ac515df..8028aefbd 100644 --- a/mkrtos_user/user/app/STM32F103ZET6/app/src/heap_stack.c +++ b/mkrtos_user/user/app/STM32F103ZET6/app/src/heap_stack.c @@ -15,3 +15,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/app/binutils-2.33.1/binutils/addr2line.c b/mkrtos_user/user/app/binutils-2.33.1/binutils/addr2line.c index 488cccb3a..d1451b597 100644 --- a/mkrtos_user/user/app/binutils-2.33.1/binutils/addr2line.c +++ b/mkrtos_user/user/app/binutils-2.33.1/binutils/addr2line.c @@ -56,6 +56,7 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; #endif diff --git a/mkrtos_user/user/app/binutils-2.33.1/binutils/ar.c b/mkrtos_user/user/app/binutils-2.33.1/binutils/ar.c index ee7381756..cd5437fc3 100644 --- a/mkrtos_user/user/app/binutils-2.33.1/binutils/ar.c +++ b/mkrtos_user/user/app/binutils-2.33.1/binutils/ar.c @@ -54,6 +54,7 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; #endif diff --git a/mkrtos_user/user/app/binutils-2.33.1/binutils/bin2c.c b/mkrtos_user/user/app/binutils-2.33.1/binutils/bin2c.c index e6920f969..cebd6e6b8 100644 --- a/mkrtos_user/user/app/binutils-2.33.1/binutils/bin2c.c +++ b/mkrtos_user/user/app/binutils-2.33.1/binutils/bin2c.c @@ -40,6 +40,7 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; #endif diff --git a/mkrtos_user/user/app/binutils-2.33.1/binutils/nm.c b/mkrtos_user/user/app/binutils-2.33.1/binutils/nm.c index 5a107535b..72ab00d9b 100644 --- a/mkrtos_user/user/app/binutils-2.33.1/binutils/nm.c +++ b/mkrtos_user/user/app/binutils-2.33.1/binutils/nm.c @@ -57,6 +57,7 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; #endif diff --git a/mkrtos_user/user/app/binutils-2.33.1/binutils/objcopy.c b/mkrtos_user/user/app/binutils-2.33.1/binutils/objcopy.c index 322b5977f..de0842247 100644 --- a/mkrtos_user/user/app/binutils-2.33.1/binutils/objcopy.c +++ b/mkrtos_user/user/app/binutils-2.33.1/binutils/objcopy.c @@ -50,6 +50,7 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; #endif diff --git a/mkrtos_user/user/app/binutils-2.33.1/binutils/objdump.c b/mkrtos_user/user/app/binutils-2.33.1/binutils/objdump.c index d803c7b9b..0c865fcc0 100644 --- a/mkrtos_user/user/app/binutils-2.33.1/binutils/objdump.c +++ b/mkrtos_user/user/app/binutils-2.33.1/binutils/objdump.c @@ -66,6 +66,7 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; #endif diff --git a/mkrtos_user/user/app/binutils-2.33.1/binutils/size.c b/mkrtos_user/user/app/binutils-2.33.1/binutils/size.c index 7503938e8..186327418 100644 --- a/mkrtos_user/user/app/binutils-2.33.1/binutils/size.c +++ b/mkrtos_user/user/app/binutils-2.33.1/binutils/size.c @@ -55,6 +55,7 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; #endif /* Program options. */ diff --git a/mkrtos_user/user/app/coremark/heap_stack.c b/mkrtos_user/user/app/coremark/heap_stack.c index b5b1f305d..91a5f8873 100644 --- a/mkrtos_user/user/app/coremark/heap_stack.c +++ b/mkrtos_user/user/app/coremark/heap_stack.c @@ -1,3 +1,4 @@ +#include #define HEAP_SIZE (1024) #define STACK_SIZE (1024 * 4) @@ -15,3 +16,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/app/misc/dm9000_drv/src/heap_stack.c b/mkrtos_user/user/app/misc/dm9000_drv/src/heap_stack.c index 6bb6f5711..d1b52f67d 100644 --- a/mkrtos_user/user/app/misc/dm9000_drv/src/heap_stack.c +++ b/mkrtos_user/user/app/misc/dm9000_drv/src/heap_stack.c @@ -15,3 +15,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/app/misc/lcd_drv/src/heap_stack.c b/mkrtos_user/user/app/misc/lcd_drv/src/heap_stack.c index 7202ee454..ae29f8b05 100644 --- a/mkrtos_user/user/app/misc/lcd_drv/src/heap_stack.c +++ b/mkrtos_user/user/app/misc/lcd_drv/src/heap_stack.c @@ -15,3 +15,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/app/misc/mr_drv/src/heap_stack.c b/mkrtos_user/user/app/misc/mr_drv/src/heap_stack.c index 7b0023bfc..4654d014a 100644 --- a/mkrtos_user/user/app/misc/mr_drv/src/heap_stack.c +++ b/mkrtos_user/user/app/misc/mr_drv/src/heap_stack.c @@ -15,3 +15,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/app/test/heap_stack.c b/mkrtos_user/user/app/test/heap_stack.c index d1ae0a3c1..8e3d4aa18 100644 --- a/mkrtos_user/user/app/test/heap_stack.c +++ b/mkrtos_user/user/app/test/heap_stack.c @@ -1,3 +1,4 @@ +#include #define HEAP_SIZE (10*1024) #define STACK_SIZE (1024 * 2) @@ -15,3 +16,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/app/test2/heap_stack.c b/mkrtos_user/user/app/test2/heap_stack.c index d1ae0a3c1..8e3d4aa18 100644 --- a/mkrtos_user/user/app/test2/heap_stack.c +++ b/mkrtos_user/user/app/test2/heap_stack.c @@ -1,3 +1,4 @@ +#include #define HEAP_SIZE (10*1024) #define STACK_SIZE (1024 * 2) @@ -15,3 +16,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/app/tinycc-arm-thumb/armv7_8m/heap_stack.c b/mkrtos_user/user/app/tinycc-arm-thumb/armv7_8m/heap_stack.c index e378f0cba..3231bb18c 100644 --- a/mkrtos_user/user/app/tinycc-arm-thumb/armv7_8m/heap_stack.c +++ b/mkrtos_user/user/app/tinycc-arm-thumb/armv7_8m/heap_stack.c @@ -1,4 +1,4 @@ - +#include #define HEAP_SIZE (1024*1024*8) #define STACK_SIZE (8192) @@ -15,3 +15,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/app/vi/CMakeLists.txt b/mkrtos_user/user/app/vi/CMakeLists.txt index 55d10dd7e..7f6979bd6 100644 --- a/mkrtos_user/user/app/vi/CMakeLists.txt +++ b/mkrtos_user/user/app/vi/CMakeLists.txt @@ -54,10 +54,6 @@ set_target_properties( add_custom_target( vi_dump ALL COMMAND - ${CMAKE_OBJDUMP} -s -S vi.elf > ${CMAKE_SOURCE_DIR}/build/output/vi.S - COMMAND - ${CMAKE_READELF} -a vi.elf > ${CMAKE_SOURCE_DIR}/build/output/vi.txt - COMMAND ${CMAKE_OBJCOPY} -O binary -S vi.elf vi.bin COMMAND ${CMAKE_SIZE} vi.elf diff --git a/mkrtos_user/user/app/vi/heap_stack.c b/mkrtos_user/user/app/vi/heap_stack.c index dab72bb41..58f523331 100644 --- a/mkrtos_user/user/app/vi/heap_stack.c +++ b/mkrtos_user/user/app/vi/heap_stack.c @@ -1,3 +1,4 @@ +#include #define HEAP_SIZE (512) #define STACK_SIZE (1024 * 3) @@ -15,3 +16,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/drv/ATSURFF437/block/heap_stack.c b/mkrtos_user/user/drv/ATSURFF437/block/heap_stack.c index 9cc3c8c15..96929978c 100644 --- a/mkrtos_user/user/drv/ATSURFF437/block/heap_stack.c +++ b/mkrtos_user/user/drv/ATSURFF437/block/heap_stack.c @@ -15,3 +15,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/drv/ATSURFF437/display/heap_stack.c b/mkrtos_user/user/drv/ATSURFF437/display/heap_stack.c index 9cc3c8c15..96929978c 100644 --- a/mkrtos_user/user/drv/ATSURFF437/display/heap_stack.c +++ b/mkrtos_user/user/drv/ATSURFF437/display/heap_stack.c @@ -15,3 +15,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/drv/ATSURFF437/eth/heap_stack.c b/mkrtos_user/user/drv/ATSURFF437/eth/heap_stack.c index 9cc3c8c15..96929978c 100644 --- a/mkrtos_user/user/drv/ATSURFF437/eth/heap_stack.c +++ b/mkrtos_user/user/drv/ATSURFF437/eth/heap_stack.c @@ -15,3 +15,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/drv/ATSURFF437/i2c/heap_stack.c b/mkrtos_user/user/drv/ATSURFF437/i2c/heap_stack.c index 9cc3c8c15..96929978c 100644 --- a/mkrtos_user/user/drv/ATSURFF437/i2c/heap_stack.c +++ b/mkrtos_user/user/drv/ATSURFF437/i2c/heap_stack.c @@ -15,3 +15,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/drv/ATSURFF437/pca9555/heap_stack.c b/mkrtos_user/user/drv/ATSURFF437/pca9555/heap_stack.c index 9cc3c8c15..96929978c 100644 --- a/mkrtos_user/user/drv/ATSURFF437/pca9555/heap_stack.c +++ b/mkrtos_user/user/drv/ATSURFF437/pca9555/heap_stack.c @@ -15,3 +15,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/drv/ATSURFF437/pin/heap_stack.c b/mkrtos_user/user/drv/ATSURFF437/pin/heap_stack.c index 8c545adf8..b2468f193 100644 --- a/mkrtos_user/user/drv/ATSURFF437/pin/heap_stack.c +++ b/mkrtos_user/user/drv/ATSURFF437/pin/heap_stack.c @@ -14,3 +14,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/drv/ATSURFF437/snd/heap_stack.c b/mkrtos_user/user/drv/ATSURFF437/snd/heap_stack.c index 9cc3c8c15..96929978c 100644 --- a/mkrtos_user/user/drv/ATSURFF437/snd/heap_stack.c +++ b/mkrtos_user/user/drv/ATSURFF437/snd/heap_stack.c @@ -15,3 +15,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/drv/STM32F205/block/heap_stack.c b/mkrtos_user/user/drv/STM32F205/block/heap_stack.c index 9cc3c8c15..d6b1ddd1a 100644 --- a/mkrtos_user/user/drv/STM32F205/block/heap_stack.c +++ b/mkrtos_user/user/drv/STM32F205/block/heap_stack.c @@ -1,4 +1,5 @@ - +#include +#include #define HEAP_SIZE (1024 + 512) #define STACK_SIZE (1024 + 512) @@ -15,3 +16,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/drv/STM32F407VET6/CMakeLists.txt b/mkrtos_user/user/drv/STM32F407VET6/CMakeLists.txt new file mode 100644 index 000000000..e3117d0e7 --- /dev/null +++ b/mkrtos_user/user/drv/STM32F407VET6/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.13) + +add_subdirectory(block) diff --git a/mkrtos_user/user/drv/STM32F407VET6/block/CMakeLists.txt b/mkrtos_user/user/drv/STM32F407VET6/block/CMakeLists.txt new file mode 100644 index 000000000..0b56d8ea1 --- /dev/null +++ b/mkrtos_user/user/drv/STM32F407VET6/block/CMakeLists.txt @@ -0,0 +1,76 @@ +cmake_minimum_required(VERSION 3.13) + +file( + GLOB deps + *.c +) + + +add_executable( + block.elf + ${deps} + ${START_SRC} +) +target_link_libraries( + block.elf + PUBLIC + -Bstatic + ${LIBC_NAME} + mk_drv + mk_char + --whole-archive + ${START_LIB} + libc_be + sys + sys_util + sys_svr + printf + --no-whole-archive + ${GCC_LIB_PATH}/libgcc.a +) +target_include_directories( + block.elf + PUBLIC + ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys/inc + ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys_svr/inc + ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/util/inc + + ${CMAKE_CURRENT_SOURCE_DIR}/ + + ${CMAKE_SOURCE_DIR}/mkrtos_user/lib/sys/inc + + ${CMAKE_SOURCE_DIR}/mkrtos_user/user/drv/lib/mk_block +) +add_dependencies( + block.elf + ${START_LIB} + sys + sys_util + mk_char + mk_drv + printf + # mk_block +) +set_target_properties( + block.elf PROPERTIES LINK_FLAGS + "-T ${CMAKE_CURRENT_LIST_DIR}/${ARCH_NAME}/link.lds ${CORTEX_M_LINK_FLAGS} --gc-section -no-dynamic-linker " + #--no-warn-rwx-segments +) +add_custom_target( + block_dump ALL + COMMAND + ${CMAKE_OBJDUMP} -s -S block.elf > ${CMAKE_SOURCE_DIR}/build/output/block.S + COMMAND + ${CMAKE_READELF} -a block.elf > ${CMAKE_SOURCE_DIR}/build/output/block.txt + COMMAND + ${CMAKE_OBJCOPY} -O binary -S block.elf block.bin + COMMAND + ${CMAKE_SIZE} block.elf + COMMAND + ${CMAKE_COMMAND} -E copy block.bin ${CMAKE_SOURCE_DIR}/build/output/cpio/block + COMMAND + cp block.elf ${CMAKE_SOURCE_DIR}/build/output/block.elf +) + +add_dependencies(block_dump block.elf) + \ No newline at end of file diff --git a/mkrtos_user/user/drv/STM32F407VET6/block/armv7_8m/link.lds b/mkrtos_user/user/drv/STM32F407VET6/block/armv7_8m/link.lds new file mode 100644 index 000000000..34fdd0c60 --- /dev/null +++ b/mkrtos_user/user/drv/STM32F407VET6/block/armv7_8m/link.lds @@ -0,0 +1,124 @@ +ENTRY(_start_) + +SECTIONS +{ + .text : { + . = ALIGN(4); + __text_start__ = .; + KEEP(*(.first)) + *(.text) + *(.text.*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(SORT(.rodata.*)) + *(.rodata) + + KEEP(*(.eh_frame*)) + + . = ALIGN(4); + __rel_start__ = .; + *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) + __rel_end__ = .; + } + .ARM.exidx : { + . = ALIGN(4); + __exdix_start = .; + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + /* This is used by the startup in order to initialize the .data secion */ + __exdix_end = .; + } + + .permissions_table : { + . = ALIGN(4); + __permissions_table_start__ = .; + KEEP(*(.permissions_table)) + __permissions_table_end__ = .; + } + + + PROVIDE(__ram_size__ = __bss_end__ - __data_start__); + .data : { + . = ALIGN(4); + __data_start__ = .; + __got_start__ = .; + *(.got) + __got_end__ = .; + . = ALIGN(4); + *(.data) + *(.data.*) + + *(vtable) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + . = ALIGN(4); + _shell_command_start = .; + KEEP(*(shellCommand)) + _shell_command_end = .; + + . = ALIGN(4); + /* All data end */ + __data_end__ = .; + } + + PROVIDE(__heap_size__ = __heap_end__ - __heap_start__); + PROVIDE(__stack_size__ = __stack_end__ - __stack_start__); + .bss : { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + __bss_start__ = .; + *(.bss) + *(COMMON) + + . = ALIGN(4); + __heap_start__ = .; + KEEP(*(.bss.heap)) + __heap_end__ = .; + + . = ALIGN(4); + __stack_start__ = .; + KEEP(*(.bss.stack)) + __stack_end__ = .; + + *(.bss.*) + /* This is used by the startup in order to initialize the .bss secion */ + . = ALIGN(4); + __bss_end__ = .; + } + _end = .; +} diff --git a/mkrtos_user/user/drv/STM32F407VET6/block/flash.c b/mkrtos_user/user/drv/STM32F407VET6/block/flash.c new file mode 100644 index 000000000..c99924bec --- /dev/null +++ b/mkrtos_user/user/drv/STM32F407VET6/block/flash.c @@ -0,0 +1,63 @@ + +#include "flash.h" +#include +#include +#include +#include "u_sys.h" +#include "u_prot.h" +#include + +#define SECTOR_SIZE 4096 +static sys_info_t sys_info; + +int flash_get_sector_size(umword_t *mem_addr, int *blk_size, int *blk_nr) +{ + assert(blk_size); + assert(mem_addr); + assert(blk_nr); + msg_tag_t tag; + + tag = sys_read_info(SYS_PROT, &sys_info, 0); + if (msg_tag_get_val(tag) < 0) + { + return -ENOENT; + } + + *mem_addr = sys_info.bootfs_start_addr; + *blk_size = SECTOR_SIZE; + *blk_nr = (CONFIG_SYS_TEXT_SIZE - CONFIG_BOOTSTRAP_TEXT_SIZE - CONFIG_KNL_TEXT_SIZE - CONFIG_DTBO_TEXT_SIZE) / SECTOR_SIZE; + + printf("flash mem_addr:0x%x blk_size:0x%x blk_nr:0x%x\n", *mem_addr, *blk_size, *blk_nr); + return 0; +} +int flash_read_sector(uint32_t sector_inx, uint32_t *p_buffer, uint16_t num_read) +{ + uint16_t i; + uint32_t read_addr; + + if (num_read < SECTOR_SIZE / 4) + { + return -1; + } + read_addr = sector_inx * SECTOR_SIZE + sys_info.bootfs_start_addr; + + for (i = 0; i < num_read; i++) + { + p_buffer[i] = *(uint32_t *)(read_addr); + read_addr += 4; + } + return num_read; +} +int flash_erase_sector(uint32_t sector_inx) +{ + return -ENOSYS; +} +int flash_write_sector(uint32_t sector_inx, uint32_t *p_buffer, uint16_t num_write) +{ + return -ENOSYS; +} + +int flash_init(void) +{ + return 0; +} diff --git a/mkrtos_user/user/drv/STM32F407VET6/block/flash.h b/mkrtos_user/user/drv/STM32F407VET6/block/flash.h new file mode 100644 index 000000000..97aca156b --- /dev/null +++ b/mkrtos_user/user/drv/STM32F407VET6/block/flash.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +int flash_read_sector(uint32_t sector_inx, uint32_t *p_buffer, uint16_t num_read); +int flash_write_sector(uint32_t sector_inx, uint32_t *p_buffer, uint16_t num_write); +int flash_get_sector_size(umword_t *mem_addr, int *blk_size, int *blk_nr); +int flash_erase_sector(uint32_t sector_inx); +int flash_init(void); diff --git a/mkrtos_user/user/drv/STM32F407VET6/block/heap_stack.c b/mkrtos_user/user/drv/STM32F407VET6/block/heap_stack.c new file mode 100644 index 000000000..d6b1ddd1a --- /dev/null +++ b/mkrtos_user/user/drv/STM32F407VET6/block/heap_stack.c @@ -0,0 +1,19 @@ +#include +#include +#define HEAP_SIZE (1024 + 512) +#define STACK_SIZE (1024 + 512) + +#if defined(__CC_ARM) +#define HEAP_ATTR SECTION("HEAP") __attribute__((zero_init)) +#define STACK_ATTR SECTION("STACK") __attribute__((zero_init)) +#elif defined(__GNUC__) +#define HEAP_ATTR __attribute__((__section__(".bss.heap"))) +#define STACK_ATTR __attribute__((__section__(".bss.stack"))) +#elif defined(__IAR_SYSTEMS_ICC__) +#define HEAP_ATTR +#define STACK_ATTR +#endif + +__attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; +__attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1]; diff --git a/mkrtos_user/user/drv/STM32F407VET6/block/main.c b/mkrtos_user/user/drv/STM32F407VET6/block/main.c new file mode 100644 index 000000000..70eb3d73c --- /dev/null +++ b/mkrtos_user/user/drv/STM32F407VET6/block/main.c @@ -0,0 +1,133 @@ + +#include "flash.h" +#include "u_share_mem.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "u_hd_man.h" +#define STACK_COM_ITME_SIZE (2048) +ATTR_ALIGN(8) +uint8_t stack_coms[STACK_COM_ITME_SIZE]; +uint8_t msg_buf_coms[MSG_BUG_LEN]; +static obj_handler_t com_th_obj; + +void fast_ipc_init(void) +{ + com_th_obj = handler_alloc(); + assert(com_th_obj != HANDLER_INVALID); + u_fast_ipc_init(stack_coms, msg_buf_coms, 1, STACK_COM_ITME_SIZE, &com_th_obj); +} +static blk_drv_t blk_drv; +int blk_drv_write(obj_handler_t obj, int len, int inx) +{ + int ret = -1; + addr_t addr = 0; + umword_t size = 0; + msg_tag_t tag; + + if (len == 0) + { + ret = flash_erase_sector(inx); + } + else + { + tag = share_mem_map(obj, vma_addr_create(VPAGE_PROT_RWX, 0, 0), &addr, &size); + if (msg_tag_get_val(tag) < 0) + { + handler_free_umap(obj); + printf("net write error.\n"); + return msg_tag_get_val(tag); + } + ret = flash_write_sector(inx, (void *)addr, len / 4); + handler_free_umap(obj); + } + if (ret < 0) + { + return ret; + } + return ret * 4; +} +int blk_drv_read(obj_handler_t obj, int len, int inx) +{ + int ret = -1; + addr_t addr = 0; + umword_t size = 0; + uint32_t _err; + msg_tag_t tag = share_mem_map(obj, vma_addr_create(VPAGE_PROT_RWX, 0, 0), &addr, &size); + + if (msg_tag_get_val(tag) < 0) + { + handler_free_umap(obj); + printf("net write error.\n"); + return msg_tag_get_val(tag); + } + ret = flash_read_sector(inx, (void *)addr, len / 4); + handler_free_umap(obj); + if (ret < 0) + { + return ret; + } + return ret * 4; +} +int blk_drv_map(obj_handler_t *hd) +{ + return -ENOSYS; +} +int blk_drv_info(blk_drv_info_t *info) +{ + umword_t mem_addr; + int blk_size; + int blk_nr; + int ret; + + ret = flash_get_sector_size(&mem_addr, &blk_size, &blk_nr); + if (ret < 0) + { + return ret; + } + info->blk_nr = blk_nr; + info->blk_size = blk_size; + info->blk_start_addr = mem_addr; + return 0; +} +int main(int argc, char *argv[]) +{ + obj_handler_t hd; + int ret; + + if (argc < 2) + { + printf("please set dev path.\n"); + printf("example:block /block"); + return -1; + } + task_set_obj_name(TASK_THIS, TASK_THIS, "tk_blk"); + task_set_obj_name(TASK_THIS, THREAD_MAIN, "th_blk"); + printf("%s init..\n", argv[0]); + fast_ipc_init(); + + flash_init(); + blk_drv_init(&blk_drv); + ret = rpc_meta_init_def(TASK_THIS, &hd); + assert(ret >= 0); + ns_register(argv[1], hd, 0); + meta_reg_svr_obj(&blk_drv.svr, BLK_DRV_PROT); + + while (1) + { + // rpc_loop(); + u_sleep_ms(U_SLEEP_ALWAYS); + } +} diff --git a/mkrtos_user/user/drv/common/ram_block/heap_stack.c b/mkrtos_user/user/drv/common/ram_block/heap_stack.c index caed4d68d..c8e60df43 100644 --- a/mkrtos_user/user/drv/common/ram_block/heap_stack.c +++ b/mkrtos_user/user/drv/common/ram_block/heap_stack.c @@ -1,3 +1,4 @@ +#include #define HEAP_SIZE (512) #define STACK_SIZE (1024 + 512) @@ -15,3 +16,4 @@ __attribute__((used)) HEAP_ATTR static char _____heap_____[HEAP_SIZE]; __attribute__((used)) STACK_ATTR static char _____stack_____[STACK_SIZE]; +__attribute__((used)) umword_t _____mm_bitmap_____[ROUND(HEAP_SIZE, MK_PAGE_SIZE) / (sizeof(umword_t) * 8) + 1];