我要实现的功能就是从程序区的0x7000处读取16位数据出来,函数如下
void get_program(unsigned short *src)
{
asm(" LACC #28672 ");
asm(" TBLR *,AR4 ");
}
数据是读出来了但函数返回的时跳到其它地方了
yanzhen fu:
在这里,你要用堆栈来处理程序指针,如下所示:
MAR *,AR1
POPD *+
你的程序
MAR *,AR1
SBRK 1
PSHD *
也可以在C中用指针的形式读区一个地址的数据是很方便的。
我要实现的功能就是从程序区的0x7000处读取16位数据出来,函数如下
void get_program(unsigned short *src)
{
asm(" LACC #28672 ");
asm(" TBLR *,AR4 ");
}
数据是读出来了但函数返回的时跳到其它地方了
he yuanjie:
回复 yanzhen fu:
貌似在2407里数据区和程序区不是统一编址的,用指针读的是ram的数据,不知道是不是要加什么修饰符号。
不过我仔细看了一下汇编搞定了:
void get_program(unsigned short *dst){ asm(" LACK 28672"); asm(" MAR *,AR4"); asm(" TBLR *,AR1");}
我要实现的功能就是从程序区的0x7000处读取16位数据出来,函数如下
void get_program(unsigned short *src)
{
asm(" LACC #28672 ");
asm(" TBLR *,AR4 ");
}
数据是读出来了但函数返回的时跳到其它地方了
yanzhen fu:
回复 he yuanjie:
请问:你的AR4中的数值是如何返回到c中的?
我要实现的功能就是从程序区的0x7000处读取16位数据出来,函数如下
void get_program(unsigned short *src)
{
asm(" LACC #28672 ");
asm(" TBLR *,AR4 ");
}
数据是读出来了但函数返回的时跳到其它地方了
he yuanjie:
回复 yanzhen fu:
dst是局部变量的指针,会通过AR4传递。
LACK #28672是设置要访问的程序区地址,
MAR *,AR4是设置AR4为当前AR
TBLR *,AR1的作用是以ACC的低16位作为程序区地址 读取程序区数据到当前AR所指的数据区中 然后设置AR1为当前AR。
看C汇编后的代码在执行我的内嵌汇编前AR1是当前AR,因此我更改当前AR后再还原回去。
我要实现的功能就是从程序区的0x7000处读取16位数据出来,函数如下
void get_program(unsigned short *src)
{
asm(" LACC #28672 ");
asm(" TBLR *,AR4 ");
}
数据是读出来了但函数返回的时跳到其它地方了
he yuanjie:
用下面这个函数彻底解决了这个问题
void get_program(unsigned long src, unsigned short *dst){ asm(" SBRK #6"); asm(" LAR AR4,*,AR4"); asm(" TBLR *,AR1"); asm(" ADRK #6");}