最近有一个问题一直想不通~ 请教一下大家~ 函数C调用函数B,如果C和B中都用到相同的RAM资源~ 会不会产生问题呢~ 下面是一个例子
void A(void) { //若干指令
} void B(void) { //若干指令
}
void C(void (*P)(void)) { //若干指令 P(); //若干指令
}
void main(void) { void (*P)(void);
P=A; C(P); //这里C中调用A P=B; C(P); //这里C中调用B
} 上面的例子中,会不会出现所调用函数用到的RAM和自己用到的RAM相同导致 数据出错呢? 用KEILC编译了一个小函数,发现根本没有保护RAM的操作,如下面所示, RAM的08 09 14H 是不是就被破坏了呢?如果调用函数中也用到了08 09 这样就出错了是不是这样呢? 如果是直接调用,调用函数知道具体资源可以避免,但是用指针函数如何处理呢~ 一直想不通,请大家 指点一下~ 12: void Delay(unsigned int i) C:0x008C 8E08 MOV 0x08,R6 C:0x008E 8F09 MOV 0x09,R7 13: { 14: unsigned char arr[10]; 15: 16: arr[10] = i; 17: C:0x0090 850914 MOV 0x14,0x09 18: } C:0x0093 22 RET
|