From f86daa3169b07aad8e04d14d5666fc3f8d6041ad Mon Sep 17 00:00:00 2001 From: zhangzheng <1358745329@qq.com> Date: Thu, 13 Feb 2025 11:18:19 +0800 Subject: [PATCH] del old ipc code && sema support timeout --- .vscode/launch.json | 4 +- mkrtos_configs/ATSURFF437_defconfig | 2 +- mkrtos_configs/STM32F205_defconfig | 2 +- mkrtos_img/CMakeLists.txt | 9 +- mkrtos_knl/arch/cortex-m3/core_it.c | 2 +- mkrtos_knl/arch/cortex-m33/core_it.c | 2 +- mkrtos_knl/arch/cortex-m4/core_it.c | 2 +- mkrtos_knl/drivers/stm32f2/systick/systick.c | 4 + mkrtos_knl/inc/knl/sema.h | 6 +- mkrtos_knl/inc/knl/sleep.h | 13 ++ mkrtos_knl/inc/knl/thread.h | 4 +- mkrtos_knl/knl/sema.c | 18 ++- mkrtos_knl/knl/sleep.c | 124 ++++++++++++++++++ mkrtos_knl/knl/task.c | 2 +- mkrtos_knl/knl/thread.c | 36 ++++- mkrtos_script/build_f2.sh | 8 +- .../lib/letter-shell/demo/mkrtos/shell_port.c | 2 +- .../libc_backend/src/armv7_8m/mm_backend.c | 4 +- mkrtos_user/lib/libc_backend/src/be_exit.c | 8 +- mkrtos_user/lib/libc_backend/src/fs_backend.c | 4 +- mkrtos_user/lib/mkrtos-musl | 2 +- mkrtos_user/lib/sys/inc/u_mutex.h | 2 +- mkrtos_user/lib/sys/inc/u_sema.h | 3 +- mkrtos_user/lib/sys/inc/u_thread.h | 4 +- mkrtos_user/lib/sys/src/u_mutex.c | 4 +- mkrtos_user/lib/sys/src/u_sema.c | 9 +- mkrtos_user/lib/sys/src/u_thread.c | 19 +++ mkrtos_user/lib/sys_svr/src/blk_drv_cli.c | 8 +- mkrtos_user/lib/sys_svr/src/cons_cli.c | 6 +- mkrtos_user/lib/sys_svr/src/drv_cli.c | 10 +- mkrtos_user/lib/sys_svr/src/fs_cli.c | 38 +++--- mkrtos_user/lib/sys_svr/src/net_cli.c | 28 ++-- mkrtos_user/lib/sys_svr/src/ns_cli.c | 4 +- mkrtos_user/lib/sys_svr/src/pm_cli.c | 8 +- mkrtos_user/lib/sys_util/inc/u_rpc_1.h | 14 +- mkrtos_user/lib/sys_util/inc/u_rpc_2.h | 14 +- mkrtos_user/lib/sys_util/inc/u_rpc_3.h | 14 +- mkrtos_user/lib/sys_util/inc/u_rpc_4.h | 14 +- mkrtos_user/lib/sys_util/inc/u_rpc_5.h | 14 +- mkrtos_user/lib/sys_util/inc/u_rpc_6.h | 14 +- mkrtos_user/lib/sys_util/inc/u_rpc_svr.h | 2 +- mkrtos_user/lib/sys_util/src/u_rpc_svr.c | 2 +- mkrtos_user/lib/sys_util/src/u_sleep.c | 3 +- mkrtos_user/server/fs/appfs/fs_rpc.c | 2 + mkrtos_user/server/fs/appfs/main.c | 8 +- mkrtos_user/server/init/src/init.c | 8 +- mkrtos_user/server/init/src/namespace.c | 4 +- mkrtos_user/server/init/src/parse_cfg.c | 2 +- mkrtos_user/server/init/src/pm.c | 4 + mkrtos_user/server/init/src/test/ipc_test.c | 2 + mkrtos_user/server/init/src/test/map_test.c | 2 + mkrtos_user/server/init/src/test/sema_test.c | 6 +- mkrtos_user/server/init/src/test/test_main.c | 5 +- mkrtos_user/server/net/src/main.c | 3 +- mkrtos_user/user/drv/STM32F205/block/main.c | 3 +- 55 files changed, 359 insertions(+), 182 deletions(-) create mode 100644 mkrtos_knl/inc/knl/sleep.h create mode 100644 mkrtos_knl/knl/sleep.c 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_configs/ATSURFF437_defconfig b/mkrtos_configs/ATSURFF437_defconfig index f1f541a49..7c7314802 100644 --- a/mkrtos_configs/ATSURFF437_defconfig +++ b/mkrtos_configs/ATSURFF437_defconfig @@ -32,7 +32,7 @@ CONFIG_FD_MAP_ROW_NR=16 # # Sys util config # -CONFIG_USING_SIG=y +CONFIG_USING_SIG=n CONFIG_SIG_THREAD_STACK_SIZE=512 CONFIG_SIG_THREAD_PRIO=3 # end of Sys util config diff --git a/mkrtos_configs/STM32F205_defconfig b/mkrtos_configs/STM32F205_defconfig index 88d91b17b..4242f138c 100644 --- a/mkrtos_configs/STM32F205_defconfig +++ b/mkrtos_configs/STM32F205_defconfig @@ -32,7 +32,7 @@ CONFIG_FD_MAP_ROW_NR=16 # # Sys util config # -CONFIG_USING_SIG=y +CONFIG_USING_SIG=n CONFIG_SIG_THREAD_STACK_SIZE=512 CONFIG_SIG_THREAD_PRIO=3 # end of Sys util config diff --git a/mkrtos_img/CMakeLists.txt b/mkrtos_img/CMakeLists.txt index 4f710db06..a2249112f 100755 --- a/mkrtos_img/CMakeLists.txt +++ b/mkrtos_img/CMakeLists.txt @@ -59,14 +59,11 @@ add_dependencies(mkrtos_img_dump bootstrap_dump mkrtos_dump init_dump - nes_dump - # app_dump shell_dump - # fatfs_dump appfs_dump vi_dump tst_dump - eth_dump - net_dump - # tcc_dump + # eth_dump + # nes_dump + # net_dump ) \ No newline at end of file diff --git a/mkrtos_knl/arch/cortex-m3/core_it.c b/mkrtos_knl/arch/cortex-m3/core_it.c index 49d4037fd..0b7220b4b 100755 --- a/mkrtos_knl/arch/cortex-m3/core_it.c +++ b/mkrtos_knl/arch/cortex-m3/core_it.c @@ -104,7 +104,7 @@ void MemManage_Handler(void) } // printk("instr || data 0x%x access is error.\n", fault_addr); if (task_vma_page_fault(&(thread_get_current_task()->mm_space.mem_vma), - fault_addr, NULL) < 0) + fault_addr & (~(sizeof(void *) - 1)), NULL) < 0) { printk("[semgement fault] task:0x%x, mem_addr:0x%lx bus_addr:0x%lx .\n", thread_get_current_task(), fault_addr, bus_addr); diff --git a/mkrtos_knl/arch/cortex-m33/core_it.c b/mkrtos_knl/arch/cortex-m33/core_it.c index d2e530196..d1a56aac2 100755 --- a/mkrtos_knl/arch/cortex-m33/core_it.c +++ b/mkrtos_knl/arch/cortex-m33/core_it.c @@ -57,7 +57,7 @@ void MemManage_Handler(void) } // printk("instr || data 0x%x access is error.\n", fault_addr); if (task_vma_page_fault(&(thread_get_current_task()->mm_space.mem_vma), - fault_addr, NULL) < 0) + fault_addr & (~(sizeof(void *) - 1)), NULL) < 0) { printk("[semgement fault] task:0x%x, mem_addr:0x%lx bus_addr:0x%lx .\n", thread_get_current_task(), fault_addr, bus_addr); diff --git a/mkrtos_knl/arch/cortex-m4/core_it.c b/mkrtos_knl/arch/cortex-m4/core_it.c index ba0624335..3e4343c03 100755 --- a/mkrtos_knl/arch/cortex-m4/core_it.c +++ b/mkrtos_knl/arch/cortex-m4/core_it.c @@ -99,7 +99,7 @@ void MemManage_Handler(void) } // printk("instr || data 0x%x access is error.\n", fault_addr); if (task_vma_page_fault(&(thread_get_current_task()->mm_space.mem_vma), - fault_addr, NULL) < 0) + fault_addr & (~(sizeof(void *) - 1)), NULL) < 0) { printk("[semgement fault] task:0x%x, mem_addr:0x%lx bus_addr:0x%lx .\n", thread_get_current_task(), fault_addr, bus_addr); diff --git a/mkrtos_knl/drivers/stm32f2/systick/systick.c b/mkrtos_knl/drivers/stm32f2/systick/systick.c index fcfb78d43..5967ee21c 100755 --- a/mkrtos_knl/drivers/stm32f2/systick/systick.c +++ b/mkrtos_knl/drivers/stm32f2/systick/systick.c @@ -4,6 +4,7 @@ #include "futex.h" #include "irq.h" #include "thread_knl.h" +#include "sleep.h" static umword_t sys_tick_cnt; umword_t sys_tick_cnt_get(void) @@ -16,7 +17,10 @@ void SysTick_Handler(void) // 进行上下文切换 thread_sched(TRUE); sys_tick_cnt++; +#if 0 thread_timeout_check(1); +#endif + thread_check_timeout(); futex_timeout_times_tick(); thread_calc_cpu_usage(); #if 0 diff --git a/mkrtos_knl/inc/knl/sema.h b/mkrtos_knl/inc/knl/sema.h index 4c101ad27..ba34eb5a8 100644 --- a/mkrtos_knl/inc/knl/sema.h +++ b/mkrtos_knl/inc/knl/sema.h @@ -16,15 +16,15 @@ typedef sema_t mutex_t; void sema_init(sema_t *obj, int cnt, int max); void sema_up(sema_t *obj); -void sema_down(sema_t *obj); +umword_t sema_down(sema_t *obj, umword_t ticks); static inline void mutex_init(mutex_t *lock) { sema_init(lock, 1, 1); } -static inline void mutex_lock(mutex_t *lock) +static inline void mutex_lock(mutex_t *lock, umword_t ticks) { - sema_down(lock); + sema_down(lock, ticks); } static inline void mutex_unlock(mutex_t *lock) { diff --git a/mkrtos_knl/inc/knl/sleep.h b/mkrtos_knl/inc/knl/sleep.h new file mode 100644 index 000000000..105478244 --- /dev/null +++ b/mkrtos_knl/inc/knl/sleep.h @@ -0,0 +1,13 @@ +#pragma + +#include "thread.h" +typedef struct thread_wait_entry +{ + slist_head_t node; + thread_t *th; + umword_t times; +} thread_wait_entry_t; +void thread_check_timeout(void); +thread_wait_entry_t *thread_sleep_del(thread_t *th); +void thread_sleep_del_and_wakeup(thread_t *th); +umword_t thread_sleep(umword_t tick); diff --git a/mkrtos_knl/inc/knl/thread.h b/mkrtos_knl/inc/knl/thread.h index bcafc90dd..cc1ef6107 100755 --- a/mkrtos_knl/inc/knl/thread.h +++ b/mkrtos_knl/inc/knl/thread.h @@ -144,14 +144,14 @@ typedef struct thread bool_t is_vcpu; //!< 是否是vcpu msg_buf_t msg; //!< 每个线程独有的消息缓存区 - +#if 0 slist_head_t wait_send_head; //!< 等待头,那些节点等待给当前线程发送数据 spinlock_t recv_lock; //!< 当前线程接收消息时锁住 spinlock_t send_lock; //!< 当前线程发送消息时锁住 bool_t has_wait_send_th; //!< 有线程等待给当前线程发送消息 - thread_t *last_send_th; //!< 当前线程上次接收到谁的数据 kobject_t *ipc_kobj; //!< 发送者放到一个ipc对象中 +#endif umword_t user_id; //!< 接收到的user_id enum thread_state status; //!< 线程状态 diff --git a/mkrtos_knl/knl/sema.c b/mkrtos_knl/knl/sema.c index aa0b432a7..8fffd87bd 100644 --- a/mkrtos_knl/knl/sema.c +++ b/mkrtos_knl/knl/sema.c @@ -10,6 +10,7 @@ #include "init.h" #include "ref.h" #include "slist.h" +#include "sleep.h" #if IS_ENABLED(CONFIG_BUDDY_SLAB) #include static slab_t *sema_slab; @@ -65,8 +66,8 @@ void sema_up(sema_t *obj) slist_del(first_wait_node); if (ref_counter_dec_and_release(&first_wait->thread->ref, &first_wait->thread->kobj) != 1) { - - thread_ready_remote(first_wait->thread, FALSE); + // thread_ready_remote(first_wait->thread, FALSE); + thread_sleep_del_and_wakeup(first_wait->thread); } if (obj->cnt < obj->max_cnt) { @@ -77,12 +78,14 @@ void sema_up(sema_t *obj) spinlock_set(&obj->lock, status); preemption(); } -void sema_down(sema_t *obj) +umword_t sema_down(sema_t *obj, umword_t ticks) { assert(obj); thread_t *th = thread_get_current(); umword_t status; + umword_t remain_sleep = 0; sema_wait_item_t wait_item; + again: status = spinlock_lock(&obj->lock); if (obj->cnt == 0) @@ -90,7 +93,8 @@ again: sema_wait_item_init(&wait_item, th); ref_counter_inc(&th->ref); slist_add_append(&obj->suspend_head, &wait_item.node); - thread_suspend_sw(th, FALSE); + // thread_suspend_sw(th, FALSE); + remain_sleep = thread_sleep(ticks); spinlock_set(&obj->lock, status); preemption(); goto again; @@ -102,6 +106,7 @@ again: // printk("down sema cnt:%d max:%d.\n", obj->cnt, obj->max_cnt); } spinlock_set(&obj->lock, status); + return remain_sleep; } static void sema_syscall(kobject_t *kobj, syscall_prot_t sys_p, @@ -126,7 +131,10 @@ static void sema_syscall(kobject_t *kobj, syscall_prot_t sys_p, break; case SEMA_DOWN: { - sema_down(sema); + umword_t ret; + + ret = sema_down(sema, f->regs[0]); + f->regs[1] = ret; tag = msg_tag_init4(0, 0, 0, 0); } } diff --git a/mkrtos_knl/knl/sleep.c b/mkrtos_knl/knl/sleep.c new file mode 100644 index 000000000..a88341529 --- /dev/null +++ b/mkrtos_knl/knl/sleep.c @@ -0,0 +1,124 @@ +/** + * @file sleep.c + * @author your name (1358745329@qq.com) + * @brief 线程休眠支持 + * @version 0.1 + * @date 2025-02-12 + * + * @copyright Copyright (c) 2025 + * + */ +#include +#include +#include +#include +#include +#include "sleep.h" +#include "arch.h" + +static slist_head_t wait_list; +static spinlock_t lock; + +static inline void thread_wait_entry_init(thread_wait_entry_t *entry, + thread_t *th, mword_t times) +{ + slist_init(&entry->node); + entry->th = th; + entry->times = times; +} +static void thread_timeout_init(void) +{ + slist_init(&wait_list); + spinlock_init(&lock); +} +INIT_KOBJ(thread_timeout_init); +/** + * @brief 必须在中断中调用 + * + */ +void thread_check_timeout(void) +{ + thread_wait_entry_t *pos; + + slist_foreach_not_next( + pos, (slist_head_t *)&wait_list, + node) + { + assert(pos->th->status == THREAD_SUSPEND); + thread_wait_entry_t *next = slist_next_entry( + pos, (slist_head_t *)wait_list, + node); + if (pos->times != 0) + { + pos->times--; + if (pos->times == 0) + { + thread_ready(pos->th, TRUE); + slist_del(&pos->node); + } + } // !< 如果是0,则一直休眠 + pos = next; + } +} +/** + * @brief 从休眠队列中删除 + * + * @param th + */ +thread_wait_entry_t *thread_sleep_del(thread_t *th) +{ + assert(cpulock_get_status()); + thread_wait_entry_t *pos = NULL; + + slist_foreach_not_next( + pos, (slist_head_t *)&wait_list, + node) + { + assert(pos->th->status == THREAD_SUSPEND); + thread_wait_entry_t *next = slist_next_entry( + pos, (slist_head_t *)wait_list, + node); + if (pos->th == th) + { + slist_del(&pos->node); + break; + } + pos = next; + } + return pos; +} +void thread_sleep_del_and_wakeup(thread_t *th) +{ + assert(cpulock_get_status()); + thread_wait_entry_t *wait; + + wait = thread_sleep_del(th); + if (wait == NULL) + { + return; + } + thread_ready(wait->th, TRUE); +} +/** + * @brief 放到休眠队列中 + * + * @param tick + * @return umword_t 返回剩余的休眠时间 + */ +umword_t thread_sleep(umword_t tick) +{ + assert(cpulock_get_status()); + + thread_wait_entry_t entry; + thread_t *cur_th = thread_get_current(); + umword_t status; + + thread_wait_entry_init(&entry, cur_th, tick); + status = spinlock_lock(&lock); + slist_add(&wait_list, &entry.node); + thread_suspend(cur_th); + spinlock_set(&lock, status); + preemption(); + + return entry.times; +} \ No newline at end of file diff --git a/mkrtos_knl/knl/task.c b/mkrtos_knl/knl/task.c index 09e9c35cd..3a2c3ff56 100755 --- a/mkrtos_knl/knl/task.c +++ b/mkrtos_knl/knl/task.c @@ -447,7 +447,7 @@ static void task_syscall_func(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t i { task_t *cur_task = thread_get_current_task(); - mutex_lock(&cur_task->nofity_lock); + mutex_lock(&cur_task->nofity_lock, 0); tag = msg_tag_init4(0, 0, 0, 0); } break; diff --git a/mkrtos_knl/knl/thread.c b/mkrtos_knl/knl/thread.c index a2348c263..1d86cc467 100755 --- a/mkrtos_knl/knl/thread.c +++ b/mkrtos_knl/knl/thread.c @@ -33,6 +33,7 @@ #include "thread_task_arch.h" #include "types.h" #include "sema.h" +#include "sleep.h" #if IS_ENABLED(CONFIG_SMP) #include #endif @@ -51,6 +52,7 @@ enum thread_op YIELD, DO_IPC = 6, //!< 与ipc对象中的额IPC_DO一致 SET_EXEC, //!< 设置异常处理 + SLEEP, }; enum IPC_TYPE { @@ -67,7 +69,7 @@ static void thread_syscall(kobject_t *kobj, syscall_prot_t sys_p, static bool_t thread_put(kobject_t *kobj); static void thread_release_stage1(kobject_t *kobj); static void thread_release_stage2(kobject_t *kobj); - +#if 0 typedef struct thread_wait_entry { slist_head_t node; @@ -84,7 +86,6 @@ static inline void thread_wait_entry_init(thread_wait_entry_t *entry, entry->th = th; entry->times = times; } - static PER_CPU(slist_head_t, wait_send_queue); static PER_CPU(slist_head_t, wait_recv_queue); @@ -96,8 +97,8 @@ static void thread_timeout_init(void) slist_init(pre_cpu_get_var_cpu(i, (&wait_recv_queue))); } } - INIT_KOBJ(thread_timeout_init); +#endif #if IS_ENABLED(CONFIG_BUDDY_SLAB) #include @@ -126,9 +127,11 @@ void thread_init(thread_t *th, ram_limit_t *lim, umword_t flags) kobject_init(&th->kobj, THREAD_TYPE); sched_init(&th->sche); slist_init(&th->futex_node); +#if 0 slist_init(&th->wait_send_head); spinlock_init(&th->recv_lock); spinlock_init(&th->send_lock); +#endif ref_counter_init(&th->ref); ref_counter_inc(&th->ref); thread_arch_init(th, flags); @@ -157,8 +160,11 @@ static void thread_release_stage1_impl(thread_t *th) if (th->status == THREAD_READY) { thread_suspend(th); + preemption(); } th->ipc_status = THREAD_IPC_ABORT; + thread_sleep_del(th); //!< 从休眠中删除 +#if 0 thread_wait_entry_t *pos; slist_foreach_not_next( @@ -202,6 +208,7 @@ static void thread_release_stage1_impl(thread_t *th) } pos2 = next; } +#endif thread_unbind(th); } #if IS_ENABLED(CONFIG_SMP) @@ -499,7 +506,7 @@ thread_t *thread_create(ram_limit_t *ram, umword_t flags) printk("create thread 0x%x\n", th); return th; } - +#if 0 /** * @brief 线程超时检查 * @@ -668,6 +675,8 @@ void thread_timeout_del_recv_remote(thread_t *th, bool_t is_sche) thread_ready(th, is_sche); //!< 直接唤醒接受者 #endif } +#endif + static int ipc_dat_copy_raw(obj_space_t *dst_obj, obj_space_t *src_obj, ram_limit_t *lim, ipc_msg_t *dst_ipc, ipc_msg_t *src_ipc, msg_tag_t tag, int is_reply) { @@ -706,6 +715,7 @@ static int ipc_dat_copy_raw(obj_space_t *dst_obj, obj_space_t *src_obj, ram_limi MIN(tag.msg_buf_len * WORD_BYTES, IPC_MSG_SIZE)); return i; } +#if 0 /** * @brief ipc传输时的数据拷贝 * @@ -1170,6 +1180,7 @@ end: #endif return ret; } +#endif msg_tag_t thread_fast_ipc_call(thread_t *to_th, entry_frame_t *f, umword_t user_id) { task_t *cur_task = thread_get_current_task(); @@ -1195,7 +1206,7 @@ _to_unlock: preemption(); goto _to_unlock; } - mutex_lock(&to_task->nofity_lock); + mutex_lock(&to_task->nofity_lock, 0); if (GET_LSB(*to_task->nofity_bitmap, to_task->nofity_bitmap_len) == GET_LSB((~0ULL), to_task->nofity_bitmap_len)) { mutex_unlock(&to_task->nofity_lock); @@ -1215,7 +1226,7 @@ _to_unlock: dst_ipc, src_ipc, in_tag, FALSE); if (ret >= 0) { - dst_ipc->user[2] = task_pid_get(cur_task); // 设置pid + dst_ipc->user[2] = task_pid_get(cur_task); // 设置pid slist_add(&to_task->nofity_theads_head, &cur_th->com->fast_ipc_node); // 添加到链表中,用于进程关闭时进行释放 pf_s_t *usr_stask_point = (void *)arch_get_user_sp(); @@ -1374,6 +1385,7 @@ msg_tag_t thread_do_ipc(kobject_t *kobj, entry_frame_t *f, umword_t user_id) return thread_fast_ipc_call(to_th, f, user_id); } break; +#if 0 case IPC_CALL: { msg_tag_t in_tag = msg_tag_init(f->regs[0]); @@ -1424,6 +1436,7 @@ msg_tag_t thread_do_ipc(kobject_t *kobj, entry_frame_t *f, umword_t user_id) ret = thread_ipc_call(to_th, in_tag, NULL, ipc_tm_out, NULL, FALSE); return msg_tag_init4(0, 0, 0, ret); } +#endif default: ret = -ENOSYS; break; @@ -1649,6 +1662,17 @@ static void thread_syscall(kobject_t *kobj, syscall_prot_t sys_p, tag = msg_tag_init4(0, 0, 0, 0); } break; + case SLEEP: + { + int ret; + umword_t status; + + status = cpulock_lock(); + ret = thread_sleep(f->regs[0]); + cpulock_set(status); + tag = msg_tag_init4(0, 0, 0, ret); + } + break; } f->regs[0] = tag.raw; } 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/letter-shell/demo/mkrtos/shell_port.c b/mkrtos_user/lib/letter-shell/demo/mkrtos/shell_port.c index 334e12efc..b123d11d3 100644 --- a/mkrtos_user/lib/letter-shell/demo/mkrtos/shell_port.c +++ b/mkrtos_user/lib/letter-shell/demo/mkrtos/shell_port.c @@ -61,7 +61,7 @@ again: rlen = cons_read((uint8_t *)data, len); if (rlen <= 0) { - u_sema_down(SEMA_PROT); + u_sema_down(SEMA_PROT, 0, NULL); goto again; } return rlen; 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 2d09ee3c0..4348da9c8 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 @@ -50,7 +50,7 @@ static void *mm_page_alloc(int page_nr) u_mutex_init(&lock, handler_alloc()); lock_is_init = 1; } - u_mutex_lock(&lock); + 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)) @@ -106,7 +106,7 @@ static int mm_page_free(int st, int nr) { return -EINVAL; } - u_mutex_lock(&lock); + 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); diff --git a/mkrtos_user/lib/libc_backend/src/be_exit.c b/mkrtos_user/lib/libc_backend/src/be_exit.c index ca26c4b12..0f4144826 100644 --- a/mkrtos_user/lib/libc_backend/src/be_exit.c +++ b/mkrtos_user/lib/libc_backend/src/be_exit.c @@ -13,6 +13,7 @@ #include "u_futex.h" #include #include +#include "u_sleep.h" #include #include #include @@ -61,8 +62,10 @@ void be_exit(long exit_code) task_unmap(TASK_THIS, vpage_create_raw3(KOBJ_DELETE_RIGHT, 0, TASK_THIS)); //!< 删除当前task,以及申请得所有对象 a_crash(); //!< 强制退出 } - while (1) { - thread_ipc_wait(ipc_timeout_create2(0, 0), NULL, -1); + while (1) + { + // thread_ipc_wait(ipc_timeout_create2(0, 0), NULL, -1); + u_sleep_ms((umword_t)-1); } } @@ -74,4 +77,3 @@ long sys_exit(va_list ap) be_exit(exit_code); return 0; } - diff --git a/mkrtos_user/lib/libc_backend/src/fs_backend.c b/mkrtos_user/lib/libc_backend/src/fs_backend.c index 4374dba50..dbc326538 100644 --- a/mkrtos_user/lib/libc_backend/src/fs_backend.c +++ b/mkrtos_user/lib/libc_backend/src/fs_backend.c @@ -129,7 +129,7 @@ static int be_tty_read(char *buf, long size) } else if (len == 0) { - u_sema_down(SEMA_PROT); + u_sema_down(SEMA_PROT, 0/*TODO:*/, NULL); continue; } r_len += len; @@ -235,7 +235,7 @@ long be_readv(long fd, const struct iovec *iov, long iovcnt) } else if (read_cn == 0) { - u_sema_down(SEMA_PROT); + u_sema_down(SEMA_PROT, 0, NULL); cons_write_str(".\n"); goto again_read; } diff --git a/mkrtos_user/lib/mkrtos-musl b/mkrtos_user/lib/mkrtos-musl index 81eb9742f..67aedfb90 160000 --- a/mkrtos_user/lib/mkrtos-musl +++ b/mkrtos_user/lib/mkrtos-musl @@ -1 +1 @@ -Subproject commit 81eb9742fef43394a855b617963061e2206d38d4 +Subproject commit 67aedfb90c43e25018e1d1177d6e59b410bf1156 diff --git a/mkrtos_user/lib/sys/inc/u_mutex.h b/mkrtos_user/lib/sys/inc/u_mutex.h index 541db3b3c..104e6db95 100644 --- a/mkrtos_user/lib/sys/inc/u_mutex.h +++ b/mkrtos_user/lib/sys/inc/u_mutex.h @@ -8,5 +8,5 @@ typedef struct u_mutex } u_mutex_t; int u_mutex_init(u_mutex_t *lock, obj_handler_t sema_hd); -void u_mutex_lock(u_mutex_t *lock); +void u_mutex_lock(u_mutex_t *lock, umword_t timeout, umword_t *remain_times); void u_mutex_unlock(u_mutex_t *lock); diff --git a/mkrtos_user/lib/sys/inc/u_sema.h b/mkrtos_user/lib/sys/inc/u_sema.h index 64f037c83..effb5417b 100644 --- a/mkrtos_user/lib/sys/inc/u_sema.h +++ b/mkrtos_user/lib/sys/inc/u_sema.h @@ -4,4 +4,5 @@ #include "u_types.h" msg_tag_t u_sema_up(obj_handler_t obj); -msg_tag_t u_sema_down(obj_handler_t obj); +msg_tag_t u_sema_down(obj_handler_t obj, umword_t timeout, umword_t *remain_times); + diff --git a/mkrtos_user/lib/sys/inc/u_thread.h b/mkrtos_user/lib/sys/inc/u_thread.h index 480c3801d..efb8b83df 100644 --- a/mkrtos_user/lib/sys/inc/u_thread.h +++ b/mkrtos_user/lib/sys/inc/u_thread.h @@ -66,11 +66,13 @@ static inline msg_tag_t thread_run(obj_handler_t obj, uint8_t prio) } msg_tag_t thread_bind_task(obj_handler_t obj, obj_handler_t tk_obj); msg_tag_t thread_set_exec(obj_handler_t obj, obj_handler_t exec_th); - +#if 0 msg_tag_t thread_ipc_wait(ipc_timeout_t timeout, umword_t *obj, obj_handler_t ipc_obj); msg_tag_t thread_ipc_reply(msg_tag_t in_tag, ipc_timeout_t timeout); msg_tag_t thread_ipc_send(msg_tag_t in_tag, obj_handler_t target_th_obj, ipc_timeout_t timeout); msg_tag_t thread_ipc_call(msg_tag_t in_tag, obj_handler_t target_th_obj, ipc_timeout_t timeout); +#endif +msg_tag_t thread_sleep(umword_t ticks); 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); msg_tag_t thread_ipc_fast_replay(msg_tag_t in_tag, obj_handler_t target_obj, int unlock_bitmap); diff --git a/mkrtos_user/lib/sys/src/u_mutex.c b/mkrtos_user/lib/sys/src/u_mutex.c index 2975782c4..588a0b706 100644 --- a/mkrtos_user/lib/sys/src/u_mutex.c +++ b/mkrtos_user/lib/sys/src/u_mutex.c @@ -26,9 +26,9 @@ int u_mutex_init(u_mutex_t *lock, obj_handler_t sema_hd) } return 0; } -void u_mutex_lock(u_mutex_t *lock) +void u_mutex_lock(u_mutex_t *lock, umword_t timeout, umword_t *remain_times) { - u_sema_down(lock->obj); + u_sema_down(lock->obj, timeout, remain_times); } void u_mutex_unlock(u_mutex_t *lock) { diff --git a/mkrtos_user/lib/sys/src/u_sema.c b/mkrtos_user/lib/sys/src/u_sema.c index a1f78203d..316d396ac 100644 --- a/mkrtos_user/lib/sys/src/u_sema.c +++ b/mkrtos_user/lib/sys/src/u_sema.c @@ -22,12 +22,13 @@ msg_tag_t u_sema_up(obj_handler_t obj) return tag; } -msg_tag_t u_sema_down(obj_handler_t obj) +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); + register volatile umword_t r1 asm(ARCH_REG_1); mk_syscall(syscall_prot_create(SEMA_DOWN, SEMA_PROT, obj).raw, - 0, + timeout, 0, 0, 0, @@ -35,5 +36,9 @@ msg_tag_t u_sema_down(obj_handler_t obj) 0); msg_tag_t tag = msg_tag_init(r0); + if (remain_times) + { + *remain_times = r1; + } return tag; } diff --git a/mkrtos_user/lib/sys/src/u_thread.c b/mkrtos_user/lib/sys/src/u_thread.c index 2bbac8bf4..de5d1869a 100644 --- a/mkrtos_user/lib/sys/src/u_thread.c +++ b/mkrtos_user/lib/sys/src/u_thread.c @@ -12,6 +12,7 @@ enum thread_op YIELD, DO_IPC, SET_EXEC, + SLEEP, }; enum IPC_TYPE { @@ -23,6 +24,8 @@ enum IPC_TYPE IPC_FAST_CALL, //!< 快速CALL通信,不切换上下文 IPC_FAST_REPLAY, }; +#if 0 + msg_tag_t thread_ipc_wait(ipc_timeout_t timeout, umword_t *obj, obj_handler_t ipc_obj) { register volatile umword_t r0 asm(ARCH_REG_0); @@ -92,6 +95,22 @@ msg_tag_t thread_ipc_call(msg_tag_t in_tag, obj_handler_t target_th_obj, ipc_tim : ARCH_REG_0); return msg_tag_init(r0); } +#endif +msg_tag_t thread_sleep(umword_t ticks) +{ + register volatile umword_t r0 asm(ARCH_REG_0); + mk_syscall(syscall_prot_create4(SLEEP, THREAD_PROT, -1, TRUE).raw, + ticks, + 0, + 0, + 0, + 0, + 0); + asm __volatile__("" + : + : + : ARCH_REG_0); +} 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); diff --git a/mkrtos_user/lib/sys_svr/src/blk_drv_cli.c b/mkrtos_user/lib/sys_svr/src/blk_drv_cli.c index 58228369f..fe81d4b1e 100644 --- a/mkrtos_user/lib/sys_svr/src/blk_drv_cli.c +++ b/mkrtos_user/lib/sys_svr/src/blk_drv_cli.c @@ -10,7 +10,7 @@ #include #include -RPC_GENERATION_CALL3(TRUE, blk_drv_t, BLK_DRV_PROT, BLK_DRV_WRITE, write, +RPC_GENERATION_CALL3(blk_drv_t, BLK_DRV_PROT, BLK_DRV_WRITE, write, rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, shm_obj, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, inx) @@ -29,7 +29,7 @@ int blk_drv_cli_write(obj_handler_t dm9000_obj, obj_handler_t shm_obj, int len, return msg_tag_get_val(tag); } -RPC_GENERATION_CALL3(TRUE, blk_drv_t, BLK_DRV_PROT, BLK_DRV_READ, read, +RPC_GENERATION_CALL3(blk_drv_t, BLK_DRV_PROT, BLK_DRV_READ, read, rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, shm_obj, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, inx) @@ -49,7 +49,7 @@ int blk_drv_cli_read(obj_handler_t dm9000_obj, obj_handler_t shm_obj, int len, i return msg_tag_get_val(tag); } -RPC_GENERATION_CALL1(TRUE, blk_drv_t, BLK_DRV_PROT, BLK_DRV_MAP, map, +RPC_GENERATION_CALL1(blk_drv_t, BLK_DRV_PROT, BLK_DRV_MAP, map, rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_INOUT, RPC_TYPE_BUF, cli_hd) int blk_drv_cli_map(obj_handler_t dm9000_obj, obj_handler_t *sem_obj) @@ -77,7 +77,7 @@ int blk_drv_cli_map(obj_handler_t dm9000_obj, obj_handler_t *sem_obj) *sem_obj = newfd; return msg_tag_get_val(tag); } -RPC_GENERATION_CALL1(TRUE, blk_drv_t, BLK_DRV_PROT, BLK_DRV_INFO, info, +RPC_GENERATION_CALL1(blk_drv_t, BLK_DRV_PROT, BLK_DRV_INFO, info, rpc_blk_drv_info_t_t, rpc_blk_drv_info_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, info) int blk_drv_cli_info(obj_handler_t obj, blk_drv_info_t *info) { diff --git a/mkrtos_user/lib/sys_svr/src/cons_cli.c b/mkrtos_user/lib/sys_svr/src/cons_cli.c index 15d625da2..13cfbe4c5 100644 --- a/mkrtos_user/lib/sys_svr/src/cons_cli.c +++ b/mkrtos_user/lib/sys_svr/src/cons_cli.c @@ -8,13 +8,13 @@ #include "u_rpc_svr.h" #include -RPC_GENERATION_CALL1(TRUE, cons_t, CONS_PROT, CONS_WRITE, write, +RPC_GENERATION_CALL1(cons_t, CONS_PROT, CONS_WRITE, write, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, data) -RPC_GENERATION_CALL2(TRUE, cons_t, CONS_PROT, CONS_READ, read, +RPC_GENERATION_CALL2(cons_t, CONS_PROT, CONS_READ, read, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_OUT, RPC_TYPE_DATA, data, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len) -RPC_GENERATION_CALL1(TRUE, cons_t, CONS_PROT, CONS_ACTIVE, active, +RPC_GENERATION_CALL1(cons_t, CONS_PROT, CONS_ACTIVE, active, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, flags) int cons_write(const uint8_t *data, int len) diff --git a/mkrtos_user/lib/sys_svr/src/drv_cli.c b/mkrtos_user/lib/sys_svr/src/drv_cli.c index 73806f508..05d62c335 100644 --- a/mkrtos_user/lib/sys_svr/src/drv_cli.c +++ b/mkrtos_user/lib/sys_svr/src/drv_cli.c @@ -10,20 +10,20 @@ #include #include -RPC_GENERATION_CALL2(TRUE, drv_t, FS_PROT, DRV_OPEN, open, +RPC_GENERATION_CALL2(drv_t, FS_PROT, DRV_OPEN, open, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, name, rpc_uint32_t_t, rpc_uint32_t_t, RPC_DIR_IN, RPC_TYPE_DATA, oflags) -RPC_GENERATION_CALL1(TRUE, drv_t, FS_PROT, DRV_CLOSE, close, +RPC_GENERATION_CALL1(drv_t, FS_PROT, DRV_CLOSE, close, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc) -RPC_GENERATION_CALL3(TRUE, drv_t, FS_PROT, DRV_READ, read, +RPC_GENERATION_CALL3(drv_t, FS_PROT, DRV_READ, read, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_OUT, RPC_TYPE_DATA, data, rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size) -RPC_GENERATION_CALL3(TRUE, drv_t, FS_PROT, DRV_WRITE, write, +RPC_GENERATION_CALL3(drv_t, FS_PROT, DRV_WRITE, write, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, data, rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size) -RPC_GENERATION_CALL3(TRUE, drv_t, FS_PROT, DRV_IOCTL, ioctl, +RPC_GENERATION_CALL3(drv_t, FS_PROT, DRV_IOCTL, ioctl, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, desc, rpc_mword_t_t, rpc_mword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, data, rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size) diff --git a/mkrtos_user/lib/sys_svr/src/fs_cli.c b/mkrtos_user/lib/sys_svr/src/fs_cli.c index d607f265e..ef2e93f24 100644 --- a/mkrtos_user/lib/sys_svr/src/fs_cli.c +++ b/mkrtos_user/lib/sys_svr/src/fs_cli.c @@ -16,7 +16,7 @@ typedef struct kstat kstat_t; RPC_TYPE_DEF_ALL(kstat_t) /*open*/ -RPC_GENERATION_CALL3(TRUE, fs_t, FS_PROT, FS_OPEN, open, +RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_OPEN, open, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, flags, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, mode) @@ -55,7 +55,7 @@ sd_t fs_open(const char *path, int flags, int mode) return mk_sd_init2(hd, msg_tag_get_val(tag)).raw; } /*close*/ -RPC_GENERATION_CALL1(TRUE, fs_t, FS_PROT, FS_CLOSE, close, +RPC_GENERATION_CALL1(fs_t, FS_PROT, FS_CLOSE, close, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd) int fs_close(sd_t _fd) { @@ -75,7 +75,7 @@ int fs_close(sd_t _fd) return msg_tag_get_val(tag); } /*read*/ -RPC_GENERATION_CALL3(TRUE, fs_t, FS_PROT, FS_READ, read, +RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_READ, read, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_OUT, RPC_TYPE_DATA, buf, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len) @@ -118,7 +118,7 @@ int fs_read(sd_t _fd, void *buf, size_t len) return rlen; } /*write*/ -RPC_GENERATION_CALL3(TRUE, fs_t, FS_PROT, FS_WRITE, write, +RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_WRITE, write, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, buf, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, len) @@ -164,7 +164,7 @@ int fs_write(sd_t _fd, void *buf, size_t len) return wlen; } /*readdir*/ -RPC_GENERATION_CALL2(TRUE, fs_t, FS_PROT, FS_READDIR, readdir, +RPC_GENERATION_CALL2(fs_t, FS_PROT, FS_READDIR, readdir, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_dirent_t_t, rpc_dirent_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, dir) @@ -192,7 +192,7 @@ int fs_readdir(sd_t _fd, dirent_t *dirent) return msg_tag_get_val(tag); } /*lseek*/ -RPC_GENERATION_CALL3(TRUE, fs_t, FS_PROT, FS_LSEEK, lseek, +RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_LSEEK, lseek, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, offs, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, whence) @@ -221,7 +221,7 @@ int fs_lseek(sd_t _fd, int offs, int whence) return msg_tag_get_val(tag); } /*ftruncate*/ -RPC_GENERATION_CALL2(TRUE, fs_t, FS_PROT, FS_FTRUNCATE, ftruncate, +RPC_GENERATION_CALL2(fs_t, FS_PROT, FS_FTRUNCATE, ftruncate, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_int64_t_t, rpc_int64_t_t, RPC_DIR_IN, RPC_TYPE_DATA, offs) int fs_ftruncate(sd_t _fd, off_t off) @@ -246,7 +246,7 @@ int fs_ftruncate(sd_t _fd, off_t off) } /*fstat*/ // int fstat(int fd, struct stat *statbuf); -RPC_GENERATION_CALL2(TRUE, fs_t, FS_PROT, FS_FSTAT, fstat, +RPC_GENERATION_CALL2(fs_t, FS_PROT, FS_FSTAT, fstat, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_kstat_t_t, rpc_kstat_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, statbuf) int fs_fstat(sd_t _fd, kstat_t *stat) @@ -275,7 +275,7 @@ int fs_fstat(sd_t _fd, kstat_t *stat) return msg_tag_get_val(tag); } // int ioctl(int fd, int req, void *arg) -RPC_GENERATION_CALL3(TRUE, fs_t, FS_PROT, FS_IOCTL, ioctl, +RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_IOCTL, ioctl, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, req, rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, arg) @@ -304,7 +304,7 @@ int fs_ioctl(sd_t _fd, int req, void *arg) return msg_tag_get_val(tag); } // int fcntl(int fd, int cmd, void *arg) -RPC_GENERATION_CALL3(TRUE, fs_t, FS_PROT, FS_FCNTL, fcntl, +RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_FCNTL, fcntl, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, cmd, rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, arg) @@ -334,7 +334,7 @@ int fs_fcntl(sd_t _fd, int cmd, void *arg) } /*fsync*/ -RPC_GENERATION_CALL1(TRUE, fs_t, FS_PROT, FS_FSYNC, fsync, +RPC_GENERATION_CALL1(fs_t, FS_PROT, FS_FSYNC, fsync, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, fd) int fs_fsync(sd_t _fd) { @@ -350,7 +350,7 @@ int fs_fsync(sd_t _fd) } /*int unlink(const char *path)*/ -RPC_GENERATION_CALL1(TRUE, fs_t, FS_PROT, FS_UNLINK, unlink, +RPC_GENERATION_CALL1(fs_t, FS_PROT, FS_UNLINK, unlink, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path) int fs_unlink(const char *path) { @@ -372,7 +372,7 @@ int fs_unlink(const char *path) return msg_tag_get_val(tag); } // int symlink(const char *existing, const char *new) -RPC_GENERATION_CALL2(TRUE, fs_t, FS_PROT, FS_SYMLINK, symlink, +RPC_GENERATION_CALL2(fs_t, FS_PROT, FS_SYMLINK, symlink, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, src, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, dst) @@ -413,7 +413,7 @@ int fs_symlink(const char *src, const char *dst) } /*int mkdir(char *path)*/ -RPC_GENERATION_CALL1(TRUE, fs_t, FS_PROT, FS_MKDIR, mkdir, +RPC_GENERATION_CALL1(fs_t, FS_PROT, FS_MKDIR, mkdir, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, dir) int fs_mkdir(char *path) @@ -437,7 +437,7 @@ int fs_mkdir(char *path) } /*int rmdir(char *path)*/ -RPC_GENERATION_CALL1(TRUE, fs_t, FS_PROT, FS_RMDIR, rmdir, +RPC_GENERATION_CALL1(fs_t, FS_PROT, FS_RMDIR, rmdir, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, dir) int fs_rmdir(char *path) @@ -460,7 +460,7 @@ int fs_rmdir(char *path) return msg_tag_get_val(tag); } /*int rename(char *old, char *new)*/ -RPC_GENERATION_CALL2(TRUE, fs_t, FS_PROT, FS_RENAME, rename, +RPC_GENERATION_CALL2(fs_t, FS_PROT, FS_RENAME, rename, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, old, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, new) @@ -500,7 +500,7 @@ int fs_rename(char *old, char *new) return msg_tag_get_val(tag); } // int stat(const char *restrict path, struct stat *restrict buf) -RPC_GENERATION_CALL2(TRUE, fs_t, FS_PROT, FS_STAT, stat, +RPC_GENERATION_CALL2(fs_t, FS_PROT, FS_STAT, stat, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path, rpc_kstat_t_t, rpc_kstat_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, buf) @@ -534,7 +534,7 @@ int fs_stat(char *path, void *_buf) return msg_tag_get_val(tag); } // ssize_t readlink(const char *restrict path, char *restrict buf, size_t bufsize) -RPC_GENERATION_CALL3(TRUE, fs_t, FS_PROT, FS_READLINK, readlink, +RPC_GENERATION_CALL3(fs_t, FS_PROT, FS_READLINK, readlink, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_OUT, RPC_TYPE_DATA, buf, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, bufsize) @@ -570,7 +570,7 @@ int fs_readlink(const char *path, char *buf, int bufsize) } // static int __statfs(const char *path, struct statfs *buf) -RPC_GENERATION_CALL2(TRUE, fs_t, FS_PROT, FS_STATFS, statfs, +RPC_GENERATION_CALL2(fs_t, FS_PROT, FS_STATFS, statfs, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path, rpc_statfs_t_t, rpc_statfs_t_t, RPC_DIR_OUT, RPC_TYPE_DATA, buf) diff --git a/mkrtos_user/lib/sys_svr/src/net_cli.c b/mkrtos_user/lib/sys_svr/src/net_cli.c index 4d3369377..f8f89624f 100644 --- a/mkrtos_user/lib/sys_svr/src/net_cli.c +++ b/mkrtos_user/lib/sys_svr/src/net_cli.c @@ -28,7 +28,7 @@ RPC_TYPE_DEF_ALL(timeval_t) RPC_TYPE_DEF_ALL(pollfd_t) RPC_TYPE_DEF_ALL(nfds_t) -RPC_GENERATION_CALL3(TRUE, net_t, NET_PROT, NET_ACCEPT, accept, +RPC_GENERATION_CALL3(net_t, NET_PROT, NET_ACCEPT, accept, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s, rpc_socketaddr_t_t, rpc_socketaddr_t_t, RPC_DIR_INOUT, RPC_TYPE_DATA, addr, rpc_socklen_t_t, rpc_socklen_t_t, RPC_DIR_INOUT, RPC_TYPE_DATA, addrlen) @@ -66,7 +66,7 @@ int net_accept(sd_t s, struct sockaddr *addr, socklen_t *addrlen) *addrlen = rpc_addrlen.data; return msg_tag_get_val(tag); } -RPC_GENERATION_CALL3(TRUE, net_t, NET_PROT, NET_BIND, bind, +RPC_GENERATION_CALL3(net_t, NET_PROT, NET_BIND, bind, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s, rpc_socketaddr_t_t, rpc_socketaddr_t_t, RPC_DIR_INOUT, RPC_TYPE_DATA, addr, rpc_socklen_t_t, rpc_socklen_t_t, RPC_DIR_IN, RPC_TYPE_DATA, namelen) @@ -93,7 +93,7 @@ int net_bind(int s, const struct sockaddr *name, socklen_t namelen) tag = net_t_bind_call(hd, &rpc_s, &rpc_addr, &rpc_addrlen); return msg_tag_get_val(tag); } -RPC_GENERATION_CALL2(TRUE, net_t, NET_PROT, NET_SHUTDOWN, shutdown, +RPC_GENERATION_CALL2(net_t, NET_PROT, NET_SHUTDOWN, shutdown, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, how) int net_shutdown(int s, int how) @@ -111,7 +111,7 @@ int net_shutdown(int s, int how) tag = net_t_shutdown_call(hd, &rpc_s, &rpc_how); return msg_tag_get_val(tag); } -RPC_GENERATION_CALL3(TRUE, net_t, NET_PROT, NET_GETPEERNAME, getpeername, +RPC_GENERATION_CALL3(net_t, NET_PROT, NET_GETPEERNAME, getpeername, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s, rpc_socketaddr_t_t, rpc_socketaddr_t_t, RPC_DIR_INOUT, RPC_TYPE_DATA, addr, rpc_socklen_t_t, rpc_socklen_t_t, RPC_DIR_INOUT, RPC_TYPE_DATA, namelen) @@ -147,7 +147,7 @@ int net_getpeername(int s, struct sockaddr *name, socklen_t *namelen) *namelen = rpc_namelen.data; return msg_tag_get_val(tag); } -RPC_GENERATION_CALL3(TRUE, net_t, NET_PROT, NET_GETSOCKNAME, getsockname, +RPC_GENERATION_CALL3(net_t, NET_PROT, NET_GETSOCKNAME, getsockname, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s, rpc_socketaddr_t_t, rpc_socketaddr_t_t, RPC_DIR_INOUT, RPC_TYPE_DATA, name, rpc_socklen_t_t, rpc_socklen_t_t, RPC_DIR_INOUT, RPC_TYPE_DATA, namelen) @@ -183,7 +183,7 @@ int net_getsockname(int s, struct sockaddr *name, socklen_t *namelen) *namelen = rpc_namelen.data; return msg_tag_get_val(tag); } -RPC_GENERATION_CALL5(TRUE, net_t, NET_PROT, NET_GETSOCKOPT, getsockopt, +RPC_GENERATION_CALL5(net_t, NET_PROT, NET_GETSOCKOPT, getsockopt, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, level, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, optname, @@ -229,7 +229,7 @@ int net_getsockopt(int s, int level, int optname, void *optval, socklen_t *optle // memcpy(optval, &rpc_buf.data[0], MIN(*optlen, rpc_buf.data)); return msg_tag_get_val(tag); } -RPC_GENERATION_CALL5(TRUE, net_t, NET_PROT, NET_SETSOCKOPT, setsockopt, +RPC_GENERATION_CALL5(net_t, NET_PROT, NET_SETSOCKOPT, setsockopt, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, level, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, optname, @@ -269,7 +269,7 @@ int net_setsockopt(int s, int level, int optname, const void *optval, socklen_t } return msg_tag_get_val(tag); } -RPC_GENERATION_CALL3(TRUE, net_t, NET_PROT, NET_CONNECT, connect, +RPC_GENERATION_CALL3(net_t, NET_PROT, NET_CONNECT, connect, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s, rpc_socketaddr_t_t, rpc_socketaddr_t_t, RPC_DIR_IN, RPC_TYPE_DATA, name, rpc_socklen_t_t, rpc_socklen_t_t, RPC_DIR_IN, RPC_TYPE_DATA, namelen) @@ -295,7 +295,7 @@ int net_connect(int s, const struct sockaddr *name, socklen_t namelen) tag = net_t_connect_call(hd, &rpc_s, &rpc_name, &rpc_namelen); return msg_tag_get_val(tag); } -RPC_GENERATION_CALL2(TRUE, net_t, NET_PROT, NET_LISTEN, listen, +RPC_GENERATION_CALL2(net_t, NET_PROT, NET_LISTEN, listen, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, backlog) int net_listen(int s, int backlog) @@ -313,7 +313,7 @@ int net_listen(int s, int backlog) tag = net_t_listen_call(hd, &rpc_s, &rpc_backlog); return msg_tag_get_val(tag); } -RPC_GENERATION_CALL4(TRUE, net_t, NET_PROT, NET_RECV, recv, +RPC_GENERATION_CALL4(net_t, NET_PROT, NET_RECV, recv, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s, rpc_ref_array_uint32_t_uint8_t_128_t, rpc_array_uint32_t_uint8_t_128_t, RPC_DIR_IN, RPC_TYPE_DATA, mem, rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, len, @@ -365,7 +365,7 @@ int net_recv(int s, void *mem, size_t len, int flags) return msg_tag_get_val(tag); } -RPC_GENERATION_CALL6(TRUE, net_t, NET_PROT, NET_RECVFROM, recvfrom, +RPC_GENERATION_CALL6(net_t, NET_PROT, NET_RECVFROM, recvfrom, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s, rpc_ref_array_uint32_t_uint8_t_128_t, rpc_array_uint32_t_uint8_t_128_t, RPC_DIR_INOUT, RPC_TYPE_DATA, mem, rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, len, @@ -427,7 +427,7 @@ int net_recvfrom(int s, void *mem, size_t len, int flags, return msg_tag_get_val(tag); } -RPC_GENERATION_CALL4(TRUE, net_t, NET_PROT, NET_SEND, send, +RPC_GENERATION_CALL4(net_t, NET_PROT, NET_SEND, send, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s, rpc_ref_array_uint32_t_uint8_t_128_t, rpc_array_uint32_t_uint8_t_128_t, RPC_DIR_IN, RPC_TYPE_DATA, mem, rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size, @@ -480,7 +480,7 @@ int net_send(int s, const void *dataptr, size_t size, int flags) return msg_tag_get_val(tag); } -RPC_GENERATION_CALL6(TRUE, net_t, NET_PROT, NET_SENDTO, sendto, +RPC_GENERATION_CALL6(net_t, NET_PROT, NET_SENDTO, sendto, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s, rpc_ref_array_uint32_t_uint8_t_128_t, rpc_array_uint32_t_uint8_t_128_t, RPC_DIR_IN, RPC_TYPE_DATA, mem, rpc_size_t_t, rpc_size_t_t, RPC_DIR_IN, RPC_TYPE_DATA, size, @@ -540,7 +540,7 @@ int net_sendto(int s, const void *dataptr, size_t size, int flags, return msg_tag_get_val(tag); } -RPC_GENERATION_CALL3(TRUE, net_t, NET_PROT, NET_SOCKET, socket, +RPC_GENERATION_CALL3(net_t, NET_PROT, NET_SOCKET, socket, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, s, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, type, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, protocol) diff --git a/mkrtos_user/lib/sys_svr/src/ns_cli.c b/mkrtos_user/lib/sys_svr/src/ns_cli.c index 2ea7ce3f2..0afd0e50b 100644 --- a/mkrtos_user/lib/sys_svr/src/ns_cli.c +++ b/mkrtos_user/lib/sys_svr/src/ns_cli.c @@ -68,12 +68,12 @@ static bool_t reg_hd(const char *path, obj_handler_t hd, int split_inx) return FALSE; } -RPC_GENERATION_CALL3(TRUE, ns_t, NS_PROT, NS_REGISTER_OP, register, +RPC_GENERATION_CALL3(ns_t, NS_PROT, NS_REGISTER_OP, register, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path, rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, svr_hd, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, type) -RPC_GENERATION_CALL2(TRUE, ns_t, NS_PROT, NS_QUERY_OP, query, +RPC_GENERATION_CALL2(ns_t, NS_PROT, NS_QUERY_OP, query, rpc_ref_array_uint32_t_uint8_t_32_t, rpc_array_uint32_t_uint8_t_32_t, RPC_DIR_IN, RPC_TYPE_DATA, path, rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_INOUT, RPC_TYPE_BUF, cli_hd) diff --git a/mkrtos_user/lib/sys_svr/src/pm_cli.c b/mkrtos_user/lib/sys_svr/src/pm_cli.c index 7b9901619..410f31d68 100644 --- a/mkrtos_user/lib/sys_svr/src/pm_cli.c +++ b/mkrtos_user/lib/sys_svr/src/pm_cli.c @@ -11,7 +11,7 @@ #include #include -RPC_GENERATION_CALL4(TRUE, pm_t, PM_PROT, PM_RUN_APP, run_app, +RPC_GENERATION_CALL4(pm_t, PM_PROT, PM_RUN_APP, run_app, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, path, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, flags, rpc_ref_file_array_t, rpc_file_array_t, RPC_DIR_IN, RPC_TYPE_DATA, params, @@ -38,7 +38,7 @@ int pm_run_app(const char *path, int flags, uint8_t *params, int params_len) return msg_tag_get_val(tag); } -RPC_GENERATION_CALL2(TRUE, pm_t, PM_PROT, PM_KILL_TASK, kill_task, +RPC_GENERATION_CALL2(pm_t, PM_PROT, PM_KILL_TASK, kill_task, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, pid, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, flags) @@ -54,7 +54,7 @@ int pm_kill_task(int pid, int flags) return msg_tag_get_val(tag); } -RPC_GENERATION_CALL3(TRUE, pm_t, PM_PROT, PM_WATCH_PID, watch_pid, +RPC_GENERATION_CALL3(pm_t, PM_PROT, PM_WATCH_PID, watch_pid, rpc_obj_handler_t_t, rpc_obj_handler_t_t, RPC_DIR_IN, RPC_TYPE_BUF, sig_hd, rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, pid, rpc_int_t, rpc_int_t, RPC_DIR_IN, RPC_TYPE_DATA, flags) @@ -74,7 +74,7 @@ int pm_watch_pid(obj_handler_t sig_hd, pid_t pid, int flags) return msg_tag_get_val(tag); } -RPC_GENERATION_CALL5(TRUE, pm_t, PM_PROT, PM_COPY_DATA, copy_data, +RPC_GENERATION_CALL5(pm_t, PM_PROT, PM_COPY_DATA, copy_data, rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, src_pid, rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, dst_pid, rpc_umword_t_t, rpc_umword_t_t, RPC_DIR_IN, RPC_TYPE_DATA, src_addr, diff --git a/mkrtos_user/lib/sys_util/inc/u_rpc_1.h b/mkrtos_user/lib/sys_util/inc/u_rpc_1.h index e63ca390b..8549c4740 100644 --- a/mkrtos_user/lib/sys_util/inc/u_rpc_1.h +++ b/mkrtos_user/lib/sys_util/inc/u_rpc_1.h @@ -11,7 +11,7 @@ * @brief 该宏用于生成一个客户端的调用函数(传递一个参数) * */ -#define RPC_GENERATION_CALL1(is_fast, struct_type, prot, op, func_name, cli_type0, svr_type0, dir0, rpc_type0, name0) \ +#define RPC_GENERATION_CALL1(struct_type, prot, op, func_name, cli_type0, svr_type0, dir0, rpc_type0, name0) \ msg_tag_t struct_type##_##func_name##_call(obj_handler_t hd, cli_type0 *var0) \ { \ void *buf; \ @@ -32,16 +32,8 @@ PRC_CLI_FILL_MAP_BUF(rpc_type0, cli_type0, var0, dir0, (uint8_t *)msg_ipc->map_buf, off_buf); \ /*msg_tag_t tag = dispatch_test(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), msg_ipc);*/ \ msg_tag_t tag; \ - if (is_fast) \ - { \ - tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \ - hd, 1111, 2222, 3333); \ - } \ - else \ - { \ - tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), hd, \ - ipc_timeout_create2(0, 0)); \ - } \ + tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \ + hd, 1111, 2222, 3333); \ if (msg_tag_get_val(tag) < 0) \ { \ return tag; \ diff --git a/mkrtos_user/lib/sys_util/inc/u_rpc_2.h b/mkrtos_user/lib/sys_util/inc/u_rpc_2.h index 2bdb6e607..522cafbba 100644 --- a/mkrtos_user/lib/sys_util/inc/u_rpc_2.h +++ b/mkrtos_user/lib/sys_util/inc/u_rpc_2.h @@ -8,7 +8,7 @@ #include #include -#define RPC_GENERATION_CALL2(is_fast, struct_type, prot, op, func_name, \ +#define RPC_GENERATION_CALL2(struct_type, prot, op, func_name, \ cli_type0, svr_type0, dir0, rpc_type0, name0, \ cli_type1, svr_type1, dir1, rpc_type1, name1) \ msg_tag_t struct_type##_##func_name##_call(obj_handler_t hd, cli_type0 *var0, cli_type1 *var1) \ @@ -33,16 +33,8 @@ PRC_CLI_FILL_MAP_BUF(rpc_type1, cli_type1, var1, dir1, (uint8_t *)msg_ipc->map_buf, off_buf); \ /*msg_tag_t tag = dispatch_test(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), msg_ipc); */ \ msg_tag_t tag; \ - if (is_fast) \ - { \ - tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \ - hd, 1111, 2222, 3333); \ - } \ - else \ - { \ - tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), hd, \ - ipc_timeout_create2(0, 0)); \ - } \ + tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \ + hd, 1111, 2222, 3333); \ if (msg_tag_get_val(tag) < 0) \ { \ return tag; \ diff --git a/mkrtos_user/lib/sys_util/inc/u_rpc_3.h b/mkrtos_user/lib/sys_util/inc/u_rpc_3.h index e2feb600c..b92ca55b6 100644 --- a/mkrtos_user/lib/sys_util/inc/u_rpc_3.h +++ b/mkrtos_user/lib/sys_util/inc/u_rpc_3.h @@ -8,7 +8,7 @@ #include #include -#define RPC_GENERATION_CALL3(is_fast, struct_type, prot, op, func_name, \ +#define RPC_GENERATION_CALL3(struct_type, prot, op, func_name, \ cli_type0, svr_type0, dir0, rpc_type0, name0, \ cli_type1, svr_type1, dir1, rpc_type1, name1, \ cli_type2, svr_type2, dir2, rpc_type2, name2) \ @@ -36,16 +36,8 @@ PRC_CLI_FILL_MAP_BUF(rpc_type2, cli_type2, var2, dir2, (uint8_t *)msg_ipc->map_buf, off_buf); \ /*msg_tag_t tag = dispatch_test(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), msg_ipc); */ \ msg_tag_t tag; \ - if (is_fast) \ - { \ - tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \ - hd, 1111, 2222, 3333); \ - } \ - else \ - { \ - tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), hd, \ - ipc_timeout_create2(0, 0)); \ - } \ + tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \ + hd, 1111, 2222, 3333); \ if (msg_tag_get_val(tag) < 0) \ { \ return tag; \ diff --git a/mkrtos_user/lib/sys_util/inc/u_rpc_4.h b/mkrtos_user/lib/sys_util/inc/u_rpc_4.h index 15bdc4606..ae23db866 100644 --- a/mkrtos_user/lib/sys_util/inc/u_rpc_4.h +++ b/mkrtos_user/lib/sys_util/inc/u_rpc_4.h @@ -8,7 +8,7 @@ #include #include -#define RPC_GENERATION_CALL4(is_fast, struct_type, prot, op, func_name, \ +#define RPC_GENERATION_CALL4(struct_type, prot, op, func_name, \ cli_type0, svr_type0, dir0, rpc_type0, name0, \ cli_type1, svr_type1, dir1, rpc_type1, name1, \ cli_type2, svr_type2, dir2, rpc_type2, name2, \ @@ -39,16 +39,8 @@ PRC_CLI_FILL_MAP_BUF(rpc_type3, cli_type3, var3, dir3, (uint8_t *)msg_ipc->map_buf, off_buf); \ /*msg_tag_t tag = dispatch_test(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), msg_ipc); */ \ msg_tag_t tag; \ - if (is_fast) \ - { \ - tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \ - hd, 1111, 2222, 3333); \ - } \ - else \ - { \ - tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), hd, \ - ipc_timeout_create2(0, 0)); \ - } \ + tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \ + hd, 1111, 2222, 3333); \ if (msg_tag_get_val(tag) < 0) \ { \ return tag; \ diff --git a/mkrtos_user/lib/sys_util/inc/u_rpc_5.h b/mkrtos_user/lib/sys_util/inc/u_rpc_5.h index b70ba45a2..fd7ad126b 100644 --- a/mkrtos_user/lib/sys_util/inc/u_rpc_5.h +++ b/mkrtos_user/lib/sys_util/inc/u_rpc_5.h @@ -8,7 +8,7 @@ #include #include -#define RPC_GENERATION_CALL5(is_fast, struct_type, prot, op, func_name, \ +#define RPC_GENERATION_CALL5(struct_type, prot, op, func_name, \ cli_type0, svr_type0, dir0, rpc_type0, name0, \ cli_type1, svr_type1, dir1, rpc_type1, name1, \ cli_type2, svr_type2, dir2, rpc_type2, name2, \ @@ -42,16 +42,8 @@ PRC_CLI_FILL_MAP_BUF(rpc_type4, cli_type4, var4, dir4, (uint8_t *)msg_ipc->map_buf, off_buf); \ /*msg_tag_t tag = dispatch_test(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), msg_ipc); */ \ msg_tag_t tag; \ - if (is_fast) \ - { \ - tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \ - hd, 1111, 2222, 3333); \ - } \ - else \ - { \ - tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), hd, \ - ipc_timeout_create2(0, 0)); \ - } \ + tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \ + hd, 1111, 2222, 3333); \ if (msg_tag_get_val(tag) < 0) \ { \ return tag; \ diff --git a/mkrtos_user/lib/sys_util/inc/u_rpc_6.h b/mkrtos_user/lib/sys_util/inc/u_rpc_6.h index a15df6937..026963b44 100644 --- a/mkrtos_user/lib/sys_util/inc/u_rpc_6.h +++ b/mkrtos_user/lib/sys_util/inc/u_rpc_6.h @@ -8,7 +8,7 @@ #include #include -#define RPC_GENERATION_CALL6(is_fast, struct_type, prot, op, func_name, \ +#define RPC_GENERATION_CALL6(struct_type, prot, op, func_name, \ cli_type0, svr_type0, dir0, rpc_type0, name0, \ cli_type1, svr_type1, dir1, rpc_type1, name1, \ cli_type2, svr_type2, dir2, rpc_type2, name2, \ @@ -45,16 +45,8 @@ PRC_CLI_FILL_MAP_BUF(rpc_type5, cli_type5, var5, dir5, (uint8_t *)msg_ipc->map_buf, off_buf); \ /*msg_tag_t tag = dispatch_test(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), 0), msg_ipc); */ \ msg_tag_t tag; \ - if (is_fast) \ - { \ - tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \ - hd, 1111, 2222, 3333); \ - } \ - else \ - { \ - tag = thread_ipc_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), hd, \ - ipc_timeout_create2(0, 0)); \ - } \ + tag = thread_ipc_fast_call(msg_tag_init4(0, ROUND_UP(off, WORD_BYTES), ROUND_UP(off_buf, WORD_BYTES), prot), \ + hd, 1111, 2222, 3333); \ if (msg_tag_get_val(tag) < 0) \ { \ return tag; \ diff --git a/mkrtos_user/lib/sys_util/inc/u_rpc_svr.h b/mkrtos_user/lib/sys_util/inc/u_rpc_svr.h index 1590d0580..41e126e30 100644 --- a/mkrtos_user/lib/sys_util/inc/u_rpc_svr.h +++ b/mkrtos_user/lib/sys_util/inc/u_rpc_svr.h @@ -36,7 +36,7 @@ rpc_svr_obj_t *meta_find_svr_obj(umword_t prot); int meta_reg_svr_obj(rpc_svr_obj_t *svr_obj, umword_t prot); int meta_reg_svr_obj_raw(meta_t *meta, rpc_svr_obj_t *svr_obj, umword_t prot); int rpc_creaite_bind_ipc(obj_handler_t th, void *obj, obj_handler_t *ipc_hd); -void rpc_loop(void); #if 0 +void rpc_loop(void); int rpc_mtd_loop(void); #endif diff --git a/mkrtos_user/lib/sys_util/src/u_rpc_svr.c b/mkrtos_user/lib/sys_util/src/u_rpc_svr.c index e3a8637a0..2b61e5568 100644 --- a/mkrtos_user/lib/sys_util/src/u_rpc_svr.c +++ b/mkrtos_user/lib/sys_util/src/u_rpc_svr.c @@ -164,6 +164,7 @@ int rpc_meta_init(obj_handler_t th, obj_handler_t *ret_ipc_hd) { return rpc_creaite_bind_ipc(th, &meta_obj.svr, ret_ipc_hd); } +#if 0 /** * @brief RPC循环处理消息 * @@ -201,7 +202,6 @@ void rpc_loop(void) thread_ipc_reply(tag, ipc_timeout_create2(0, 0)); } } -#if 0 #define RPC_MTD_TH_STACK_SIZE (1024 + 256) typedef struct mtd_params { diff --git a/mkrtos_user/lib/sys_util/src/u_sleep.c b/mkrtos_user/lib/sys_util/src/u_sleep.c index 2b316d232..e46634e8d 100644 --- a/mkrtos_user/lib/sys_util/src/u_sleep.c +++ b/mkrtos_user/lib/sys_util/src/u_sleep.c @@ -23,5 +23,6 @@ static obj_handler_t hd = HANDLER_INVALID; void u_sleep_ms(size_t ms) { umword_t sleep_tick = ROUND_UP(ms, (1000 / CONFIG_SYS_SCHE_HZ)); - thread_ipc_wait(ipc_timeout_create2(0, sleep_tick), NULL, -1); + // thread_ipc_wait(ipc_timeout_create2(0, sleep_tick), NULL, -1); + thread_sleep(sleep_tick); } diff --git a/mkrtos_user/server/fs/appfs/fs_rpc.c b/mkrtos_user/server/fs/appfs/fs_rpc.c index 34577d8e5..e3ddea35f 100644 --- a/mkrtos_user/server/fs/appfs/fs_rpc.c +++ b/mkrtos_user/server/fs/appfs/fs_rpc.c @@ -117,10 +117,12 @@ int fs_svr_statfs(const char *path, struct statfs *buf) { return -ENOSYS; } +#if 0 void fs_svr_loop(void) { rpc_loop(); } +#endif static const fs_operations_t ops = { .fs_svr_open = fs_svr_open, diff --git a/mkrtos_user/server/fs/appfs/main.c b/mkrtos_user/server/fs/appfs/main.c index 0ddc4d039..593a644b7 100644 --- a/mkrtos_user/server/fs/appfs/main.c +++ b/mkrtos_user/server/fs/appfs/main.c @@ -17,6 +17,7 @@ #include "appfs.h" #include "hw_block.h" #include "appfs_open.h" +#include "u_sleep.h" #define STACK_COM_ITME_SIZE (2 * 1024) ATTR_ALIGN(8) uint8_t stack_coms[STACK_COM_ITME_SIZE]; @@ -78,7 +79,12 @@ int main(int argc, char *argv[]) fs_svr_init(); ns_register(mount_path, hd, MOUNT_NODE); cons_write_str("appfs mount success\n"); - +#if 0 fs_svr_loop(); +#endif + while (1) + { + u_sleep_ms((umword_t)(-1)); + } return 0; } \ No newline at end of file diff --git a/mkrtos_user/server/init/src/init.c b/mkrtos_user/server/init/src/init.c index 028d8aa44..1c0d9a27a 100644 --- a/mkrtos_user/server/init/src/init.c +++ b/mkrtos_user/server/init/src/init.c @@ -34,7 +34,7 @@ #define DEFAULT_INIT_CFG "init.cfg" -#define STACK_COM_ITME_SIZE (3*1024) +#define STACK_COM_ITME_SIZE (3 * 1024) ATTR_ALIGN(8) uint8_t stack_coms[STACK_COM_ITME_SIZE]; uint8_t msg_buf_coms[MSG_BUG_LEN]; @@ -70,6 +70,10 @@ int main(int argc, char *args[]) ret = parse_cfg(DEFAULT_INIT_CFG, env); printf("run app num is %d.\n", ret); - namespace_loop(); + // namespace_loop(); + while (1) + { + u_sleep_ms((umword_t)(-1)); + } return 0; } diff --git a/mkrtos_user/server/init/src/namespace.c b/mkrtos_user/server/init/src/namespace.c index 9f27f2e72..2cec2c71d 100644 --- a/mkrtos_user/server/init/src/namespace.c +++ b/mkrtos_user/server/init/src/namespace.c @@ -556,13 +556,13 @@ int namespace_query(const char *path, obj_handler_t *hd) ns_unlock(); return ret_inx; } - +#if 0 void namespace_loop(void) { rpc_loop(); // rpc_mtd_loop(); } - +#endif int fs_svr_mkdir(char *path) { int ret = ns_reg(path, 0, DIR_NODE); diff --git a/mkrtos_user/server/init/src/parse_cfg.c b/mkrtos_user/server/init/src/parse_cfg.c index 12b4ca5fe..46deab40e 100644 --- a/mkrtos_user/server/init/src/parse_cfg.c +++ b/mkrtos_user/server/init/src/parse_cfg.c @@ -117,7 +117,7 @@ int parse_cfg(const char *parse_cfg_file_name, uenv_t *env) msg_tag_t tag; sys_info_t sys_info; - u_mutex_lock(&cmd_lock); + u_mutex_lock(&cmd_lock, 0, NULL); tag = sys_read_info(SYS_PROT, &sys_info, 0); if (msg_tag_get_val(tag) < 0) diff --git a/mkrtos_user/server/init/src/pm.c b/mkrtos_user/server/init/src/pm.c index 19d5e6838..bff2cf515 100644 --- a/mkrtos_user/server/init/src/pm.c +++ b/mkrtos_user/server/init/src/pm.c @@ -137,6 +137,7 @@ int pm_rpc_watch_pid(pm_t *pm, obj_handler_t sig_rcv_hd, pid_t pid, int flags) printf("[pm] watch pid:%d, sig hd:%d.\n", src_pid, sig_rcv_hd); return 0; } +#if IS_ENABLED(CONFIG_USING_SIG) /** * @brief pm给task的信号线程发送消息 * @@ -175,6 +176,7 @@ static bool_t pm_send_sig_to_task(pm_t *pm, pid_t pid, umword_t sig_val) pos = next; } } +#endif /** * @brief 杀死某个进程 * @@ -195,7 +197,9 @@ int pm_rpc_kill_task(int pid, int flags) ns_node_del_by_pid(pid, flags); //!< 从ns中删除 pm_del_watch_by_pid(&pm, pid); //!< 从watch中删除 +#if IS_ENABLED(CONFIG_USING_SIG) pm_send_sig_to_task(&pm, pid, KILL_SIG); //!< 给watch者发送sig +#endif // handler_del_umap(pid); printf("[pm] kill pid:%d.\n", pid); return 0; diff --git a/mkrtos_user/server/init/src/test/ipc_test.c b/mkrtos_user/server/init/src/test/ipc_test.c index d3abea14e..2e9160c88 100644 --- a/mkrtos_user/server/init/src/test/ipc_test.c +++ b/mkrtos_user/server/init/src/test/ipc_test.c @@ -1,3 +1,4 @@ +#if 0 #include "u_log.h" #include "u_prot.h" #include "u_factory.h" @@ -229,3 +230,4 @@ CuSuite *ipc_test_suite(void) return &suite; } +#endif \ No newline at end of file diff --git a/mkrtos_user/server/init/src/test/map_test.c b/mkrtos_user/server/init/src/test/map_test.c index 1ed2e8a06..6310166c7 100644 --- a/mkrtos_user/server/init/src/test/map_test.c +++ b/mkrtos_user/server/init/src/test/map_test.c @@ -1,3 +1,4 @@ +#if 0 #include "u_log.h" #include "u_prot.h" #include "u_factory.h" @@ -91,3 +92,4 @@ CuSuite *map_test_suite(void) return &suite; } +#endif diff --git a/mkrtos_user/server/init/src/test/sema_test.c b/mkrtos_user/server/init/src/test/sema_test.c index 70579796a..117462a3d 100644 --- a/mkrtos_user/server/init/src/test/sema_test.c +++ b/mkrtos_user/server/init/src/test/sema_test.c @@ -21,7 +21,7 @@ int u_sema_test(void) assert(msg_tag_get_val(tag) >= 0); u_sema_up(sema_hd); - u_sema_down(sema_hd); + u_sema_down(sema_hd, 0, NULL); handler_free_umap(sema_hd); return 0; @@ -55,7 +55,7 @@ static void *thread_th2(void *arg) while (1) { printf("sema_down start\n"); - u_sema_down(sema_hd2); + u_sema_down(sema_hd2, 0, NULL); u_sleep_ms(50); printf("sema_down end\n"); if (j == TEST_CN) @@ -73,7 +73,7 @@ static void *thread_th3(void *arg) while (1) { printf("sema_down2 start\n"); - u_sema_down(sema_hd2); + u_sema_down(sema_hd2, 0, NULL); u_sleep_ms(50); printf("sema_down2 end\n"); if (j == TEST_CN) diff --git a/mkrtos_user/server/init/src/test/test_main.c b/mkrtos_user/server/init/src/test/test_main.c index e6d0d9b2a..f87d0f021 100644 --- a/mkrtos_user/server/init/src/test/test_main.c +++ b/mkrtos_user/server/init/src/test/test_main.c @@ -15,13 +15,16 @@ static void RunAllTests(void) exit(1); } CuSuiteInit(&suite); - +#if 0 CuSuiteAddSuite(&suite, ipc_test_suite()); +#endif CuSuiteAddSuite(&suite, ulog_test_suite()); CuSuiteAddSuite(&suite, printf_test_suite()); CuSuiteAddSuite(&suite, vmm_test_suite()); CuSuiteAddSuite(&suite, sharem_mem_test_suite()); +#if 0 CuSuiteAddSuite(&suite, map_test_suite()); +#endif CuSuiteAddSuite(&suite, thread_base_test_suite()); CuSuiteAddSuite(&suite, sema_test_suite()); CuSuiteAddSuite(&suite, pthread_base_test_suite()); diff --git a/mkrtos_user/server/net/src/main.c b/mkrtos_user/server/net/src/main.c index efd1a1ae1..a5fc29a66 100644 --- a/mkrtos_user/server/net/src/main.c +++ b/mkrtos_user/server/net/src/main.c @@ -18,6 +18,7 @@ #include "fs_rpc.h" #include "net_rpc.h" #include "u_fast_ipc.h" +#include "net_test.h" static umword_t addr; static umword_t size; obj_handler_t net_drv_hd; @@ -107,7 +108,7 @@ again: net_test(); while (1) { - if (msg_tag_get_prot(u_sema_down(sem_hd)) < 0) + if (msg_tag_get_prot(u_sema_down(sem_hd, 0, NULL)) < 0) { printf("error.\n"); } diff --git a/mkrtos_user/user/drv/STM32F205/block/main.c b/mkrtos_user/user/drv/STM32F205/block/main.c index 3e7273b79..a7de3e20c 100644 --- a/mkrtos_user/user/drv/STM32F205/block/main.c +++ b/mkrtos_user/user/drv/STM32F205/block/main.c @@ -122,6 +122,7 @@ int main(int argc, char *argv[]) while (1) { - rpc_loop(); + // rpc_loop(); + u_sleep_ms((umword_t)(-1)); } }