如何使用 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架构到底是啥意思?有啥区别?求指教!