嵌入式系统启动流程与代码实现详解
1. 启动代码与中断向量表
为了启动一个可行的系统,我们需要定义中断向量并将指针与定义的函数关联起来。在参考平台的典型启动代码文件中,使用 GCC 节属性将中断向量放置在一个专用节中。由于该节将位于镜像的开头,所以中断向量的定义要从为初始栈指针保留的空间开始,随后是系统异常处理程序。以下是中断向量表的代码示例:
__attribute__ ((section(".isr_vector")))
void (* const IV[])(void) =
{
(void (*)(void))(END_STACK),
isr_reset,
isr_nmi,
isr_hard_fault,
isr_mem_fault,
isr_bus_fault,
isr_usage_fault,
0, 0, 0, 0,
isr_svc,
isr_dbgmon,
0,
isr_pendsv,
isr_systick,
isr_uart0,
isr_ethernet,
/* … many more external interrupts follow */
};
启动代码还必须包含数组中引用的每个符号的实现。处理程序可以定义为无参数的 void 过程,格式与 IV 的签名相同。例如:
void isr_bus_fault(void) {
/*
超级会员免费看
订阅专栏 解锁全文
3514

被折叠的 条评论
为什么被折叠?



