还剩28页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
单片机原理与应用设计子程-序结构欢迎来到单片机原理与应用设计课程今天我们将深入探讨子程序结构,这是单片机编程中的核心概念什么是子程序定义特点类型123子程序是完成特定功能的程序段具有独立性,可重复使用,能接包括函数(有返回值)和过程(,可以被主程序或其他子程序调收参数并返回结果无返回值)两种主要类型用子程序的作用和优点模块化代码复用将复杂问题分解为小的功能模块,提高代码减少重复代码,提高开发效率和程序的可靠的可读性和维护性性结构化使程序结构更清晰,便于团队协作和代码管理子程序的基本结构头部主体返回语句包含子程序名称、参数列表和返回值类实现子程序功能的代码块,包括局部变指定子程序的返回值(如果有),并将型量声明和执行语句控制权交回调用者子程序的定义和声明定义声明完整实现子程序功能,包括函只包含函数头,不包含函数体数头和函数体通常放在源文通常放在头文件中,用于告件中知编译器函数的存在原型函数声明的另一种说法,指定函数的接口但不包含实现细节子程序的调用过程准备参数1将实参传递给子程序的形参保存现场2保存当前程序的执行环境,包括程序计数器和寄存器值跳转执行3将控制权转移到子程序的起始地址返回主程序4子程序执行完毕后,恢复现场并返回调用点子程序的参数传递实参准备调用程序准备实际参数值形参匹配将实参与子程序的形式参数对应值传递将实参的值复制给形参执行操作子程序使用形参进行操作参数传递的方式值传递引用传递将实参的值复制给形参,不影响原始数据传递实参的内存地址,可以直接修改原始数据输出参数用于从子程序返回多个值值传递和引用传递的区别值传递引用传递创建参数的副本,不改变原始数据适用于简单数据类型传递原始数据的地址,可以修改原始数据适用于复杂数据结构子程序的返回值定义返回类型使用语句return12在函数声明时指定返回值的在函数体内使用语句return数据类型返回结果接收返回值多值返回34调用程序可以使用变量接收可以使用结构体或指针参数返回值返回多个值子程序内部变量的作用域全局作用域1整个程序可见文件作用域2当前文件可见函数作用域3函数内部可见块作用域4代码块内可见局部变量和全局变量局部变量全局变量在函数内部声明,只在函数内部有效生命周期短,内存使用在所有函数外部声明,整个程序都可访问生命周期长,便于效率高数据共享静态局部变量定义特点使用关键字声明的局部变在函数调用之间保持其值,只static量,具有局部作用域但全局生初始化一次命周期应用用于保存函数的状态信息,如计数器或缓存数据递归调用子程序定义问题1将大问题分解为相同类型的小问题确定基本情况2定义递归的终止条件递归调用3函数调用自身解决子问题组合结果4将子问题的解组合成原问题的解递归的优缺点优点缺点代码简洁,易于理解可能导致栈溢出••适合处理具有递归性质的问题时间和空间复杂度可能较高••可以减少重复代码调试困难••子程序的嵌套调用主程序1调用子程序A子程序A2调用子程序B子程序B3调用子程序C子程序C4执行并返回子程序调用的原理保存现场将当前程序状态压入堆栈传递参数将参数传递给被调用的子程序跳转执行程序计数器指向子程序的起始地址恢复现场子程序执行完毕后,从堆栈恢复原来的程序状态堆栈的作用保存现场参数传递恢复现场存储函数调用时的局部变量和返回地址用于传递函数参数函数返回时恢复调用点的执行环境堆栈的压入和弹出压栈()出栈()Push Pop将数据元素添加到堆栈顶部,栈指针向高地址移动从堆栈顶部移除数据元素,栈指针向低地址移动函数返回地址的保存调用前保存执行子程序12在调用子程序前,将下一条程序计数器跳转到子程序的指令的地址压入堆栈起始地址子程序结束恢复执行34执行返回指令,从堆栈弹出程序计数器恢复为返回地址返回地址,继续执行主程序参数和局部变量的保存参数入栈栈帧创建调用函数前,将参数按照约定进入函数后,为局部变量分配顺序压入堆栈空间局部变量使用栈帧销毁在函数执行过程中使用栈上的函数返回时,释放局部变量空局部变量间和参数子程序的异常处理预防措施1在代码中加入防御性编程,如参数检查异常检测2使用语句捕获可能发生的异常try-catch错误处理3在块中处理异常,如记录日志或恢复操作catch资源清理4使用块确保资源被正确释放finally子程序的错误检查参数验证边界条件检查输入参数的有效性和范围处理极端情况和特殊输入返回值检查验证函数返回值的正确性子程序的效率优化内联函数参数传递优化12对于短小且频繁调用的函数,使用内联优化合理选择值传递或引用传递,减少不必要的拷贝局部变量优化算法优化34合理使用寄存器变量,减少内存访问选择合适的算法和数据结构,提高执行效率子程序的调试技巧断点设置变量监视在关键位置设置断点,逐步执行代码观察变量值的变化,追踪程序执行流程日志输出在关键点添加日志语句,记录执行状态单片机子程序的实现汇编实现语言实现C使用和指令实现子程序调用和返回需要手动管理使用函数定义和调用语法编译器自动处理堆栈和寄存器管理CALL RET寄存器和堆栈单片机子程序的应用案例控制传感器读取LED实现闪烁、渐变等效果的封装温度、湿度等传感器数据LED子程序读取的子程序串口通信定时器中断实现数据发送和接收的子程序定时器中断服务程序的实现常见子程序设计模式工厂模式单例模式观察者模式使用子程序创建对象,封装对象创建过确保类只有一个实例,并提供全局访问定义对象间的一对多依赖关系,实现松程点耦合子程序设计的注意事项职责单一参数合理12每个子程序应只完成一个明控制参数数量,使用合适的确的功能参数传递方式异常处理代码复用34考虑各种异常情况,确保程避免重复代码,提高代码的序的健壮性可维护性课程小结和展望回顾要点子程序的定义、结构、调用过程和参数传递实践应用在单片机项目中灵活运用子程序设计深入学习探索更多高级编程技巧和优化方法未来方向关注新兴的嵌入式系统开发技术和趋势。
个人认证
优秀文档
获得点赞 0