修复在Os优化时系统调用参数传递问题
This commit is contained in:
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@@ -145,7 +145,8 @@
|
||||
"u_rpc_2.h": "c",
|
||||
"ns_cli.h": "c",
|
||||
"fs_cli.h": "c",
|
||||
"u_rpc_1.h": "c"
|
||||
"u_rpc_1.h": "c",
|
||||
"__config": "c"
|
||||
},
|
||||
"cortex-debug.showRTOS": false,
|
||||
}
|
||||
@@ -36,7 +36,7 @@ void thread_knl_pf_set(thread_t *cur_th, void *pc)
|
||||
}
|
||||
void thread_user_pf_set(thread_t *cur_th, void *pc, void *user_sp, void *ram, umword_t stack)
|
||||
{
|
||||
assert((((umword_t)user_sp) & 0x7UL) == 0);
|
||||
// assert((((umword_t)user_sp) & 0x7UL) == 0);
|
||||
umword_t usp = ((umword_t)(user_sp - 8) & ~0x7UL);
|
||||
|
||||
if (stack)
|
||||
|
||||
@@ -62,6 +62,10 @@ msg_tag_t factory_create_ipc(obj_handler_t obj, vpage_t vpage)
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0");
|
||||
msg_tag_t tag = msg_tag_init(r0);
|
||||
|
||||
return tag;
|
||||
|
||||
@@ -21,6 +21,10 @@ msg_tag_t ipc_bind(obj_handler_t obj, obj_handler_t tag_th, umword_t user_obj)
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0");
|
||||
msg_tag_t tag = msg_tag_init(r0);
|
||||
|
||||
return tag;
|
||||
@@ -37,6 +41,10 @@ msg_tag_t ipc_wait(obj_handler_t obj, umword_t *user_obj)
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0", "r1");
|
||||
if (user_obj)
|
||||
{
|
||||
*user_obj = r1;
|
||||
@@ -54,6 +62,10 @@ msg_tag_t ipc_reply(obj_handler_t obj, msg_tag_t in_tag)
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0");
|
||||
msg_tag_t tag = msg_tag_init(r0);
|
||||
|
||||
return tag;
|
||||
@@ -69,6 +81,10 @@ msg_tag_t ipc_call(obj_handler_t obj, msg_tag_t in_tag, ipc_timeout_t timeout)
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0");
|
||||
msg_tag_t tag = msg_tag_init(r0);
|
||||
|
||||
return tag;
|
||||
|
||||
@@ -29,6 +29,10 @@ msg_tag_t uirq_bind(obj_handler_t obj_inx, umword_t irq_no, umword_t prio_sub_pr
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0");
|
||||
msg_tag_t tag = msg_tag_init(r0);
|
||||
|
||||
return tag;
|
||||
@@ -44,6 +48,10 @@ msg_tag_t uirq_wait(obj_handler_t obj_inx)
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0");
|
||||
msg_tag_t tag = msg_tag_init(r0);
|
||||
|
||||
return tag;
|
||||
@@ -59,6 +67,10 @@ msg_tag_t uirq_ack(obj_handler_t obj_inx, umword_t irq_no)
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0");
|
||||
msg_tag_t tag = msg_tag_init(r0);
|
||||
|
||||
return tag;
|
||||
|
||||
@@ -26,6 +26,10 @@ static msg_tag_t ulog_read_bytes_raw(obj_handler_t obj_inx, umword_t data[5], in
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0", "r1", "r2", "r3", "r4", "r5");
|
||||
msg_tag_t tag = msg_tag_init(r0);
|
||||
{
|
||||
((umword_t *)data)[0] = r1;
|
||||
|
||||
@@ -23,6 +23,10 @@ void *mm_alloc_page(obj_handler_t obj_inx, umword_t pnf_nr, uint8_t attrs)
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0", "r1", "r2", "r3");
|
||||
{
|
||||
msg_tag_t tag = msg_tag_init(r0);
|
||||
|
||||
|
||||
@@ -27,10 +27,15 @@ msg_tag_t sys_read_info(obj_handler_t obj, sys_info_t *info)
|
||||
0,
|
||||
0);
|
||||
msg_tag_t tag = msg_tag_init(r0);
|
||||
|
||||
asm __volatile__(""
|
||||
:
|
||||
: :"r0", "r1", "r2");
|
||||
if (info)
|
||||
{
|
||||
info->sys_tick = r1;
|
||||
info->bootfs_start_addr = r2;
|
||||
}
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
@@ -19,6 +19,10 @@ msg_tag_t task_obj_valid(obj_handler_t dst_task, obj_handler_t obj_inx)
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0");
|
||||
msg_tag_t tag = msg_tag_init(r0);
|
||||
|
||||
return tag;
|
||||
@@ -35,6 +39,10 @@ msg_tag_t task_map(obj_handler_t dst_task, obj_handler_t src_obj, obj_handler_t
|
||||
attrs,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0");
|
||||
msg_tag_t tag = msg_tag_init(r0);
|
||||
|
||||
return tag;
|
||||
@@ -67,6 +75,10 @@ msg_tag_t task_alloc_ram_base(obj_handler_t task_han, umword_t size, addr_t *all
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0", "r1");
|
||||
if (alloc_addr)
|
||||
{
|
||||
*alloc_addr = r1;
|
||||
|
||||
@@ -22,6 +22,10 @@ msg_tag_t thread_msg_buf_set(obj_handler_t obj, void *msg)
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0", "r1", "r2");
|
||||
return msg_tag_init(r0);
|
||||
}
|
||||
msg_tag_t thread_msg_buf_get(obj_handler_t obj, umword_t *msg, umword_t *len)
|
||||
@@ -37,6 +41,10 @@ msg_tag_t thread_msg_buf_get(obj_handler_t obj, umword_t *msg, umword_t *len)
|
||||
0,
|
||||
0,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0", "r1", "r2");
|
||||
if (msg)
|
||||
{
|
||||
*msg = r1;
|
||||
@@ -59,6 +67,10 @@ msg_tag_t thread_exec_regs(obj_handler_t obj, umword_t pc, umword_t sp, umword_t
|
||||
ram,
|
||||
cp_stack,
|
||||
0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0");
|
||||
msg_tag_t tag = msg_tag_init(r0);
|
||||
|
||||
return tag;
|
||||
@@ -88,6 +100,10 @@ msg_tag_t thread_bind_task(obj_handler_t obj, obj_handler_t tk_obj)
|
||||
0,
|
||||
0,
|
||||
0, 0);
|
||||
asm __volatile__(""
|
||||
:
|
||||
:
|
||||
: "r0");
|
||||
msg_tag_t tag = msg_tag_init(r0);
|
||||
|
||||
return tag;
|
||||
|
||||
@@ -43,7 +43,7 @@ int app_load(const char *name, uenv_t *cur_env)
|
||||
sys_info_t sys_info;
|
||||
|
||||
tag = sys_read_info(SYS_PROT, &sys_info);
|
||||
if (msg_tag_get_val(tag))
|
||||
if (msg_tag_get_val(tag) < 0)
|
||||
{
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
@@ -35,28 +35,27 @@ int main(int argc, char *args[])
|
||||
mpu_test();
|
||||
ipc_test();
|
||||
#endif
|
||||
thread_press_test();
|
||||
// uenv_t env = *u_get_global_env();
|
||||
// obj_handler_t ipc_hd;
|
||||
// int ret = rpc_creaite_bind_ipc(THREAD_MAIN, NULL, &ipc_hd);
|
||||
// assert(ret >= 0);
|
||||
// env.ns_hd = ipc_hd;
|
||||
// thread_press_test();
|
||||
uenv_t env = *u_get_global_env();
|
||||
obj_handler_t ipc_hd;
|
||||
int ret = rpc_creaite_bind_ipc(THREAD_MAIN, NULL, &ipc_hd);
|
||||
assert(ret >= 0);
|
||||
env.ns_hd = ipc_hd;
|
||||
|
||||
// // ret = app_load("fatfs", &env);
|
||||
// // if (ret < 0)
|
||||
// // {
|
||||
// // printf("app load fail, 0x%x\n", ret);
|
||||
// // }
|
||||
|
||||
// ret = app_load("app", &env);
|
||||
// ret = app_load("fatfs", &env);
|
||||
// if (ret < 0)
|
||||
// {
|
||||
// printf("app load fail, 0x%x\n", ret);
|
||||
// }
|
||||
// namespace_init(ipc_hd);
|
||||
|
||||
// namespace_loop();
|
||||
while(1);
|
||||
ret = app_load("app", &env);
|
||||
if (ret < 0)
|
||||
{
|
||||
printf("app load fail, 0x%x\n", ret);
|
||||
}
|
||||
namespace_init(ipc_hd);
|
||||
|
||||
namespace_loop();
|
||||
task_unmap(TASK_THIS, vpage_create_raw3(KOBJ_DELETE_RIGHT, 0, TASK_THIS)); // 删除当前task,以及申请得所有对象
|
||||
printf("exit init.\n");
|
||||
return 0;
|
||||
|
||||
@@ -11,8 +11,9 @@
|
||||
#include "test.h"
|
||||
static umword_t th1_hd = 0;
|
||||
static umword_t ipc_hd = 0;
|
||||
static int i = 100;
|
||||
|
||||
#define STACK_SIZE 1024
|
||||
#define STACK_SIZE 512
|
||||
static __attribute__((aligned(8))) uint8_t stack0[STACK_SIZE];
|
||||
|
||||
static void thread_test_func(void)
|
||||
@@ -30,7 +31,6 @@ static void thread_test_func(void)
|
||||
|
||||
void thread_press_test(void)
|
||||
{
|
||||
int i = 100;
|
||||
while (i--)
|
||||
{
|
||||
th1_hd = handler_alloc();
|
||||
@@ -48,6 +48,7 @@ void thread_press_test(void)
|
||||
assert(msg_tag_get_prot(tag) >= 0);
|
||||
tag = thread_run(th1_hd, 2);
|
||||
ulog_write_str(LOG_PROT, "\n");
|
||||
|
||||
// sleep_tick(20);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ set(CMAKE_SIZE "${CROSS_COMPILE}size" CACHE PATH "" FORCE)
|
||||
|
||||
|
||||
# -mfloat-abi=soft -u _printf_float
|
||||
set(CMAKE_C_FLAGS "-mcpu=cortex-m3 -mthumb -O0 -g -lc -lrdimon -mfloat-abi=soft \
|
||||
set(CMAKE_C_FLAGS "-mcpu=cortex-m3 -mthumb -Os -g -lc -lrdimon -mfloat-abi=soft \
|
||||
-std=gnu11 -ffunction-sections -fdata-sections -fno-builtin \
|
||||
-nostartfiles -nodefaultlibs -nostdlib -nostdinc -Xlinker \
|
||||
--gc-sections -fno-stack-protector \
|
||||
|
||||
Reference in New Issue
Block a user