85 lines
998 B
C
85 lines
998 B
C
|
#include "global.h"
|
|||
|
#include "main_inc.h"
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//获取和保存r9寄存器
|
|||
|
void *get_r9(void);
|
|||
|
void set_r9(void *r9);
|
|||
|
|
|||
|
|
|||
|
//用来保存全局变量基地址
|
|||
|
static void * const g_r9;
|
|||
|
|
|||
|
//指向app自身
|
|||
|
static app_struct *g_me;
|
|||
|
|
|||
|
|
|||
|
//给const类型变量赋值
|
|||
|
__asm static void save_const(void *const_addr,u32 value)
|
|||
|
{
|
|||
|
str r1,[r0]
|
|||
|
bx lr
|
|||
|
}
|
|||
|
|
|||
|
__asm void *get_r9(void)
|
|||
|
{
|
|||
|
mov r0,r9
|
|||
|
bx lr
|
|||
|
}
|
|||
|
|
|||
|
__asm void set_r9(void *r9)
|
|||
|
{
|
|||
|
mov r9 ,r0
|
|||
|
bx lr
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
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--;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|