PICC规定原C程序中的函数编译后生成的机器码必须放在同一程序页中。 中档系列PIC单片机的程序页长度为2K字。 也就是说,任何用C语言编写的函数最终生成的代码都不能超过2K字。 一个好的程序设计应该有清晰的组织结构。 使用不同的函数来实现不同的功能是最好的方式。 因此,函数的2K字数限制一般不会对程序代码的编写造成太大影响。 如果确实需要连续编写很长的程序来实现某个特定的功能,那么就必须将连续的代码拆分成多个函数,以保证每个函数最终编译后的代码不超过一页空间。
11.6.2 呼叫级别控制
中档系列PIC单片机的硬件堆栈深度为8级。 考虑到中断响应需要一层堆栈,所以
嵌套函数调用的最大深度不应超过 7 层。 程序员必须控制子程序调用本身的嵌套深度以遵守此限制。
最终编译连接成功后,PICC可生成连接定位映射文件(*.map)。 在这个文件中
里面有详细的函数调用嵌套指令图“call graph”。 建议您关注一下。 信息大致如下(摘自示例程序的编译结果):
调用图:
*_主大小0,0偏移0
_右移_C
* _任务大小0,1偏移0
鲁夫托夫特
ftmul 大小 0,0 偏移量 0
ftunpack1
ftunpack2
ftadd 大小 0,0 偏移 0
ftunpack1
ftunpack2
ft 分母
示例 11-4 C 函数调用层次结构图
上述信息表明,正常调用子程序时(不考虑中断),整个程序最多可以嵌套两层。 因为main函数不能返回,所以嵌套系列中不需要计算。 有些函数调用是编译代码时自动添加的库函数。 这些函数调用无法从原始C程序中直接看到,但在这个嵌套的指标图上却清晰可见。