【问题标题】:What’s the difference between the startup code and reset handler启动代码和重置处理程序有什么区别
【发布时间】:2021-12-03 06:01:42
【问题描述】:

你好 stackoverflow 社区,

有人可以帮我理解启动代码和重置处理程序之间的区别吗?什么时候启动我们的微控制器叫哪一个?当我们重置我们的微控制器时,调用的是哪一个?

我知道启动代码可以在 startup.s 文件位中找到我们在哪里可以找到重置处理程序?

谢谢!

【问题讨论】:

  • 对于裸机系统,startup_code == reset_code。它也被称为“引导代码”,通常将引导加载程序用于更复杂的系统。但是,启动代码是所有系统的术语,包括操作系统托管系统,如 vxWorks、Linux 等。启动代码的工作是清除 bss 并设置堆栈并调用 C++ 的静态构造函数和析构函数(在应用程序启动之前)。 “重置代码”必须执行相同的任务,但它涉及更多并且取决于所使用的硬件。即使使用操作系统,也有在main() 之前运行的代码,这也称为启动代码。

标签: assembly arm microcontroller


【解决方案1】:

启动代码和重置处理程序只是同一事物的两个名称。

重置处理程序就像一个中断,它由单片机在启动时调用。 MCU 从中断向量表中加载复位处理程序地址。重置处理程序通常只是调用启动或由它组成。

启动通常用汇编语言编写,但有时用 C 语言编写。要找到复位处理程序 - 查看中断向量表,对于 Cortex-M 内核,它是第二项,第一项是堆栈顶部初始值。

【讨论】:

  • 那么reset handler会调用main函数吗?什么是中断向量表?
  • 重置处理程序将执行其中写入的所有内容。通常,是的,它最终会调用 main 函数。但是您可以编写不调用任何内容的重置处理程序。中断向量表是一个包含中断处理程序地址的表,如果您想了解详细信息,请在 Google 上搜索。
【解决方案2】:

一些微控制器允许您区分不同类型的复位(例如上电复位、软件复位、欠压复位以及可能的其他复位)。在这种情况下,您的重置处理程序可以检查重置原因并仅在真正需要时执行启动代码来初始化硬件并启动主任务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2023-04-04
    • 1970-01-01
    • 2012-05-26
    • 2010-12-06
    • 2021-12-05
    相关资源
    最近更新 更多