代码执行如何跳转到软件中断处理程序?

时间:2015-10-20 19:24:07

标签: embedded embedded-linux firmware

我说的是一个使用ARM cortex M3的系统。我所指的代码是用固件编写的。用户向固件发送执行特定作业的命令,固件调用特定的软件中断处理程序来执行与发送的命令相对应的任务。我知道中断向量表中提到了软件中断处理程序,但命令是如何发出的由用户例如。擦除会导致在固件内部调用软件中断进行擦除操作吗?

1 个答案:

答案 0 :(得分:0)

软件中断是一条指令(也是其他名称,同一条指令)。处理器中的逻辑知道然后将模式切换到管理程序或任何正确的程序,并开始执行(有点像跳转)到由向量表中的地址指示的代码。然后在那里有处理命令的软件,你在调用软件中断指令之前设置的东西告诉操作系统为你做系统调用的有效性或者是什么。

进行系统调用的应用层代码,链接到应用程序的库/代码从应用程序获取参数,并为软件中断设置适当的信息,执行软件中断,收集结果当中断返回并清理时。

EDIT。

向量表中的所有向量都以这种方式工作。甚至重置。逻辑知道事件何时发生,中断,数据中止,未定义指令等。逻辑硬连线到特定地址,读取该值,这是一个地址,然后开始在该处理程序地址执行。 swi / svc只是另一个“事件”,但是我们想直接创建一个未创建的指令或未对齐的访问等,这些都将基本上做同样的事情,触发事件,正常执行停止,机器状态可能或可能没有保存(一些百分比在cortex-m3中,但可能取决于事件),并且处理程序的执行发生。 (在m3中,没有主管与用户是全尺寸的手臂)。 svc / swi是一个虽然我们想要创建未定义的地方但我们通常不想这样做。硬件中断没有太大的不同,但我们没有插入指令来引起它们,其他逻辑基于该逻辑中的某些事件导致它们。在所有情况下,我们(程序员)必须为我们需要处理的每个事件编写代码(我们需要处理的每个事件,涵盖可能发生的所有事件),其中一个可能是svc / swi事件,在这个范围内,它不是由arm定义的,你称之为系统功能或它们是如何定义的。 arm可能有一个他们使用的集合,但是你在技术上可以自由地创建你想要的任何机制和你想要的任何系统调用,你只需要确保调用者和被调用者就定义达成一致,谁负责什么。