首页 > 解决方案 > MikroC 中的嵌套调用限制是什么?

问题描述

我想知道什么是嵌套调用限制。我正在使用 MikroC 进行 PIC 编程。

它说以下限制,

mikroC PRO for PIC 将非递归嵌套调用的数量限制为:

  • PIC12 系列的 8 次调用,
  • PIC16 系列的 8 次调用,
  • 16 要求 PIC16 增强型系列。
  • PIC18 系列的 31 次调用。

它是外部函数调用限制还是 If else 或循环调用限制?什么嵌套调用?如何在代码中计数来识别它是否兴奋?

标签: cembeddedpicmikroc

解决方案


没有任何中断的 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();
} 

推荐阅读