自己动手从0到1学写RTOS学习指南

  1. 主页
  2. 自己动手从0到1学写RTOS学习指南
  3. 常见问题FAQ汇总
  4. 为什么异常处理函数是PendSV_Handler

为什么异常处理函数是PendSV_Handler

内容纲要

感谢同学 @小波 的提问

Q:为什么PendSV异常处理只需要定义PendSV_Handler?编译器会自动处理吗?

A:会的。在系统启动文件startup_ARMCM3.s中实际有定义向量表__Vectors,表中配置PendSVC异常处理程序的名称为PendSV_Handler。

在启动文件中,默认以WEAK形式实现了该处理程序。

{% highlight asm %}
PendSV_Handler PROC
EXPORT PendSV_Handler [WEAK]
B .
{% endhighlight %}

由于WEAK修饰符的特殊作用。如果我们在C文件中重新定义了同名函数,weak定义的PendSV_Handler会被C中定义的取代。

这就是为什么在视频中说:定义这样一个C函数,异常发生时会自动调用。

我在视频中没讲,是因为这个细节并不重要,只要知道这么做就可以了。讲明白了,估计有些人会晕,有些人并不关心这个,没有必要制造麻烦。

这篇文章对您有用吗?

我们要如何帮助您?

发表评论

电子邮件地址不会被公开。 必填项已用*标注