修复在Os优化时系统调用参数传递问题

This commit is contained in:
zhangzheng
2023-09-30 14:17:34 +08:00
parent 851ea69883
commit 2fc002f2e1
14 changed files with 96 additions and 22 deletions

View File

@@ -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,
}

View File

@@ -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)

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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);
}
}

View File

@@ -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 \