社区
驱动开发/核心开发
帖子详情
异常时候保存现场的栈和程序中用的栈一样吗?
yangkunhenry
2018-08-01 08:57:02
在遇到HardFault的时候,会保存现场会把寄存器的值压入栈,这里的栈和程序申请的栈区同属一块区域吗?
...全文
536
4
打赏
收藏
异常时候保存现场的栈和程序中用的栈一样吗?
在遇到HardFault的时候,会保存现场会把寄存器的值压入栈,这里的栈和程序申请的栈区同属一块区域吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fly 100%
2018-12-22
打赏
举报
回复
异常使用的一般是中断专用的栈,两套系统并行的
风影-取名字真烦
2018-10-26
打赏
举报
回复
是一个位置,这里有应用程序出错的信息,调用堆栈,调用参数以及函数返回地址等等所有信息,如果想知道这些,可以看一下Microsoft的技术区的一个牛人写的一本书,好象就windows应用层高级排错什么的,会详细告诉你这些,如果记错了,你就看看windbg的相关使用吧,都是关于出错后对堆栈的查看来排错的
剑之名
2018-08-02
打赏
举报
回复
是同一个堆栈的。
divide_error:
pushl $_do_divide_error
no_error_code:
xchgl %eax,(%esp)
pushl %ebx
pushl %ecx
pushl %edx
pushl %edi
pushl %esi
pushl %ebp
push %ds
push %es
push %fs
pushl $0 # "error code"
lea 44(%esp),%edx
pushl %edx
movl $0x10,%edx
mov %dx,%ds
mov %dx,%es
mov %dx,%fs
call *%eax
这是出错处理的汇编,,寄存器的入栈是在处理函数调用(call)和用户切换(mov $0x10……)之前。
STM32
异常
与中断过程详解
本文介绍了中断和
异常
的基本概念,包括它们的产生原因和处理方式。通过一个烧开水的比喻解释了中断的必要性,阐述了中断如何提高CPU效率。在ARM体系中,中断处理涉及中断初始化、中断服务
程序
执行等步骤。在STM32中,中断处理主要由硬件自动完成,包括
异常
向量表用于定位中断服务函数,以及自动
保存
和恢复
现场
。文章还详细讨论了STM32如何
保存
和恢复
现场
,以及
异常
返回机制。
保存
中断
现场
和恢复中断
现场
的代码分析
本文分析了ARM底层中断代码中
保存
和恢复中断
现场
的过程。中断发生后,内核先
保存
现场
,再调用中断处理函数,处理完成后恢复
现场
。文中介绍了中断向量表,以及在ARM不同模式下
保存
和恢复中断
现场
的具体操作,包括寄存器的使用和
栈
的变化。
任务调度管理-
保存
现场
和恢复
现场
本文详细介绍了在FreeRTOS中移植到ARM Cortex-A9时,如何在任务调度过程中
保存
和恢复
现场
。通过system模式保护
现场
,任务创建时在
栈
上开辟空间
保存
上下文。任务上下文切换在system mode中进行,确保不破坏其他特权级别的运行
栈
。同时,文章讨论了任务初始化的过程,包括初始化任务堆
栈
和设置任务控制块中的
栈
顶指针,以确保任务在调度执行时能正确恢复CPU
现场
。
异常
处理深入分析_
保存
现场
本文深入分析ARM架构下
异常
处理中的
现场
保存
机制,对比Cortex-M3/M4与Cortex-A7在中断响应时的差异。重点讲解硬件与软件如何协作完成
现场
保护,包括寄存器分类、调用规范及不同处理器的操作模式与堆
栈
管理。
ARMv8
异常
处理之
保存
现场
kernel_entry详解
本文深入探讨了ARMv8架构下
异常
处理的kernel_entry宏定义,主要涉及
异常
级别、寄存器
保存
、
栈
空间管理和任务切换等关键步骤。详细解释了kernel_entry如何
保存
现场
,特别是对于el1_sync
异常
的处理,包括
保存
通用寄存器、清零操作、获取及设置task_struct等,确保在kernel_exit时能够恢复准确的
现场
。
驱动开发/核心开发
21,620
社区成员
21,709
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章