在上篇**中,我提到了新版启动文件相比于之前启动文件的一些重要的特点和区别,其中就包含了中断向量表和标准化的中断服务函数(主要是Keil下的工程,IAR下工程仍然沿用之前版本的启动文件),这种风格我最开始还是默默的适应了一段时间,不过后来无论是用起来还是可阅读性最终让我欣然接受了这种风格的中断结构并慢慢得喜欢上了它,呵呵。
作为嵌入式开发者,我在我的博客中不止一次的提到过中断管理是对了解并入门一款MCU最基本的要素之一,所以我曾经专门为ARM Cortex-M4写过一篇使用其复杂的中断管理功能的**(主要是NVIC模块的介绍)。之前版本的启动文件将中断向量表定义在vectors.c和.h文件中,并以VECTOR_xxx的统一格式填充向量表如下图,然后在用户的应用程序中自定义中断服务函数名并在isr.h中undef和def相应的中断服务函数。
<img id="aimg_GABPL" class="zoom" file="http://files.chinaaet.com/images/blog/2014/11/01/3192228496715.png" lazyloadthumb="1" border="0" alt="" />
而在新版的启动文件中,飞思卡尔直接把中断向量表加到该文件中,并预填充了标准化的中断服务函数接口,以Weak弱函数的形式体现,如下图1,这种风格的好处是用户无需重定义中断服务函数了,可以直接在应用代码中添加该中断向量表中的标准中断服务函数名,并在其中编写自己的中断处理功能,如图2,然后在最后编译链接的时候编译器会自动将该中断服务函数的地址替代原来中断向量表中相应中断号的地址:
<img id="aimg_bwQ37" class="zoom" file="http://files.chinaaet.com/images/blog/2014/11/01/3200207315350_thumbs.png" lazyloadthumb="1" border="0" alt="" />
图1
<img id="aimg_tNUpu" class="zoom" file="http://files.chinaaet.com/images/blog/2014/11/01/3200779219138.png" lazyloadthumb="1" border="0" alt="" />
图2
最后需要说一句,实际上谈不上新版和旧版启动代码风格的好坏,自己习惯适用就是好的,呵呵。
—————————————————————————————————————— |