s********l 发帖数: 998 | 1 write a function that will trigger a prefetch address abort exception
这个。。。怎么做啊?
想了半天 就只想出来data abortion的 prefetch address abortion怎么产生呢?
请大侠指点
谢谢 |
s********l 发帖数: 998 | |
B*******1 发帖数: 2454 | 3 电话面试题?
how about this:
base on system config and memory map:
int *p = (int *)0x0000000c; //maybe a address that is invalid
int data = *p; |
f*******t 发帖数: 7549 | 4 这个是bus error吧
【在 B*******1 的大作中提到】 : 电话面试题? : how about this: : base on system config and memory map: : int *p = (int *)0x0000000c; //maybe a address that is invalid : int data = *p;
|
c****p 发帖数: 6474 | 5 这个是data abort exception。
prefetch abort exception应该是在分支预测错误之后发生的。
【在 B*******1 的大作中提到】 : 电话面试题? : how about this: : base on system config and memory map: : int *p = (int *)0x0000000c; //maybe a address that is invalid : int data = *p;
|
s********l 发帖数: 998 | 6 不是 从个朋友那个听来的onsite的题
【在 B*******1 的大作中提到】 : 电话面试题? : how about this: : base on system config and memory map: : int *p = (int *)0x0000000c; //maybe a address that is invalid : int data = *p;
|
c****p 发帖数: 6474 | 7 今天又查了一下。
http://www.ethernut.de/en/documents/arm-exceptions.html
也就是要PC转到一个非法的地址,我能想到的办法大概是这样:
void cause_prefetch_exception(void)
{
int (*f) (int x);
f = NULL;
f(0); // exception occurs here.
return;
}
【在 s********l 的大作中提到】 : write a function that will trigger a prefetch address abort exception : 这个。。。怎么做啊? : 想了半天 就只想出来data abortion的 prefetch address abortion怎么产生呢? : 请大侠指点 : 谢谢
|
B*******1 发帖数: 2454 | 8 我原来也想到这个,不确定。
因为我怀疑这样子产生的是arm里面的undefined instruction exception。
可惜没有硬件在手,不然可以在硬件上面试,再用jtag去看。
【在 c****p 的大作中提到】 : 今天又查了一下。 : http://www.ethernut.de/en/documents/arm-exceptions.html : 也就是要PC转到一个非法的地址,我能想到的办法大概是这样: : void cause_prefetch_exception(void) : { : int (*f) (int x); : f = NULL; : f(0); // exception occurs here. : return; : }
|
c****p 发帖数: 6474 | 9 我这个还有问题,,因为使用虚拟内存,NULL有可能是一个合法的指令地址(而且有可能
放着一段合法的指令)。
只要跳转的目标地址超过代码段的范围就应该出这个异常,这个异常应该是通过MMU返回
的。
那我的代码应该再改下。
【在 B*******1 的大作中提到】 : 我原来也想到这个,不确定。 : 因为我怀疑这样子产生的是arm里面的undefined instruction exception。 : 可惜没有硬件在手,不然可以在硬件上面试,再用jtag去看。
|
c****p 发帖数: 6474 | 10 void cause_prefetch_exception(void)
{
int (*f) (int x);
int x;
f = (int (*f))&x;
f(0); // exception occurs here.
return;
}
可能
返回
【在 c****p 的大作中提到】 : 我这个还有问题,,因为使用虚拟内存,NULL有可能是一个合法的指令地址(而且有可能 : 放着一段合法的指令)。 : 只要跳转的目标地址超过代码段的范围就应该出这个异常,这个异常应该是通过MMU返回 : 的。 : 那我的代码应该再改下。
|
B*******1 发帖数: 2454 | 11 Base on this article, it seems my method is right.
http://www.ethernut.de/en/documents/arm-exceptions.html
【在 B*******1 的大作中提到】 : 电话面试题? : how about this: : base on system config and memory map: : int *p = (int *)0x0000000c; //maybe a address that is invalid : int data = *p;
|
c****p 发帖数: 6474 | 12 yours is data abort(invalid attempt for data),
but required is prefetch abort (invalid attempt for instructions)
【在 B*******1 的大作中提到】 : Base on this article, it seems my method is right. : http://www.ethernut.de/en/documents/arm-exceptions.html
|
B*******1 发帖数: 2454 | 13 Yes. forget.
【在 c****p 的大作中提到】 : yours is data abort(invalid attempt for data), : but required is prefetch abort (invalid attempt for instructions)
|