【问题标题】:Placing SVC handler in SVC vector in Arm Cortex M0在 Arm Cortex M0 的 SVC 向量中放置 SVC 处理程序
【发布时间】:2017-01-17 14:56:11
【问题描述】:

我有一个想要放入 SVC 异常向量的函数,但我似乎找不到将函数地址放入该向量所需的语法。谁能推荐一个资源来提供帮助?

【问题讨论】:

    标签: arm cortex-m3 cortex-m


    【解决方案1】:

    valvers 为裸机树莓派编程编写了一个很好的教程。 尽管 CPU 不一样,但异常的底层概念是一样的。你一定要去那里看看。

    我的一位前同事为 Cortex M4 编写了 HAL。在其中,他在 C 中设置中断处理程序,没有任何汇编调用,只使用符号的位置。你也应该看看RFLPC

    【讨论】:

      【解决方案2】:

      假设您有一个名为your_function_name 的符号,以下代码将跳转到它。

      SVC_Handler
          EXTERN your_function_name
          ldr r0,=your_function_name
          bx r0
      

      虽然处理程序通常是弱链接的,但函数void SVC_Handler(void) 应该最终链接而不是启动文件中定义的处理程序。

      【讨论】:

      • 这适用于 GCC 吗?我需要修改链接描述文件吗?抱歉,我对此有点陌生。作为记录,我使用的是基于 Arduino 的实现,所以我并没有仔细研究链接器的东西
      【解决方案3】:

      太模糊了,这对您的代码非常具体,并且有多种方法可以实现 cortex-m 向量表和使用 GNU 工具,因此您没有提供足够的信息,在为我们找到这些信息时应该变得很明显你的桌子在哪里。您可以从反汇编二进制文件的 elf 版本开始,在向量表区域中找到标签名称,然后用 grep 查找这些名称的代码库。 如果您骑在一堆其他人的库等之上,处理可能会更加痛苦,可能会有函数调用等运行时用于注册处理程序。

      有上百万种方法可以解决这个问题,而且都可能奏效,你用的是哪一种?

      【讨论】:

        猜你喜欢
        • 2017-02-08
        • 1970-01-01
        • 1970-01-01
        • 2013-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-24
        相关资源
        最近更新 更多