2015-10-20 51 views
0

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

+0

“我所指的代码是用固件写的”固件是一种新的编程语言吗? – Olaf

+0

nonono,我只是说它是一个固件代码,你有很好的幽默感:D – JIN007

回答

0

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

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

编辑。

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

相关问题