如何使用 armcc 为 ARM Cortex M3 创建没有硬件异常处理程序的映像

Posted

技术标签:

【中文标题】如何使用 armcc 为 ARM Cortex M3 创建没有硬件异常处理程序的映像【英文标题】:How to create an Image Without HW Exception Handlers for ARM Cortex M3 using armcc 【发布时间】:2016-11-04 18:11:43 【问题描述】:

基本上,我需要为 ARM Cortex M3 创建一个可以称为我的简单内核的用户应用程序。 内核和用户应用程序现在是不同的 uVision 项目。 内核处理所有硬件异常(SVC、PendSV、Hardfault 等)

用户应用程序位于使用startup.s文件的特定地址,内核能够在其静态地址内启动该用户应用程序。

另一方面,用户应用程序的 startup.s 文件也包含硬件异常处理程序定义,但用户应用程序从不处理或不应该处理硬件异常。它应该由内核负责。

是否可以为项目或构建禁用/忽略/避免硬件异常处理? (在构建用户应用程序时,应该只知道代码、堆栈和数据段地址。)

【问题讨论】:

我必须问一个显而易见的问题。您是否尝试过编辑用户应用的 startup.s 文件以删除硬件异常处理程序定义? 使用您自己的应用程序启动代码并完全删除向量表(几乎?)。 【参考方案1】:

感谢您的回复。是的,正如您所建议的,当我从 startup.s 中删除向量表时,它似乎有效。

另外,我还替换了主函数而不是Reset_Handler,我可以定位主函数作为起点。 (内核已经初始化了整个系统) 第一个字显示 SP,第二个显示代码起点(主)

我的简单 startup.s 文件现在是

; Vector Table Mapped to Address 0 at Reset

                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors
                IMPORT  __main

__Vectors       DCD     __initial_sp            ; Top of Stack
                DCD     __main                  ; Start Point

谢谢。

【讨论】:

注意:这段代码不会初始化数据段——但是这个任务可能已经由内核在这里完成了。

以上是关于如何使用 armcc 为 ARM Cortex M3 创建没有硬件异常处理程序的映像的主要内容,如果未能解决你的问题,请参考以下文章

Centos 安装 arm-linux-gnueabihf-gcc (armcc交叉工具链)

ARM armcc specific functions ARM 汇编指令功能

stm32的arm内核和cortex架构到底是啥意思?有啥区别?求指教!

痞子衡嵌入式:ARM Cortex-M内核那些事(3.2)- 安全模块看特性(M23/33/35P)

可接受的 ARM Cortex-M4F 浮点立即数的算法?

ARM (Cortex M3) 的应用内编程如何工作?