diff --git a/mkrtos_knl/CMakeLists.txt b/mkrtos_knl/CMakeLists.txt index 40aeecc87..5d84e1dae 100755 --- a/mkrtos_knl/CMakeLists.txt +++ b/mkrtos_knl/CMakeLists.txt @@ -37,7 +37,7 @@ add_dependencies(mkrtos.elf knl) add_dependencies(mkrtos.elf lib) set_target_properties(mkrtos.elf PROPERTIES -LINK_FLAGS "-T ${CMAKE_CURRENT_SOURCE_DIR}/stm32f205rft6_link.lds -z max-page-size=0x1000 --gc-section ") +LINK_FLAGS "-T ${CMAKE_CURRENT_SOURCE_DIR}/stm32_link.lds -z max-page-size=0x1000 --gc-section ") add_custom_target( link_file_dump ALL @@ -47,8 +47,8 @@ add_custom_target( -DKNL_DATA=$ENV{KNL_DATA} -DKNL_OFFSET=$ENV{KEN_OFFSET} -DKNL_DATA_SIZE=$ENV{KNL_DATA_SIZE} - -E -P -<${CMAKE_CURRENT_SOURCE_DIR}/stm32f205rft6_link.lds.S> - ${CMAKE_CURRENT_SOURCE_DIR}/stm32f205rft6_link.lds + -E -P -<${CMAKE_CURRENT_SOURCE_DIR}/stm32_link.lds.S> + ${CMAKE_CURRENT_SOURCE_DIR}/stm32_link.lds ) add_custom_target( diff --git a/mkrtos_knl/inc/knl/obj_space.h b/mkrtos_knl/inc/knl/obj_space.h index 597abad09..6c861aa41 100755 --- a/mkrtos_knl/inc/knl/obj_space.h +++ b/mkrtos_knl/inc/knl/obj_space.h @@ -6,8 +6,8 @@ #include "types.h" #include "mm_wrap.h" -#define OBJ_MAP_TAB_SIZE 2 -#define OBJ_MAP_ENTRY_SIZE 32 +#define OBJ_MAP_TAB_SIZE 4 +#define OBJ_MAP_ENTRY_SIZE 8 #define OBJ_MAP_MAX_ADDR ((OBJ_MAP_ENTRY_SIZE) * (OBJ_MAP_TAB_SIZE)) diff --git a/mkrtos_knl/inc/knl/thread.h b/mkrtos_knl/inc/knl/thread.h index 6fa4b38f1..0f5a15d6d 100755 --- a/mkrtos_knl/inc/knl/thread.h +++ b/mkrtos_knl/inc/knl/thread.h @@ -26,7 +26,7 @@ enum thread_state THREAD_IDLE, //!< 空闲状态 THREAD_DEAD, //!< 死亡状态 THREAD_SUSPEND, //!< 只有接收和发送ipc消息时才能挂起 - THREAD_READY, //!< 正常工作状态 + THREAD_READY, //!< 在就绪队列中 THREAD_TODEAD, //!< 该标志标志线程马上要死亡了,执行完必要操作后,进入THREAD_DEAD状态 }; typedef struct @@ -57,16 +57,14 @@ typedef struct sp_info typedef struct msg_buf { - void *msg; //!< buf,长度是固定的 @see THREAD_MSG_BUG_LEN - // uint8_t len; //!< 这里不是buf的大小,而是存储接收或者发送的长度 - msg_tag_t tag; + void *msg; //!< buf,长度是固定的 @see THREAD_MSG_BUG_LEN + msg_tag_t tag; //!< 存放发送的临时标识 } msg_buf_t; #define THREAD_MAIGC 0xdeadead //!< 用于栈溢出检测 typedef struct thread { - kobject_t kobj; //!< 内核对象节点 - // slist_head_t wait; //!< 用于等待队列 + kobject_t kobj; //!< 内核对象节点 sched_t sche; //!< 调度节点 kobject_t *task; //!< 绑定的task sp_info_t sp; //!< sp信息 diff --git a/mkrtos_knl/knl/ipc.c b/mkrtos_knl/knl/ipc.c index 327cc2670..1eca3731d 100755 --- a/mkrtos_knl/knl/ipc.c +++ b/mkrtos_knl/knl/ipc.c @@ -28,7 +28,6 @@ typedef struct ipc_wait_item { slist_head_t node; thread_t *th; - // ipc_t *ipc; umword_t sleep_times; } ipc_wait_item_t; /** @@ -38,12 +37,12 @@ typedef struct ipc_wait_item typedef struct ipc { kobject_t kobj; //!< 内核对象 - spinlock_t lock; //!< 操作的锁 TODO: 使用内核对象锁 + spinlock_t lock; //!< 操作的锁 slist_head_t wait_send; //!< 发送等待队列 slist_head_t recv_send; //!< 接收等待队列 slist_head_t node; //!< 超时检查链表 - thread_t *svr_th; //!< 服务端 TODO:增加引用计数 - thread_t *last_cli_th; //!< 上一次发送数据的客户端TODO:增加引用计数 + thread_t *svr_th; //!< 服务端 + thread_t *last_cli_th; //!< 上一次发送数据的客户端 ram_limit_t *lim; //!< 内存限额 umword_t user_id; //!< 服务端绑定的数据 } ipc_t; diff --git a/mkrtos_knl/knl/misc.c b/mkrtos_knl/knl/misc.c index 30805e9fc..df611cd4f 100644 --- a/mkrtos_knl/knl/misc.c +++ b/mkrtos_knl/knl/misc.c @@ -141,11 +141,12 @@ void *mpu_ram_alloc(mm_space_t *ms, ram_limit_t *r_limit, size_t ram_size) { umword_t pre_alloc_addr; struct mem_heap *heap = NULL; - /*TODO:临界区保护*/ + umword_t status = cpulock_lock(); again_alloc: heap = mm_get_free(heap, ram_size, &pre_alloc_addr); if (!heap) { + cpulock_set(status); printk("The system is low on memory.\n"); mm_trace(); return NULL; diff --git a/mkrtos_knl/stm32f205rft6_link.lds b/mkrtos_knl/stm32_link.lds similarity index 100% rename from mkrtos_knl/stm32f205rft6_link.lds rename to mkrtos_knl/stm32_link.lds diff --git a/mkrtos_knl/stm32f205rft6_link.lds.S b/mkrtos_knl/stm32_link.lds.S similarity index 100% rename from mkrtos_knl/stm32f205rft6_link.lds.S rename to mkrtos_knl/stm32_link.lds.S diff --git a/mkrtos_user/server/init/src/main.c b/mkrtos_user/server/init/src/main.c index a1ec4ee13..f32aa5816 100644 --- a/mkrtos_user/server/init/src/main.c +++ b/mkrtos_user/server/init/src/main.c @@ -35,8 +35,8 @@ int main(int argc, char *args[]) mpu_test(); ipc_test(); thread_press_test(); -#endif kobj_create_press_test(); +#endif uenv_t env = *u_get_global_env(); obj_handler_t ipc_hd; int ret = rpc_creaite_bind_ipc(THREAD_MAIN, NULL, &ipc_hd);