typedef int (*test_func)(void);
unsigned int test_bin_call( void )
{
unsigned int sp_reg;
int ret;
test_func my_fun_p;
unsigned char *code_p;
__asm__ __volatile__( "mv %0, sp" : "=r"(sp_reg) );
__asm__ __volatile__( "nop" );
__asm__ __volatile__( "nop" );
__asm__ __volatile__( "nop" );
code_p = (unsigned char *)0xf01ff0;
code_p[0] = 0x09;
code_p[1] = 0x45; //li a0,2
//3e800513
code_p[2] = 0x13; //l.li a0,0x1000
code_p[3] = 0x05;
code_p[4] = 0x80;
code_p[5] = 0x3e;
code_p[6] = 0x82; //ret
code_p[7] = 0x80;
my_fun_p = (test_func)0xf01ff0;
at_uart_log_string( "code_p[0] = %#x\n", code_p[0] );
at_uart_log_string( "code_p[1] = %#x\n", code_p[1] );
ret = my_fun_p();
at_uart_log_string( "ret = %d\n", ret );
//__asm__ __volatile__("l.li a0,0x1070634");
//__asm__ __volatile__("li a0,0x1070635");
//__asm__ __volatile__("lui a0,0x1234");
//memset( g_debug_buff, 0x00, sizeof(g_debug_buff) );
//at_uart_log_string( "g_debug_buff = %p\n", g_debug_buff );
//__asm__ __volatile__("mv t3, sp");
//__asm__ __volatile__("la sp, g_debug_buff");
//__asm__ __volatile__("la t0, g_debug_buff");
//__asm__ __volatile__("l.li t4,0x11223344");
//__asm__ __volatile__("sw t4, 0x00(t0)");
//at_uart_log_string( "g_debug_buffx = %#x\n", a_ll((volatile int *)g_debug_buff) );
return sp_reg;
}