我想知道什么是嵌套调用限制。我正在使用MikroC进行PIC编程。
它说以下限制, mikroC PRO for PIC将非递归嵌套调用的数量限制为: …
没有任何中断的PIC16示例:
这段代码很好:
/* prototypes */ void func1 (void); void func2 (void); void func3 (void); void func4 (void); void func5 (void); void func6 (void); void func7 (void); void func8 (void); void func1(void) { /* do something here */ } void func2(void) { /* do something here */ } void func3(void) { /* do something here */ } void func4(void) { /* do something here */ } void func5(void) { /* do something here */ } void func6(void) { /* do something here */ } void func7(void) { /* do something here */ } void func8(void) { /* do something here */ } int main { func1(); func2(); func3(); func4(); func5(); func6(); func7(); func8(); }
这段代码不好:
/* prototypes */ void func1 (void); void func2 (void); void func3 (void); void func4 (void); void func5 (void); void func6 (void); void func7 (void); void func8 (void); void func1(void) { func2(); } void func2(void) { func3(); } void func3(void) { func4(); } void func4(void) { func5(); } void func5(void) { func6(); } void func6(void) { func7(); } void func7(void) { func8(); /* here the stack reached 8. this will cause a problem */ } void func8(void) { /* do something here */ } int main { func1(); }
8位PICmcu具有有限数量的硬件调用堆栈。该堆栈包含函数调用和中断的返回地址。这个堆栈不是像C这样的高级语言的参数堆栈。因为这个堆栈在硬件中,所以它可以根据需要做得很宽,以便在一个周期内为CPU提供整个返回地址。太多的函数调用也不可能导致堆栈安静地破坏其他内存,例如BSS段或传统的堆。
对于非传统堆栈模型的其他副作用。看看微文章上的这篇文章。 8位PICmcu的秘密武器