#include "global.h" #include "main_inc.h" //获取和保存r9寄存器 void *get_r9(void); void set_r9(void *r9); //用来保存全局变量基地址 static void * const volatile g_r9; //指向app自身 static app_struct *g_me; //给const类型变量赋值 static void save_const(void *const_addr, u32 value) { __asm__ volatile ( "str %1, [%0]" : : "r" (const_addr), "r" (value) : "memory" ); } void *get_r9(void) { void *result; __asm__ volatile ( "mov %0, r9" : "=r" (result) : : ); return result; } void set_r9(void *r9_val) { __asm__ volatile ( "mov r9, %0" : : "r" (r9_val) : "r9" ); } void *global_in(void) { void *t=get_r9(); set_r9(g_r9); return t; } void global_out(void *r9) { set_r9(r9); } void global_init(app_struct *me) { void *t=get_r9(); //使用函数强行赋值 save_const((void *)&g_r9,(u32)t); g_me=me; //这个函数提供给系统调用,用以退出app extern int __app_exit(void *); g_me->exit=__app_exit; } //app正在运行 void global_run_start(void) { if(g_me) g_me->run_state++; } //app结束运行 void global_run_exit(void) { if(g_me) { if(g_me->run_state) g_me->run_state--; } }