51单片机仿真堆栈工作过程
挚爱单片机 2019-01-15 12:03:13 1.在函数调用工作之前(也就是第一行可执行代码),先在堆上申请变量空间,然后根据参数传递规则将寄存器内的参数传给堆内变量。需要多少堆空间,每个变量放什么位置是由编译器自动完成,用户不需要关心。
2.紧跟从函数第一行有效语句还是运行,直接使用堆上变量。
3.函数退出前,按照参数传递规则将参数传递给寄存器,并返还堆空间。
需要注意的是:1.没有使用操作系统(任务调度器)时,不用关心仿真堆栈的具体使用情况,因为无论如何程序都会返回到断点处,函数都会被完整执行(仿真堆栈有完整的使用闭环)。但是使用操作系统的,要很小心的处理堆栈使用闭环完整性问题,如果处理不当,很可能发生意想不到的错误。我在这点上遇到过跟无奈的情况,用keil 跟了一天才发现问题。
2.使用操作系统时,也只需要关心仿真堆栈指针?C_XBP(IBP),在发生中任务调度的地方将指针记录下来,下次返回任务时将指针复制到仿真堆栈中就好了。
3.关于ucosii 中仿真堆栈的处理,下次再发帖探讨。