diff --git a/.vscode/launch.json b/.vscode/launch.json index 8ae29d750..6ab8b0076 100755 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -71,8 +71,8 @@ // "miDebuggerPath": "/home/zhangzheng/gcc-arm-10.3-2021.07-aarch64-aarch64-none-elf/bin/aarch64-none-elf-gdb", // "miDebuggerPath": "/home/mkrtos-smart/toolchains/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin/aarch64-none-elf-gdb", // "miDebuggerPath": "/home/toolchains/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin/aarch64-none-elf-gdb", - // "miDebuggerPath": "/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gdb", - "miDebuggerPath": "/home/zhangzheng/toolchain/gcc-arm-10.3-2021.07-x86_64-arm-none-eabi/bin/arm-none-eabi-gdb", + "miDebuggerPath": "/Users/zhangzheng/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gdb", + // "miDebuggerPath": "/home/zhangzheng/toolchain/gcc-arm-10.3-2021.07-x86_64-arm-none-eabi/bin/arm-none-eabi-gdb", "miDebuggerServerAddress": "127.0.0.1:33333", "MIMode": "gdb", "setupCommands": [ diff --git a/mkrtos_bsp/AT32/AT32F435_437_Firmware_Library_V2.2.0/project/at_surf_f437_board/at_surf_f437_board_lcd.c b/mkrtos_bsp/AT32/AT32F435_437_Firmware_Library_V2.2.0/project/at_surf_f437_board/at_surf_f437_board_lcd.c index ee7ea69e7..c8d2c33e1 100644 --- a/mkrtos_bsp/AT32/AT32F435_437_Firmware_Library_V2.2.0/project/at_surf_f437_board/at_surf_f437_board_lcd.c +++ b/mkrtos_bsp/AT32/AT32F435_437_Firmware_Library_V2.2.0/project/at_surf_f437_board/at_surf_f437_board_lcd.c @@ -894,7 +894,7 @@ void lcd_color_fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint16_t */ void lcd_num_show(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t size, int32_t num, uint8_t num_bit) { - uint8_t i, buf[12], start; + uint8_t i, buf[12], start = 0; buf[11] = 0; diff --git a/mkrtos_knl/CMakeLists.txt b/mkrtos_knl/CMakeLists.txt index a360aecc7..035550e08 100755 --- a/mkrtos_knl/CMakeLists.txt +++ b/mkrtos_knl/CMakeLists.txt @@ -8,6 +8,7 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \ -Wno-builtin-declaration-mismatch \ ") +# -O1 \ # -Ofast \ # message(编译参数:${CMAKE_C_FLAGS}) diff --git a/mkrtos_knl/arch/cortex-m/at32f437/CMakeLists.txt b/mkrtos_knl/arch/cortex-m/at32f437/CMakeLists.txt index 103a665a5..25a2536a5 100755 --- a/mkrtos_knl/arch/cortex-m/at32f437/CMakeLists.txt +++ b/mkrtos_knl/arch/cortex-m/at32f437/CMakeLists.txt @@ -22,4 +22,6 @@ target_include_directories( ${CMAKE_SOURCE_DIR}/mkrtos_bsp/AT32/AT32F435_437_Firmware_Library_V2.2.0/libraries/cmsis/cm4/core_support ${CMAKE_SOURCE_DIR}/mkrtos_bsp/AT32/AT32F435_437_Firmware_Library_V2.2.0/libraries/cmsis/cm4/device_support ${CMAKE_SOURCE_DIR}/mkrtos_bsp/AT32/AT32F435_437_Firmware_Library_V2.2.0/libraries/drivers/inc + + ${CMAKE_CURRENT_SOURCE_DIR}/../CmBacktrace/cm_backtrace ) diff --git a/mkrtos_knl/arch/cortex-m/at32f437/arch.c b/mkrtos_knl/arch/cortex-m/at32f437/arch.c index 662928bca..b0effd334 100644 --- a/mkrtos_knl/arch/cortex-m/at32f437/arch.c +++ b/mkrtos_knl/arch/cortex-m/at32f437/arch.c @@ -18,6 +18,11 @@ #include "mpu.h" #include "boot_info.h" #include "at32f435_437_clock.h" +#include + +#define HARDWARE_VERSION "V1.0.0" +#define SOFTWARE_VERSION "V0.1.0" + __ALIGN__(CONFIG_THREAD_BLOCK_SIZE) static uint8_t thread_knl_stack[CONFIG_THREAD_BLOCK_SIZE] = {0}; void *_estack = thread_knl_stack + CONFIG_THREAD_BLOCK_SIZE; @@ -109,7 +114,6 @@ void arch_init(void) SCB->SHCSR |= SCB_SHCSR_USGFAULTENA_Msk; SCB->SHCSR |= SCB_SHCSR_BUSFAULTENA_Msk; ((uint8_t *)(0xE000E008))[0] |= 0x6; - // RCC_ClocksTypeDef RCC_ClocksStatus; - // RCC_GetClocksFreq(&RCC_ClocksStatus); + cm_backtrace_init("mkrtos", HARDWARE_VERSION, SOFTWARE_VERSION); } INIT_LOW_HARD(arch_init); diff --git a/mkrtos_knl/arch/cortex-m/at32f437/arch.h b/mkrtos_knl/arch/cortex-m/at32f437/arch.h index 1078502b1..5ed7ef6a5 100755 --- a/mkrtos_knl/arch/cortex-m/at32f437/arch.h +++ b/mkrtos_knl/arch/cortex-m/at32f437/arch.h @@ -97,6 +97,11 @@ static inline umword_t arch_get_isr_no(void) :); return num; } +__attribute__( (always_inline) ) static __inline uint32_t cmb_get_lr(void) { + uint32_t result; + __asm volatile ("mov %0, lr" : "=r" (result) ); + return (result); +} static inline void arch_set_knl_sp(umword_t sp) { write_sysreg(sp, msp); diff --git a/mkrtos_knl/arch/cortex-m/stm32f2/arch.h b/mkrtos_knl/arch/cortex-m/stm32f2/arch.h index c90b4ccf6..a8972b8b0 100755 --- a/mkrtos_knl/arch/cortex-m/stm32f2/arch.h +++ b/mkrtos_knl/arch/cortex-m/stm32f2/arch.h @@ -99,9 +99,9 @@ static inline umword_t arch_get_isr_no(void) return num; } __attribute__( (always_inline) ) static __inline uint32_t cmb_get_lr(void) { -uint32_t result; -__asm volatile ("mov %0, lr" : "=r" (result) ); -return (result); + uint32_t result; + __asm volatile ("mov %0, lr" : "=r" (result) ); + return (result); } static inline void arch_set_knl_sp(umword_t sp) { diff --git a/mkrtos_knl/inc/knl/mm_space.h b/mkrtos_knl/inc/knl/mm_space.h index b0a0408f1..64c5e1670 100644 --- a/mkrtos_knl/inc/knl/mm_space.h +++ b/mkrtos_knl/inc/knl/mm_space.h @@ -18,6 +18,7 @@ typedef struct mm_space #else void *mm_block; //!< task 的私有内存块 size_t mm_block_size; //!< 私有内存块的大小 + int mem_block_inx; //!< 内存块号 #endif task_vma_t mem_vma; //!< 虚拟内存区域 } mm_space_t; diff --git a/mkrtos_knl/inc/knl/mm_wrap.h b/mkrtos_knl/inc/knl/mm_wrap.h index 91f85795b..83ca71bd6 100755 --- a/mkrtos_knl/inc/knl/mm_wrap.h +++ b/mkrtos_knl/inc/knl/mm_wrap.h @@ -18,6 +18,7 @@ void *mm_limit_alloc_align(ram_limit_t *limit, size_t size, size_t align); void *mm_limit_alloc_align_raw(int mem_inx, ram_limit_t *limit, size_t size, size_t align); void mm_limit_free_align(ram_limit_t *limit, void *mem, size_t size); void mm_limit_free_align_raw(int mem_inx, ram_limit_t *limit, void *mem, size_t size); +void mm_info_raw(int mem_inx, size_t *total, size_t *free); void mm_info(size_t *total, size_t *free); void *mm_limit_alloc_raw(int mem_inx, ram_limit_t *limit, size_t size); diff --git a/mkrtos_knl/inc/lib/xprintf.h b/mkrtos_knl/inc/lib/xprintf.h index 7d9f0ce15..885ef8a6f 100755 --- a/mkrtos_knl/inc/lib/xprintf.h +++ b/mkrtos_knl/inc/lib/xprintf.h @@ -11,7 +11,7 @@ extern "C" #endif #include "stdarg.h" #define XF_USE_OUTPUT 1 /* 1: Enable output functions */ -#define XF_CRLF 0 /* 1: Convert \n ==> \r\n in the output char */ +#define XF_CRLF 1 /* 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 */ diff --git a/mkrtos_knl/knl/mm/mpu/vma.c b/mkrtos_knl/knl/mm/mpu/vma.c index 69f7e0105..b88d069b0 100644 --- a/mkrtos_knl/knl/mm/mpu/vma.c +++ b/mkrtos_knl/knl/mm/mpu/vma.c @@ -40,8 +40,9 @@ static region_info_t *vma_alloc_pt_region(task_vma_t *vma) { assert(vma != NULL); mword_t status = task_vma_lock(vma); - for (int i = 0; i < CONFIG_REGION_NUM; i++) + for (int i = CONFIG_REGION_NUM - 1; i >= 0 ; i--) { + /* 从最后一个开始分配,让用户使用的有更高的优先级 */ if (vma->pt_regions[i].region_inx < 0) { vma->pt_regions[i].region_inx = (int16_t)i; @@ -327,7 +328,7 @@ int task_vma_alloc(task_vma_t *task_vma, vma_addr_t vaddr, size_t size, if (paddr == 0) { // 未设置物理内存,则自动申请一个 - vma_addr = (addr_t)mm_limit_alloc_align(pt_task->lim, size, mem_align_size); + vma_addr = (addr_t)mm_limit_alloc_align_raw(pt_task->mm_space.mem_block_inx, pt_task->lim, size, mem_align_size); assert(((vma_addr & (mem_align_size - 1))) == 0); is_alloc_mem = TRUE; } @@ -408,7 +409,7 @@ int task_vma_alloc(task_vma_t *task_vma, vma_addr_t vaddr, size_t size, err_end: if (is_alloc_mem) { - mm_limit_free_align(pt_task->lim, (void *)vma_addr, mem_align_size); + mm_limit_free_align_raw(pt_task->mm_space.mem_block_inx, pt_task->lim, (void *)vma_addr, mem_align_size); } end: if (status >= 0) @@ -528,7 +529,7 @@ static int task_vma_free_inner(task_vma_t *task_vma, vaddr_t vaddr, size_t size, if (is_free_mem) { - mm_limit_free_align(pt_task->lim, (void *)vma_addr, size); + mm_limit_free_align_raw(pt_task->mm_space.mem_block_inx, pt_task->lim, (void *)vma_addr, size); } end: if (pt_task == thread_get_current_task()) @@ -666,6 +667,7 @@ typedef struct vma_clean_params { mln_rbtree_t *tree; ram_limit_t *lim; + task_t *pt_task; } vma_clean_params_t; static int rbtree_iterate_handler_delete(mln_rbtree_node_t *node, void *udata) { @@ -674,7 +676,8 @@ static int rbtree_iterate_handler_delete(mln_rbtree_node_t *node, void *udata) if (!(vma_addr_get_flags(vma_data->vaddr) & VMA_ADDR_RESV)) { - mm_limit_free_align(params->lim, (void *)vma_node_get_paddr(vma_data), vma_data->size); + vma_t *vma_data = mln_rbtree_node_data_get(node); + mm_limit_free_align_raw(params->pt_task->mm_space.mem_block_inx, params->lim, (void *)vma_node_get_paddr(vma_data), vma_data->size); } mln_rbtree_delete(params->tree, node); @@ -699,6 +702,7 @@ int task_vma_clean(task_vma_t *task_vma) vma_clean_params_t params = { .lim = pt_task->lim, .tree = &task_vma->alloc_tree, + .pt_task = pt_task, }; // 删除所有的节点 ret = mln_rbtree_iterate(&task_vma->alloc_tree, rbtree_iterate_handler_delete, ¶ms); return ret; @@ -831,12 +835,12 @@ void *mpu_ram_alloc(mm_space_t *ms, ram_limit_t *r_limit, size_t ram_size, int m #if CONFIG_MPU_VERSION == 1 umword_t pre_alloc_addr; struct mem_heap *heap = NULL; - umword_t status = cpulock_lock(); + // umword_t status = cpulock_lock(); again_alloc: heap = mm_get_free_raw(mem_block, heap, ram_size, &pre_alloc_addr); if (!heap) { - cpulock_set(status); + // cpulock_set(status); printk("The system is low on memory.\n"); // mm_trace(); return NULL; @@ -848,7 +852,7 @@ again_alloc: if (mpu_calc(ms, pre_alloc_addr, ram_size, &need_align, &alloc_addr) == FALSE) { - cpulock_set(status); + // cpulock_set(status); printk("The MPU area is exhausted."); return NULL; } @@ -856,7 +860,7 @@ again_alloc: void *ram = mm_limit_alloc_align_raw(mem_block, r_limit, ram_size, need_align); if (!ram) { - cpulock_set(status); + // cpulock_set(status); printk("The system is low on memory.\n"); return NULL; } @@ -864,13 +868,13 @@ again_alloc: //!< 申请的地址与预分配的地址不同 if (ram != (void *)alloc_addr) { - cpulock_set(status); + // cpulock_set(status); printk("Again.\n"); mm_limit_free_align_raw(mem_block, r_limit, ram, need_align); heap = heap->next; goto again_alloc; } - cpulock_set(status); + // cpulock_set(status); return ram; #elif CONFIG_MPU_VERSION == 2 region_info_t *region; diff --git a/mkrtos_knl/knl/mm_wrap.c b/mkrtos_knl/knl/mm_wrap.c index 07335d4a2..a2c1ac3a3 100755 --- a/mkrtos_knl/knl/mm_wrap.c +++ b/mkrtos_knl/knl/mm_wrap.c @@ -127,9 +127,17 @@ void mm_trace(void) { mem_trace(&mem_manage[0]); } +void mm_info_raw(int mem_inx, size_t *total, size_t *free) +{ + if (mem_inx >= MEM_NODES_NUM) + { + return; + } + mem_info(&mem_manage[mem_inx], total, free); +} void mm_info(size_t *total, size_t *free) { - mem_info(&mem_manage[0], total, free); + mm_info_raw(0, total, free); } void *mm_limit_alloc_align_raw(int mem_inx, ram_limit_t *limit, size_t size, size_t align) { diff --git a/mkrtos_knl/knl/printk.c b/mkrtos_knl/knl/printk.c index 2488bd144..3ab4d7328 100755 --- a/mkrtos_knl/knl/printk.c +++ b/mkrtos_knl/knl/printk.c @@ -46,6 +46,10 @@ void put_bytes(const uint8_t *data, size_t len) for (int i = 0; i < len; i++) { + if (data[i] == '\n') + { + uart_putc(uart_get_global(), '\r'); + } uart_putc(uart_get_global(), data[i]); } diff --git a/mkrtos_knl/knl/sema.c b/mkrtos_knl/knl/sema.c index 215fe1877..2f276fb54 100644 --- a/mkrtos_knl/knl/sema.c +++ b/mkrtos_knl/knl/sema.c @@ -10,6 +10,7 @@ #include "spinlock.h" #include "thread.h" #include "types.h" +#include #if IS_ENABLED(CONFIG_BUDDY_SLAB) #include static slab_t *sema_slab; @@ -77,7 +78,7 @@ void sema_up(sema_t *obj) } if (obj->max_cnt == 1 && obj->hold_th == &th->kobj) { - //还原优先级 + // 还原优先级 thread_set_prio(th, obj->hold_th_prio); obj->hold_th = NULL; } @@ -116,10 +117,10 @@ again: slist_add_append(&obj->suspend_head, &wait_item.node); if (obj->max_cnt == 1 && obj->hold_th) { - if (thread_get_prio(th) > thread_get_prio((thread_t*)(obj->hold_th))) + if (thread_get_prio(th) > thread_get_prio((thread_t *)(obj->hold_th))) { - //执行优先级继承 - thread_set_prio(((thread_t*)(obj->hold_th)), thread_get_prio(th)); + // 执行优先级继承 + thread_set_prio(((thread_t *)(obj->hold_th)), thread_get_prio(th)); } } remain_sleep = thread_sleep(ticks); @@ -211,7 +212,7 @@ static void sema_release_stage1(kobject_t *kobj) { sema_t *obj = container_of(kobj, sema_t, kobj); kobject_invalidate(kobj); - #if 1 +#if 1 umword_t status; status = spinlock_lock(&obj->lock); sema_wait_item_t *wait_item; @@ -232,7 +233,7 @@ static void sema_release_stage1(kobject_t *kobj) wait_item = next; } spinlock_set(&obj->lock, status); - #endif +#endif } static bool_t sema_put(kobject_t *kobj) { diff --git a/mkrtos_knl/knl/share_mem.c b/mkrtos_knl/knl/share_mem.c index 1a80578c7..8a3d39273 100644 --- a/mkrtos_knl/knl/share_mem.c +++ b/mkrtos_knl/knl/share_mem.c @@ -177,6 +177,7 @@ end: } static int share_mem_free_pmem(share_mem_t *obj) { + task_t *cur_task = thread_get_current_task(); assert(obj); switch (obj->mem_type) { @@ -189,7 +190,7 @@ static int share_mem_free_pmem(share_mem_t *obj) #if IS_ENABLED(CONFIG_MMU) mm_limit_free_buddy(obj->lim, obj->mem, obj->size); #else - mm_limit_free_align(obj->lim, obj->mem, obj->size); + mm_limit_free_align_raw(cur_task->mm_space.mem_block_inx, obj->lim, obj->mem, obj->size); #endif break; case SHARE_MEM_CNT_DPD: @@ -221,6 +222,7 @@ static int share_mem_free_pmem(share_mem_t *obj) static int share_mem_alloc_pmem(share_mem_t *obj) { int align_size = 0; + task_t *cur_task = thread_get_current_task(); assert(obj); if (obj->mem) @@ -260,7 +262,7 @@ static int share_mem_alloc_pmem(share_mem_t *obj) align_size = sizeof(void *); #endif - obj->mem = mm_limit_alloc_align(obj->lim, obj->size, align_size); + obj->mem = mm_limit_alloc_align_raw(cur_task->mm_space.mem_block_inx, obj->lim, obj->size, align_size); #endif if (obj->mem == NULL) { @@ -309,6 +311,8 @@ static int share_mem_alloc_pmem(share_mem_t *obj) static int share_mem_pmem_resize(share_mem_t *obj, size_t new_size) { int ret; + task_t *cur_task = thread_get_current_task(); + if (obj->mem) { return 0; @@ -324,7 +328,7 @@ static int share_mem_pmem_resize(share_mem_t *obj, size_t new_size) #if IS_ENABLED(CONFIG_MMU) mm_limit_free_buddy(obj->lim, obj->mem, ojb->size); #else - mm_limit_free_align(obj->lim, obj->mem, obj->size); + mm_limit_free_align_raw(cur_task->mm_space.mem_block_inx, obj->lim, obj->mem, obj->size); #endif obj->mem = NULL; break; @@ -541,14 +545,14 @@ static void share_mem_release_stage1(kobject_t *kobj) static void share_mem_release_stage2(kobject_t *kobj) { share_mem_t *sm = container_of(kobj, share_mem_t, kobj); - + task_t *cur_task = thread_get_current_task(); assert(dlist_is_empty(&sm->task_head)); #if IS_ENABLED(CONFIG_MMU) share_mem_free_pmem(sm); mm_limit_free_slab(share_mem_slab, sm->lim, sm); #else - mm_limit_free_align(sm->lim, sm->mem, sm->size); + mm_limit_free_align_raw(cur_task->mm_space.mem_block_inx, sm->lim, sm->mem, sm->size); mm_limit_free(sm->lim, sm); #endif printk("share mem 0x%x free.\n", sm); diff --git a/mkrtos_knl/knl/sys.c b/mkrtos_knl/knl/sys.c index 8e633b4aa..998cddf99 100755 --- a/mkrtos_knl/knl/sys.c +++ b/mkrtos_knl/knl/sys.c @@ -111,10 +111,21 @@ static void sys_syscall(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_tag, break; case MEM_INFO: { - size_t total; - size_t free; + size_t total = 0; + size_t free = 0; - mm_info(&total, &free); + for (int i = 0; i < arch_get_boot_info()->mem.mem_num; i++) + { + size_t item_total; + size_t item_free; + + printk("================================mem:[%d]=============================\n", i); + mm_info_raw(i, &item_total, &item_free); + printk("total:0x%x free:0x%x\n", item_total, item_free); + printk("=====================================================================\n\n", i); + total += item_total; + free += item_free; + } f->regs[1] = total; f->regs[2] = free; tag = msg_tag_init4(0, 0, 0, 0); diff --git a/mkrtos_knl/knl/task.c b/mkrtos_knl/knl/task.c index eb2dd5564..98f90ad2c 100755 --- a/mkrtos_knl/knl/task.c +++ b/mkrtos_knl/knl/task.c @@ -92,6 +92,7 @@ int task_alloc_base_ram(task_t *tk, ram_limit_t *lim, size_t size, int mem_block } memset(ram, 0, size + THREAD_MSG_BUG_LEN); mm_space_set_ram_block(&tk->mm_space, ram, size + THREAD_MSG_BUG_LEN); + tk->mm_space.mem_block_inx = mem_block; printk("task alloc [0x%x - 0x%x]\n", ram, (umword_t)ram + size + THREAD_MSG_BUG_LEN - 1); return 0; } @@ -125,7 +126,9 @@ static void task_unlock_2(spinlock_t *sp0, spinlock_t *sp1, int status0, int sta { spinlock_set(sp0, status0); spinlock_set(sp1, status1); - } else { + } + else + { spinlock_set(sp0, status0); } } @@ -173,7 +176,9 @@ static int task_lock_2(spinlock_t *sp0, spinlock_t *sp1, int *st0, int *st1) } *st0 = status1; *st1 = status0; - } else { + } + else + { status0 = spinlock_lock(sp0); if (status0 < 0) { @@ -334,7 +339,7 @@ static void task_syscall_func(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t i tag = msg_tag_init4(0, 0, 0, -EINVAL); break; } - mm_space_get_ram_block(&tag_task->mm_space, (void**)(&f->regs[1]), (size_t *)(&f->regs[2])); + mm_space_get_ram_block(&tag_task->mm_space, (void **)(&f->regs[1]), (size_t *)(&f->regs[2])); spinlock_set(&tag_task->kobj.lock, status); tag = msg_tag_init4(0, 0, 0, 0); } @@ -405,13 +410,13 @@ static void task_syscall_func(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t i tag = msg_tag_init4(0, 0, 0, -EINVAL); break; } - #if 0/*TODO: 需要检查动态申请的内存*/ +#if 0 /*TODO: 需要检查动态申请的内存*/ if (!is_rw_access(tag_task, (void *)src_addr, copy_len, FALSE)) { ret = -EPERM; goto copy_data_to_end; } - #endif +#endif if (!is_rw_access(dst_task_obj, (void *)dst_addr, copy_len, FALSE)) { ret = -EPERM; @@ -551,7 +556,9 @@ static void task_release_stage1(kobject_t *kobj) pf_t *cur_pf = ((pf_t *)((char *)restore_th + CONFIG_THREAD_BLOCK_SIZE + 8)) - 1; cur_pf->regs[5] = (umword_t)(thread_get_bind_task(restore_th)->mm_space.mm_block); ref_counter_dec_and_release(&tk->ref_cn, &tk->kobj); - } else { + } + else + { break; } } @@ -570,9 +577,10 @@ static void task_release_stage2(kobject_t *kobj) if (tk->mm_space.mm_block) { #if CONFIG_MPU - mm_limit_free_align(tk->lim, tk->mm_space.mm_block, tk->mm_space.mm_block_size); + mm_limit_free_align_raw(tk->mm_space.mem_block_inx, tk->lim, tk->mm_space.mm_block, tk->mm_space.mm_block_size); + #else - mm_limit_free(tk->lim, tk->mm_space.mm_block); + mm_limit_free_raw(tk->mm_space.mem_block_inx, tk->lim, tk->mm_space.mm_block); #endif } #endif diff --git a/mkrtos_knl/knl/thread.c b/mkrtos_knl/knl/thread.c index 5300fb4f5..9a4ddc6d9 100755 --- a/mkrtos_knl/knl/thread.c +++ b/mkrtos_knl/knl/thread.c @@ -335,11 +335,7 @@ bool_t thread_sched(bool_t is_sche) if (is_sche) { // 立刻进行切换 -#if IS_ENABLED(CONFIG_MMU) - sche_arch_sw_context(); -#else arch_to_sche(); -#endif } // printk("sched: cpu:%d sp:0x%lx\n", arch_get_current_cpu_id(), th->sp.sp); cpulock_set(status); @@ -407,9 +403,7 @@ void thread_ready(thread_t *th, bool_t is_sche) else { thread_sched(FALSE); - arch_to_sche(); } - // printk("ready: th:0x%lx\n", th); cpulock_set(status); } /** diff --git a/mkrtos_script/build_f2.sh b/mkrtos_script/build_f2.sh index 90e3fd657..3388a26d5 100755 --- a/mkrtos_script/build_f2.sh +++ b/mkrtos_script/build_f2.sh @@ -1,10 +1,10 @@ #!/bin/bash -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=/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/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/v7-m/nofp # export TOOLCHAIN=/d/GNUArmEmbeddedToolchain/102021.10/bin/ # export TOOLCHAIN_LIB=/d/GNUArmEmbeddedToolchain/102021.10/lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp diff --git a/mkrtos_user/lib/CMakeLists.txt b/mkrtos_user/lib/CMakeLists.txt index 9055cd5e9..d88e332bd 100644 --- a/mkrtos_user/lib/CMakeLists.txt +++ b/mkrtos_user/lib/CMakeLists.txt @@ -25,42 +25,42 @@ add_subdirectory(cutest) add_subdirectory(fd) -add_custom_target( - mkrtos_static_libc ALL - #以下命令用于生成binutils链接需要的库 - COMMAND - cd ${CMAKE_SOURCE_DIR}/build - COMMAND - rm -f -r usr_lib - COMMAND - mkdir -p usr_lib - COMMAND - find mkrtos_user -name "*.a" | xargs cp -t usr_lib - COMMAND - cd usr_lib - COMMAND - ${CMAKE_AR} x libmuslc.a - COMMAND - ${CMAKE_AR} x liblibc_be.a - COMMAND - ${CMAKE_AR} x libsys.a - COMMAND - ${CMAKE_AR} x libsys_svr.a - COMMAND - ${CMAKE_AR} x libsys_util.a - COMMAND - ${CMAKE_AR} x libutil.a - COMMAND - ${CMAKE_AR} cr libnewc.a *.obj - COMMAND - rm *.obj -) -add_dependencies( - mkrtos_static_libc - muslc - libc_be - sys - sys_svr - sys_util - util -) +# add_custom_target( +# mkrtos_static_libc ALL +# #以下命令用于生成binutils链接需要的库 +# COMMAND +# cd ${CMAKE_SOURCE_DIR}/build +# COMMAND +# rm -f -r usr_lib +# COMMAND +# mkdir -p usr_lib +# COMMAND +# find mkrtos_user -name "*.a" | xargs cp -t usr_lib +# COMMAND +# cd usr_lib +# COMMAND +# ${CMAKE_AR} x libmuslc.a +# COMMAND +# ${CMAKE_AR} x liblibc_be.a +# COMMAND +# ${CMAKE_AR} x libsys.a +# COMMAND +# ${CMAKE_AR} x libsys_svr.a +# COMMAND +# ${CMAKE_AR} x libsys_util.a +# COMMAND +# ${CMAKE_AR} x libutil.a +# COMMAND +# ${CMAKE_AR} cr libnewc.a *.obj +# COMMAND +# rm *.obj +# ) +# add_dependencies( +# mkrtos_static_libc +# muslc +# libc_be +# sys +# sys_svr +# sys_util +# util +# ) diff --git a/mkrtos_user/lib/letter-shell/demo/mkrtos/shell_fs_ext.c b/mkrtos_user/lib/letter-shell/demo/mkrtos/shell_fs_ext.c index b1e0f6d97..dbdeac109 100644 --- a/mkrtos_user/lib/letter-shell/demo/mkrtos/shell_fs_ext.c +++ b/mkrtos_user/lib/letter-shell/demo/mkrtos/shell_fs_ext.c @@ -75,11 +75,11 @@ int ls(int argc, char *agrv[]) SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), ls, ls, ls command); int cp(int argc, char *argv[]) { -#define BUFFER_SIZE 64 +#define BUFFER_SIZE 1024 int source_fd, target_fd; ssize_t bytes_read, bytes_written; - char buffer[BUFFER_SIZE]; + char *buffer; int ret; // 检查参数数量 @@ -88,12 +88,19 @@ int cp(int argc, char *argv[]) fprintf(stderr, "example: %s /bin/a.bin /mnt/a.bin\n", argv[0]); return -1; } - + // 分配缓冲区 + buffer = (char *)u_malloc(BUFFER_SIZE); + if (buffer == NULL) + { + perror("malloc buffer is error.\n"); + return -1; + } // 打开源文件 source_fd = open(argv[1], O_RDONLY); if (source_fd == -1) { perror("can not open src file.\n"); + u_free(buffer); return -1; } struct stat st = {0}; @@ -106,11 +113,13 @@ int cp(int argc, char *argv[]) { perror("can not open dest file."); close(source_fd); + u_free(buffer); return -1; } if (ftruncate(target_fd, st.st_size) < 0) { printf("to set fiel size is error.\n"); + u_free(buffer); return -1; } @@ -123,6 +132,7 @@ int cp(int argc, char *argv[]) perror("write file is error.\n"); close(source_fd); close(target_fd); + u_free(buffer); return -1; } } @@ -135,7 +145,7 @@ int cp(int argc, char *argv[]) // 关闭文件 close(source_fd); close(target_fd); - + u_free(buffer); printf("cp file is success.\n"); return 0; diff --git a/mkrtos_user/lib/letter-shell/src/shell.c b/mkrtos_user/lib/letter-shell/src/shell.c index e106de50b..e79dfddad 100644 --- a/mkrtos_user/lib/letter-shell/src/shell.c +++ b/mkrtos_user/lib/letter-shell/src/shell.c @@ -1473,7 +1473,7 @@ void shellExec(Shell *shell) } if (shell->parser.param[shell->parser.paramCount - 1][0] == '@') { - // 指定启动的mem,参数少一个 + // 指定启动的pid pid = atoi(&(shell->parser.param[shell->parser.paramCount - 1][1])); shell->parser.paramCount--; } diff --git a/mkrtos_user/lib/sys/inc/u_util.h b/mkrtos_user/lib/sys/inc/u_util.h index 002c1fb06..f22b15003 100644 --- a/mkrtos_user/lib/sys/inc/u_util.h +++ b/mkrtos_user/lib/sys/inc/u_util.h @@ -39,6 +39,30 @@ #define IS_ENABLED(option) __or(IS_BUILTIN(option), IS_MODULE(option)) +static unsigned int mk_ffs(unsigned int x) +{ + unsigned int ret; + + __asm__ volatile("clz\t%0, %1" + : "=r"(ret) + : "r"(x) + : "cc"); + ret = (sizeof(void *) * 8 - 1) - ret; + return ret; +} +static inline unsigned long is_power_of_2(unsigned long num) +{ + return (num & (num - 1)) == 0; +} +static inline unsigned long align_power_of_2(unsigned long num) +{ + if (is_power_of_2(num)) + { + return num; + } + return (1 << (mk_ffs(num) + 1)); +} + /* Import a binary file */ #define IMPORT_BIN(sect, file, sym) asm (\ ".section " #sect "\n" /* Change section */\ diff --git a/mkrtos_user/server/init/board/ATSURFF437/init.cfg b/mkrtos_user/server/init/board/ATSURFF437/init.cfg index ee48e0cf8..e1642689c 100644 --- a/mkrtos_user/server/init/board/ATSURFF437/init.cfg +++ b/mkrtos_user/server/init/board/ATSURFF437/init.cfg @@ -1,13 +1,14 @@ #一次读取一行,每行代表启动的应用程序 block /dev/block +ram_block -p /dev/rblk -s 512 -n 2048 | 2 appfs -m /bin -d /dev/block -fatfs | 1 +fatfs -m /mnt -d /dev/rblk pin i2c pca9555 display snd a_eth -a_net -# nes /bin/sm.nes +a_net | 1 +# a_nes /bin/sm.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 78ad1af53..ccc82e8c7 100644 --- a/mkrtos_user/server/init/src/heap_stack.c +++ b/mkrtos_user/server/init/src/heap_stack.c @@ -15,7 +15,7 @@ #define HEAP_SIZE (256 * 1024) #define STACK_SIZE (2 * 1024) //(1024 + 256) #else -#define HEAP_SIZE (10 * 1024) +#define HEAP_SIZE (1 * 1024) #define STACK_SIZE (2 * 1024) //(1024 + 256) #endif diff --git a/mkrtos_user/server/init/src/nsfs/ns.c b/mkrtos_user/server/init/src/nsfs/ns.c index 0e32aad42..2c7d3f3aa 100644 --- a/mkrtos_user/server/init/src/nsfs/ns.c +++ b/mkrtos_user/server/init/src/nsfs/ns.c @@ -7,7 +7,7 @@ #include "ns.h" #ifdef MKRTOS #include -#include +#include #include #endif // 其他进程可以注册节点进来,并且可以注册子节点进来,子节点可以注册更多的子节点进来。 @@ -108,7 +108,7 @@ static ns_node_t *node_create(const char *name, node_type_t type, int pid) ns_node_t *tmp; #ifdef MKRTOS - tmp = calloc(sizeof(ns_node_t), 1); + tmp = u_calloc(sizeof(ns_node_t), 1); #else tmp = calloc(sizeof(ns_node_t), 1); #endif @@ -258,7 +258,7 @@ int ns_delnode(const char *path) } cur_node->parent->ref--; #ifdef MKRTOS - free(cur_node); + u_free(cur_node); #else free(cur_node); #endif diff --git a/mkrtos_user/server/init/src/nsfs/nsfs.c b/mkrtos_user/server/init/src/nsfs/nsfs.c index 63730d072..cd0c2810b 100644 --- a/mkrtos_user/server/init/src/nsfs/nsfs.c +++ b/mkrtos_user/server/init/src/nsfs/nsfs.c @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include #include "ns.h" @@ -498,7 +498,7 @@ void fs_ns_del_file_by_pid(const char *path, pid_t pid) int path_len; path_len = strlen(path) + 64; - new_path = malloc(path_len); + new_path = u_malloc(path_len); if (new_path == NULL) { return; @@ -507,7 +507,7 @@ void fs_ns_del_file_by_pid(const char *path, pid_t pid) fd = fs_ns_open(path, O_RDONLY, 0); if (fd < 0) { - free(new_path); + u_free(new_path); return; } while (1) @@ -540,6 +540,6 @@ void fs_ns_del_file_by_pid(const char *path, pid_t pid) fs_ns_remove(new_path); } } - free(new_path); + u_free(new_path); fs_ns_close(fd); } diff --git a/mkrtos_user/server/init/src/pm.c b/mkrtos_user/server/init/src/pm.c index a90355cbb..95c5150ba 100644 --- a/mkrtos_user/server/init/src/pm.c +++ b/mkrtos_user/server/init/src/pm.c @@ -19,7 +19,7 @@ #include "u_sig.h" #include "pm.h" #include "parse_cfg.h" -#include "malloc.h" +#include "u_malloc.h" #include "nsfs.h" #include "sig_cli.h" #include "tty.h" @@ -133,7 +133,7 @@ static void pm_del_watch_by_pid(pm_t *pm, pid_t pid) { slist_del(&pos->node); handler_free_umap(pos->sig_hd); - free(pos); + u_free(pos); } pos = next; } @@ -162,7 +162,7 @@ int pm_rpc_watch_pid(pm_t *pm, obj_handler_t sig_rcv_hd, pid_t pid, int flags) fflush(stdout); return -EEXIST; } - watch_entry_t *entry = (watch_entry_t *)malloc(sizeof(watch_entry_t)); + watch_entry_t *entry = (watch_entry_t *)u_malloc(sizeof(watch_entry_t)); if (!entry) { @@ -220,7 +220,7 @@ static void pm_send_sig_to_task(pm_t *pm, pid_t pid, umword_t sig_val) slist_del(&pos->node); handler_free_umap(pos->sig_hd); //!< 删除信号通知的ipc // handler_free_umap(pos->watch_pid); //!< 删除被watch的进程 - free(pos); + u_free(pos); } pos = next; } diff --git a/mkrtos_user/server/init/src/tty.c b/mkrtos_user/server/init/src/tty.c index 0083207f8..90efb1bc2 100644 --- a/mkrtos_user/server/init/src/tty.c +++ b/mkrtos_user/server/init/src/tty.c @@ -24,7 +24,7 @@ #include "pm.h" #include "pm_svr.h" #include "u_sig.h" -#define CONS_STACK_SIZE 2048 +#define CONS_STACK_SIZE (1024+512) static ATTR_ALIGN(8) uint8_t cons_stack[CONS_STACK_SIZE]; static uint8_t cons_ipc_msg[MSG_BUG_LEN]; static tty_struct_t sys_tty; diff --git a/mkrtos_user/server/net/src/ethernetif.c b/mkrtos_user/server/net/src/ethernetif.c index a428b0023..bbddcb2ee 100644 --- a/mkrtos_user/server/net/src/ethernetif.c +++ b/mkrtos_user/server/net/src/ethernetif.c @@ -47,7 +47,7 @@ static err_t low_level_init(struct netif *netif) tag = u_facotry_create_share_mem(FACTORY_PROT, vpage_create_raw3(KOBJ_ALL_RIGHTS, 0, send_shm_hd), SHARE_MEM_CNT_BUDDY_CNT, 2048); - assert(msg_tag_get_prot(tag) >= 0); + assert(msg_tag_get_prot(tag) >= 0 && "share mem alloc failed."); tag = u_share_mem_map(send_shm_hd, vma_addr_create(VPAGE_PROT_RW, VMA_ADDR_RESV, 0), &send_shm_addr, &send_shm_size); assert(msg_tag_get_prot(tag) >= 0); diff --git a/mkrtos_user/server/shell/src/heap_stack.c b/mkrtos_user/server/shell/src/heap_stack.c index f66f79aba..fcbe49ecc 100644 --- a/mkrtos_user/server/shell/src/heap_stack.c +++ b/mkrtos_user/server/shell/src/heap_stack.c @@ -1,6 +1,6 @@ #include #if !IS_ENABLED(CONFIG_MMU) -#define HEAP_SIZE 16 * 1024 +#define HEAP_SIZE 8 * 1024 #define STACK_SIZE (2 * 1024) #if defined(__CC_ARM) diff --git a/mkrtos_user/user/app/ATSURFF437/nes_simulator/nes_rom/hdl.nes b/mkrtos_user/user/app/ATSURFF437/nes_simulator/nes_rom/hdl.nes new file mode 100644 index 000000000..80eec140a Binary files /dev/null and b/mkrtos_user/user/app/ATSURFF437/nes_simulator/nes_rom/hdl.nes differ diff --git a/mkrtos_user/user/app/ATSURFF437/nes_simulator/vnes/nes_main.c b/mkrtos_user/user/app/ATSURFF437/nes_simulator/vnes/nes_main.c index ac83bee66..6151d8a75 100644 --- a/mkrtos_user/user/app/ATSURFF437/nes_simulator/vnes/nes_main.c +++ b/mkrtos_user/user/app/ATSURFF437/nes_simulator/vnes/nes_main.c @@ -526,14 +526,20 @@ void nes_emulate_frame(void) extern bool_t print_fps; int32_t used_tick = sys_read_tick() - st_tick; - // if (1000 / 60 >= used_tick) - // { - // usleep((1000 / 60 - used_tick) * 1000); - // } + if (1000 / 60 >= used_tick) + { + usleep((1000 / 60 - used_tick) * 1000); + } used_tick = sys_read_tick() - st_tick; if (print_fps) { - printf("fps:%d\n", 1000 / used_tick); + static int i = 0; + + i++; + if (i % 30 == 0) + { + printf("fps:%d\n", 1000 / used_tick); + } } #endif } diff --git a/mkrtos_user/user/app/ATSURFF437/nes_simulator/vnes/nes_ppu.c b/mkrtos_user/user/app/ATSURFF437/nes_simulator/vnes/nes_ppu.c index 740c5e2c5..6ba5c13d7 100644 --- a/mkrtos_user/user/app/ATSURFF437/nes_simulator/vnes/nes_ppu.c +++ b/mkrtos_user/user/app/ATSURFF437/nes_simulator/vnes/nes_ppu.c @@ -5,7 +5,7 @@ * @version V1.1 * @date 2022-05-31 * @brief NES PPU ???? - * ???????????????ye781205??NES?????????, ????! + * ???????????????ye781205??NES?????????, ????��! * @license Copyright (c) 2020-2032, ?????????????????????? **************************************************************************************************** * @attention @@ -116,8 +116,8 @@ uint32 VRAM_accessible() // uint8* get_VROM_tiles() { return VROM_tiles; } // #define MASK_BANK(bank,mask) (bank) = ((bank) & (mask)) -// #define VALIDATE_VROM_BANK(bank) \ -// MASK_BANK(bank,VROM_mask); \ +// #define VALIDATE_VROM_BANK(bank) +// MASK_BANK(bank,VROM_mask); // if((bank) >= (RomHeader->num_8k_vrom_banks * 8)) return; //**************************************************************************************************** @@ -410,7 +410,7 @@ void do_scanline_and_draw(uint8 *buf) } else { - // clear out solid buffer?????????? + // clear out solid buffer??????��???? memset(ppu->solid_buf, 0x00, sizeof(ppu->solid_buf)); } @@ -595,7 +595,7 @@ void write_2007(uint8 data) if (addr < 0x2000) { -#if NES_RAM_SPEED==1 //1:?????? 0:???? +#if NES_RAM_SPEED==1 //1:??????�� 0:???? *(TILE(addr) + (addr & 0xf )) = data;//************************ #else @@ -833,7 +833,7 @@ void PPU_WriteToPort(uint8 data, uint16 addr ) uint32 attrib_addr; uint32 attrib_bits; - #if NES_RAM_SPEED==1 //1:?????? 0:???? + #if NES_RAM_SPEED==1 //1:??????�� 0:???? uint8 pattern_lo; uint8 pattern_hi; uint8 pattern_mask; @@ -872,7 +872,7 @@ void PPU_WriteToPort(uint8 data, uint16 addr ) // CHECK_MMC2(pattern_addr);//******************************************************* - #if NES_RAM_SPEED==1 //1:?????? 0:???? + #if NES_RAM_SPEED==1 //1:??????�� 0:???? data = TILE(pattern_addr) + line; pattern_lo = *data; @@ -980,7 +980,7 @@ void PPU_WriteToPort(uint8 data, uint16 addr ) uint32 spr_height; - #if NES_RAM_SPEED==1 //1:?????? 0:???? + #if NES_RAM_SPEED==1 //1:??????�� 0:???? uint8 pattern_lo; uint8 pattern_hi; @@ -1078,7 +1078,7 @@ void PPU_WriteToPort(uint8 data, uint16 addr ) tile_addr += ppu->spr_pattern_table_addr; } - #if NES_RAM_SPEED==1 //1:?????? 0:???? + #if NES_RAM_SPEED==1 //1:??????�� 0:???? t = TILE(tile_addr) + line; pattern_lo = *t; @@ -1095,11 +1095,11 @@ void PPU_WriteToPort(uint8 data, uint16 addr ) { //uint8 col = 0x00; - // if a sprite has drawn on this pixel, don't draw anything??????????????????????,?????ʦ??? + // if a sprite has drawn on this pixel, don't draw anything??????????????????????,?????�ʦ�??? if (!((*solid) & SPR_WRITTEN_FLAG)) { - #if NES_RAM_SPEED==1 //1:?????? 0:???? + #if NES_RAM_SPEED==1 //1:??????�� 0:???? col = ((pattern_hi >> (7 - x) << 1) & 2) | ((pattern_lo >> (7 - x)) & 1); #else diff --git a/mkrtos_user/user/app/binutils-2.33.1/binutils/nm-new.bin b/mkrtos_user/user/app/binutils-2.33.1/binutils/nm-new.bin deleted file mode 100644 index 153242e26..000000000 Binary files a/mkrtos_user/user/app/binutils-2.33.1/binutils/nm-new.bin and /dev/null differ diff --git a/mkrtos_user/user/app/binutils-2.33.1/binutils/objcopy.bin b/mkrtos_user/user/app/binutils-2.33.1/binutils/objcopy.bin deleted file mode 100644 index dd8d90303..000000000 Binary files a/mkrtos_user/user/app/binutils-2.33.1/binutils/objcopy.bin and /dev/null differ diff --git a/mkrtos_user/user/app/binutils-2.33.1/binutils/objdump.bin b/mkrtos_user/user/app/binutils-2.33.1/binutils/objdump.bin deleted file mode 100644 index 312d34a25..000000000 Binary files a/mkrtos_user/user/app/binutils-2.33.1/binutils/objdump.bin and /dev/null differ diff --git a/mkrtos_user/user/app/binutils-2.33.1/binutils/readelf.bin b/mkrtos_user/user/app/binutils-2.33.1/binutils/readelf.bin deleted file mode 100644 index 9139e2b08..000000000 Binary files a/mkrtos_user/user/app/binutils-2.33.1/binutils/readelf.bin and /dev/null differ diff --git a/mkrtos_user/user/app/binutils-2.33.1/binutils/size.bin b/mkrtos_user/user/app/binutils-2.33.1/binutils/size.bin deleted file mode 100644 index 7ccf7b003..000000000 Binary files a/mkrtos_user/user/app/binutils-2.33.1/binutils/size.bin and /dev/null differ diff --git a/mkrtos_user/user/app/binutils-2.33.1/gas/as-new.bin b/mkrtos_user/user/app/binutils-2.33.1/gas/as-new.bin deleted file mode 100644 index a76cde668..000000000 Binary files a/mkrtos_user/user/app/binutils-2.33.1/gas/as-new.bin and /dev/null differ diff --git a/mkrtos_user/user/app/binutils-2.33.1/ld/ld-new.bin b/mkrtos_user/user/app/binutils-2.33.1/ld/ld-new.bin deleted file mode 100644 index 427a6cc63..000000000 Binary files a/mkrtos_user/user/app/binutils-2.33.1/ld/ld-new.bin and /dev/null differ diff --git a/mkrtos_user/user/drv/ATSURFF437/block/flash.c b/mkrtos_user/user/drv/ATSURFF437/block/flash.c index 0727e83dc..c9a1d9389 100644 --- a/mkrtos_user/user/drv/ATSURFF437/block/flash.c +++ b/mkrtos_user/user/drv/ATSURFF437/block/flash.c @@ -77,7 +77,7 @@ int flash_write_sector(uint32_t sector_inx, uint32_t *p_buffer, uint16_t num_wri } flash_unlock(); - status = flash_sector_erase(sector_inx * SECTOR_SIZE + sys_info.bootfs_start_addr); + status = flash_sector_erase(write_addr); if (status != FLASH_OPERATE_DONE) { flash_lock(); @@ -109,8 +109,8 @@ int flash_init(void) return msg_tag_get_val(tag); } - tag = u_vmam_alloc(VMA_PROT, vma_addr_create(VPAGE_PROT_RW, VMA_ADDR_PAGE_FAULT_SIM, 0), - 32 * 1024 * 1024 /*TODO:*/, 0x8000000, &vaddr); + tag = u_vmam_alloc(VMA_PROT, vma_addr_create(VPAGE_PROT_RWX, VMA_ADDR_PAGE_FAULT_SIM, 0), + align_power_of_2(CONFIG_SYS_TEXT_SIZE), CONFIG_SYS_TEXT_ADDR, &vaddr); if (msg_tag_get_val(tag) < 0) { return msg_tag_get_val(tag); diff --git a/mkrtos_user/user/drv/ATSURFF437/display/at_surf_f437_lcd.c b/mkrtos_user/user/drv/ATSURFF437/display/at_surf_f437_lcd.c index ff60c773b..5fa731c23 100644 --- a/mkrtos_user/user/drv/ATSURFF437/display/at_surf_f437_lcd.c +++ b/mkrtos_user/user/drv/ATSURFF437/display/at_surf_f437_lcd.c @@ -873,7 +873,7 @@ void lcd_color_fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint16_t */ void lcd_num_show(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t size, int32_t num, uint8_t num_bit) { - uint8_t i, buf[12], start; + uint8_t i, buf[12], start = 0; buf[11] = 0; diff --git a/mkrtos_user/user/drv/ATSURFF437/i2c/fs_rpc.c b/mkrtos_user/user/drv/ATSURFF437/i2c/fs_rpc.c index 738e60cd8..914c53cc6 100644 --- a/mkrtos_user/user/drv/ATSURFF437/i2c/fs_rpc.c +++ b/mkrtos_user/user/drv/ATSURFF437/i2c/fs_rpc.c @@ -149,7 +149,7 @@ int fs_svr_open(const char *path, int flags, int mode) int fs_svr_read(int fd, void *buf, size_t len) { - int ret; + int ret = -ENOSYS; file_desc_t *fdp = fd_get(thread_get_src_pid(), fd); if (!fdp) @@ -171,7 +171,7 @@ int fs_svr_read(int fd, void *buf, size_t len) } int fs_svr_write(int fd, void *buf, size_t len) { - int ret; + int ret = -ENOSYS; file_desc_t *fdp = fd_get(thread_get_src_pid(), fd); if (!fdp) @@ -188,6 +188,7 @@ int fs_svr_write(int fd, void *buf, size_t len) { ret = char_dev->ops->write(char_dev->dev, buf, len, &fdp->offset); } + return ret; } void fs_svr_close(int fd) { diff --git a/mkrtos_user/user/drv/ATSURFF437/i2c/mk_i2c_drv_impl.c b/mkrtos_user/user/drv/ATSURFF437/i2c/mk_i2c_drv_impl.c index c6d286ca7..e3debe469 100644 --- a/mkrtos_user/user/drv/ATSURFF437/i2c/mk_i2c_drv_impl.c +++ b/mkrtos_user/user/drv/ATSURFF437/i2c/mk_i2c_drv_impl.c @@ -144,6 +144,7 @@ again: /* config i2c */ i2c_init(hi2c->i2cx, 0x0F, PCA_I2C_CLKCTRL_400K); } + return 0; } static int i2c_bus_configure(mk_i2c_t *drv, umword_t freq) { diff --git a/mkrtos_user/user/drv/ATSURFF437/pca9555/fs_rpc.c b/mkrtos_user/user/drv/ATSURFF437/pca9555/fs_rpc.c index 8bbd14bbd..3c2b076e8 100644 --- a/mkrtos_user/user/drv/ATSURFF437/pca9555/fs_rpc.c +++ b/mkrtos_user/user/drv/ATSURFF437/pca9555/fs_rpc.c @@ -149,7 +149,7 @@ int fs_svr_open(const char *path, int flags, int mode) int fs_svr_read(int fd, void *buf, size_t len) { - int ret; + int ret = -ENOSYS; file_desc_t *fdp = fd_get(thread_get_src_pid(), fd); if (!fdp) @@ -171,7 +171,7 @@ int fs_svr_read(int fd, void *buf, size_t len) } int fs_svr_write(int fd, void *buf, size_t len) { - int ret; + int ret = -ENOSYS; file_desc_t *fdp = fd_get(thread_get_src_pid(), fd); if (!fdp) @@ -188,6 +188,7 @@ int fs_svr_write(int fd, void *buf, size_t len) { ret = char_dev->ops->write(char_dev->dev, buf, len, &fdp->offset); } + return ret; } void fs_svr_close(int fd) {