文档详情

【大学课件】单片机原理与应用设计 子程序结构.ppt

发布:2025-02-12约2.55千字共10页下载文档
文本预览下载声明

单片机原理与应用设计-子程序结构欢迎来到单片机原理与应用设计课程。今天我们将深入探讨子程序结构,这是单片机编程中的核心概念。

什么是子程序1定义子程序是完成特定功能的程序段,可以被主程序或其他子程序调用。2特点具有独立性,可重复使用,能接收参数并返回结果。3类型包括函数(有返回值)和过程(无返回值)两种主要类型。

子程序的作用和优点模块化将复杂问题分解为小的功能模块,提高代码的可读性和维护性。代码复用减少重复代码,提高开发效率和程序的可靠性。结构化使程序结构更清晰,便于团队协作和代码管理。

子程序的基本结构头部包含子程序名称、参数列表和返回值类型。主体实现子程序功能的代码块,包括局部变量声明和执行语句。返回语句指定子程序的返回值(如果有),并将控制权交回调用者。

子程序的定义和声明定义完整实现子程序功能,包括函数头和函数体。通常放在源文件中。声明只包含函数头,不包含函数体。通常放在头文件中,用于告知编译器函数的存在。原型函数声明的另一种说法,指定函数的接口但不包含实现细节。

子程序的调用过程1准备参数将实参传递给子程序的形参。2保存现场保存当前程序的执行环境,包括程序计数器和寄存器值。3跳转执行将控制权转移到子程序的起始地址。4返回主程序子程序执行完毕后,恢复现场并返回调用点。

子程序的参数传递实参准备调用程序准备实际参数值。形参匹配将实参与子程序的形式参数对应。值传递将实参的值复制给形参。执行操作子程序使用形参进行操作。

参数传递的方式值传递将实参的值复制给形参,不影响原始数据。引用传递传递实参的内存地址,可以直接修改原始数据。输出参数用于从子程序返回多个值。

值传递和引用传递的区别值传递创建参数的副本,不改变原始数据。适用于简单数据类型。引用传递传递原始数据的地址,可以修改原始数据。适用于复杂数据结构。

子程序的返回值1定义返回类型在函数声明时指定返回值的数据类型。2使用return语句在函数体内使用return语句返回结果。3接收返回值调用程序可以使用变量接收返回值。4多值返回可以使用结构体或指针参数返回多个值。

子程序内部变量的作用域1全局作用域整个程序可见2文件作用域当前文件可见3函数作用域函数内部可见4块作用域代码块内可见

局部变量和全局变量局部变量在函数内部声明,只在函数内部有效。生命周期短,内存使用效率高。全局变量在所有函数外部声明,整个程序都可访问。生命周期长,便于数据共享。

静态局部变量定义使用static关键字声明的局部变量,具有局部作用域但全局生命周期。特点在函数调用之间保持其值,只初始化一次。应用用于保存函数的状态信息,如计数器或缓存数据。

递归调用子程序1定义问题将大问题分解为相同类型的小问题。2确定基本情况定义递归的终止条件。3递归调用函数调用自身解决子问题。4组合结果将子问题的解组合成原问题的解。

递归的优缺点优点代码简洁,易于理解适合处理具有递归性质的问题可以减少重复代码缺点可能导致栈溢出时间和空间复杂度可能较高调试困难

子程序的嵌套调用1主程序调用子程序A2子程序A调用子程序B3子程序B调用子程序C4子程序C执行并返回

子程序调用的原理保存现场将当前程序状态压入堆栈。传递参数将参数传递给被调用的子程序。跳转执行程序计数器指向子程序的起始地址。恢复现场子程序执行完毕后,从堆栈恢复原来的程序状态。

堆栈的作用保存现场存储函数调用时的局部变量和返回地址。参数传递用于传递函数参数。恢复现场函数返回时恢复调用点的执行环境。

堆栈的压入和弹出压栈(Push)将数据元素添加到堆栈顶部,栈指针向高地址移动。出栈(Pop)从堆栈顶部移除数据元素,栈指针向低地址移动。

函数返回地址的保存1调用前保存在调用子程序前,将下一条指令的地址压入堆栈。2执行子程序程序计数器跳转到子程序的起始地址。3子程序结束执行返回指令,从堆栈弹出返回地址。4恢复执行程序计数器恢复为返回地址,继续执行主程序。

参数和局部变量的保存参数入栈调用函数前,将参数按照约定顺序压入堆栈。栈帧创建进入函数后,为局部变量分配空间。局部变量使用在函数执行过程中使用栈上的局部变量。栈帧销毁函数返回时,释放局部变量空间和参数。

子程序的异常处理1预防措施在代码中加入防御性编程,如参数检查。2异常检测使用try-catch语句捕获可能发生的异常。3错误处理在catch块中处理异常,如记录日志或恢复操作。4资源清理使用finally块确保资源被正确释放。

子程序的错误检查参数验证检查输入参数的有效性和范围。边界条件处理极端情况和特殊输入。返回值检查验证函数返回值的正确性。

子程序的效率优化1内联函数对于短小且频繁调用的函数,使用内联优化。2参数传递优化合理选择值传递或引用传递,减少不必要的拷贝。3局部变量优化合理使用寄存器变量,减少内存访问。4算法优化选择

显示全部
相似文档