Files
player/Project_App_Calendar/App_Src/main/global.c

96 lines
1.2 KiB
C
Raw Normal View History

2025-06-27 00:32:57 +08:00
#include "global.h"
#include "main_inc.h"
2025-07-05 19:47:28 +08:00
//<2F><>ȡ<EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>r9<72>Ĵ<EFBFBD><C4B4><EFBFBD>
2025-06-27 00:32:57 +08:00
void *get_r9(void);
void set_r9(void *r9);
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
2025-10-16 00:11:31 +08:00
static void * const volatile g_r9;
2025-06-27 00:32:57 +08:00
2025-07-05 19:47:28 +08:00
//ָ<><D6B8>app<70><70><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
static app_struct *g_me;
2025-07-05 19:47:28 +08:00
//<2F><>const<73><74><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD><EFBFBD><EFBFBD>ֵ
2025-10-15 19:34:08 +08:00
static void save_const(void *const_addr, u32 value)
2025-06-27 00:32:57 +08:00
{
2025-10-15 19:34:08 +08:00
__asm__ volatile (
"str %1, [%0]"
:
: "r" (const_addr), "r" (value)
: "memory"
);
2025-06-27 00:32:57 +08:00
}
2025-10-15 19:34:08 +08:00
void *get_r9(void)
2025-06-27 00:32:57 +08:00
{
2025-10-15 19:34:08 +08:00
void *result;
__asm__ volatile (
"mov %0, r9"
: "=r" (result)
:
:
);
return result;
2025-06-27 00:32:57 +08:00
}
2025-10-15 19:34:08 +08:00
void set_r9(void *r9_val)
2025-06-27 00:32:57 +08:00
{
2025-10-15 19:34:08 +08:00
__asm__ volatile (
"mov r9, %0"
:
: "r" (r9_val)
: "r9"
);
2025-06-27 00:32:57 +08:00
}
void *global_in(void)
{
2025-10-15 19:34:08 +08:00
void *t=get_r9();
2025-06-27 00:32:57 +08:00
set_r9(g_r9);
return t;
}
void global_out(void *r9)
{
set_r9(r9);
}
void global_init(app_struct *me)
{
void *t=get_r9();
2025-10-15 19:34:08 +08:00
2025-07-05 19:47:28 +08:00
//ʹ<>ú<EFBFBD><C3BA><EFBFBD>ǿ<EFBFBD>и<EFBFBD>ֵ
2025-06-27 00:32:57 +08:00
save_const((void *)&g_r9,(u32)t);
g_me=me;
2025-10-15 19:34:08 +08:00
2025-07-05 19:47:28 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9A9>ϵͳ<CFB5><CDB3><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>app
2025-06-27 00:32:57 +08:00
extern int __app_exit(void *);
g_me->exit=__app_exit;
2025-10-15 19:34:08 +08:00
2025-06-27 00:32:57 +08:00
}
2025-07-05 19:47:28 +08:00
//app<70><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
void global_run_start(void)
{
if(g_me) g_me->run_state++;
}
2025-07-05 19:47:28 +08:00
//app<70><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-27 00:32:57 +08:00
void global_run_exit(void)
{
2025-10-15 19:34:08 +08:00
if(g_me)
2025-06-27 00:32:57 +08:00
{
if(g_me->run_state) g_me->run_state--;
}
}