对资深单片机开发人员来说经常提倡的一个开发技巧是,开发人员应避免使用汇编语言。避免使用汇编语言的原因是它特定于所使用的处理器体系结构,难以阅读,理解和维护。而且需要注意的是,在查看仍可以使用汇编语言的每个区域之前,这些汇编指令如何集成到代码库中将根据所使用的开发环境而有所不同。通常有一些自定义的编译器函数用于使编译器语言知道正在使用汇编指令,例如_asm(),我们检查的代码段在使用前可能需要进行修改。
但是,有四个适合使用汇编语言的地方:
一、执行断点指令
每当我开始一个新项目时,我在实施过程中要做的第一件事就是将断点的汇编指令放入CPU错误,看门狗超时以及特殊RTOS事件(例如在中断服务例程中使用malloc)。这样做的原因是,当达到这些功能之一时,想得到通知,但是又不想管理这些断点。许多现代处理器都有一个断点汇编指令,使用汇编代码执行该指令是完全合适的。
对于使用类似于STM32 CubeIDE的IDE的Arm Cortex-M处理器,此类组装实现可能如下所示:
__asm(“ bkpt”);
当到达上面这条指令时,处理器将停止执行。
二、从Bootloader过渡到应用程序
开发人员应该使用汇编语言的第二个领域是从引导加载程序到应用程序代码的过渡点。在许多系统中,引导加载程序是第一个执行的应用程序。它设置处理器,验证内存并可能执行其他一些功能。但是在某个时候,引导加载程序让步并跳转到主应用程序。为了成功完成该跳转,需要将处理器中的许多组件设置为它们的初始状态,例如系统堆栈,然后需要加载应用程序复位向量的功能指针。另外,当需要将汇编语言集成到应用程序中时,可以使用IDE的汇编函数。这些功能可