9、嵌入式系统启动流程与代码实现详解

嵌入式系统启动流程与代码实现详解

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) {
    /* 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值