内容纲要
感谢同学 @小波 的提问
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函数,异常发生时会自动调用。
我在视频中没讲,是因为这个细节并不重要,只要知道这么做就可以了。讲明白了,估计有些人会晕,有些人并不关心这个,没有必要制造麻烦。