bsp,am,integrate-am-apps: destroy thread when calling halt()

This commit is contained in:
Zihao Yu 2024-01-14 12:21:05 +08:00
parent dea61ce9d9
commit 6761ddf7f8
2 changed files with 18 additions and 1 deletions

View file

@ -43,6 +43,8 @@ def integrate(app_dir):
for f in lib_sym: for f in lib_sym:
if f in am_init_sym: if f in am_init_sym:
redefine_sym_fp.write(f"__am_{app_name}_{f} __dummy_{f}\n") redefine_sym_fp.write(f"__am_{app_name}_{f} __dummy_{f}\n")
elif f == "halt":
redefine_sym_fp.write(f"__am_{app_name}_{f} __rt_am_halt\n")
else: else:
redefine_sym_fp.write(f"__am_{app_name}_{f} {f}\n") redefine_sym_fp.write(f"__am_{app_name}_{f} {f}\n")
redefine_sym_fp.close() redefine_sym_fp.close()
@ -52,9 +54,15 @@ def integrate(app_dir):
am_app_mk_fp.write("SRCS += " + str(obj.relative_to("build/" + ARCH)) + "\n") am_app_mk_fp.write("SRCS += " + str(obj.relative_to("build/" + ARCH)) + "\n")
os.remove(redefine_sym_file) os.remove(redefine_sym_file)
am_app_c_fp.write(f"""extern int __am_{app_name}_main(const char *); am_app_c_fp.write(f"""extern int __am_{app_name}_main(const char *);
static void am_{app_name}_thread(void *mainargs) {{
__am_{app_name}_main(mainargs);
}}
static void am_{app_name}(int argc, char *argv[]) {{ static void am_{app_name}(int argc, char *argv[]) {{
heap = am_apps_heap; heap = am_apps_heap;
__am_{app_name}_main(argc >= 2 ? argv[1] : ""); char *mainargs = argc >= 2 ? argv[1] : "";
rt_thread_t tid = rt_thread_create("{app_name}", am_{app_name}_thread, mainargs, 0x4000, 0, 20);
rt_thread_startup(tid);
rt_thread_yield();
}} }}
MSH_CMD_EXPORT(am_{app_name}, AM {app_name});""") MSH_CMD_EXPORT(am_{app_name}, AM {app_name});""")
@ -69,6 +77,10 @@ bool __dummy_ioe_init() { return true; }
bool __dummy_cte_init(Context *(*handler)(Event ev, Context *ctx)) { return true; } bool __dummy_cte_init(Context *(*handler)(Event ev, Context *ctx)) { return true; }
bool __dummy_vme_init(void *(*pgalloc)(int), void (*pgfree)(void *)) { return true; } bool __dummy_vme_init(void *(*pgalloc)(int), void (*pgfree)(void *)) { return true; }
bool __dummy_mpe_init(void (*entry)()) { return true; } bool __dummy_mpe_init(void (*entry)()) { return true; }
void __rt_am_halt(int code) {
void rt_thread_exit(void);
rt_thread_exit();
}
""") """)
for app in app_dir_list: for app in app_dir_list:
integrate(app) integrate(app)

View file

@ -1160,4 +1160,9 @@ rt_err_t rt_thread_get_name(rt_thread_t thread, char *name, rt_uint8_t name_size
} }
RTM_EXPORT(rt_thread_get_name); RTM_EXPORT(rt_thread_get_name);
void rt_thread_exit(void) {
_thread_exit();
}
RTM_EXPORT(rt_thread_exit);
/**@}*/ /**@}*/