我想知道嵌套的调用限制是什么。我正在使用MikroC的事先知情同意编程。
它说有以下限制,
用于PIC的mikroC PRO将非递归嵌套调用的次数限制为:
是外部函数调用限制,还是其他函数或循环调用限制?什么嵌套电话?如何在代码中计数,以确定它是否令人兴奋?
发布于 2018-09-24 09:15:38
例如,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();
} 发布于 2019-01-25 13:34:22
8位PICmcu的硬件调用堆栈数量有限.此堆栈包含函数调用和中断的返回地址。这个堆栈不是像C这样的高级语言的参数堆栈,因为这个堆栈是硬件的,它可以在一个周期内将整个返回地址提供给CPU。太多的函数调用也不可能导致堆栈悄悄损坏其他内存,如BSS段或传统上的堆。
用于非传统堆栈模型的其他副作用。看一看这篇关于微论坛的文章。8位PICmcu的秘密武器
https://stackoverflow.com/questions/52474721
复制相似问题