【面试集锦 - 嵌入式 - MCU】

MCU从开机到启动main函数之间需要做什么

在嵌入式系统中,从MCU(Microcontroller Unit,微控制器单元)的开机到main()函数的启动之间,通常需要完成以下一些关键步骤:

  1. 复位向量表的设置:MCU在上电或复位时会加载复位向量表。复位向量表包含了处理器复位后要执行的初始化函数的地址。通常需要在向量表中设置Reset向量,以指向主复位处理函数。

  2. 时钟和时钟源配置:配置MCU的时钟和时钟源,以提供系统时钟和外设时钟。这可能涉及设置主时钟源、时钟分频器、PLL(Phase-Locked Loop)和外设时钟配置等。

  3. 系统初始化:执行必要的系统初始化步骤,包括清除或初始化RAM、设置堆栈指针、初始化全局变量和静态变量等。

  4. 外设初始化:根据需要,初始化和配置所需的外设,如GPIO(General Purpose Input/Output)、UART(Universal Asynchronous Receiver/Transmitter)、SPI(Serial Peripheral Interface)、I2C(Inter-Integrated Circuit)等。这些外设可能需要设置引脚复用、寄存器配置和中断设置等。

  5. 中断配置:根据系统需求,配置和初始化中断控制器和中断处理函数。这包括设置中断优先级、使能所需的中断、注册中断服务程序等。

  6. 启动操作系统(可选):如果嵌入式系统使用操作系统(如RTOS),则需要启动操作系统的调度器,并开始任务调度。这包括初始化任务控制块、创建任务、设置任务优先级和任务堆栈等。

  7. main()函数的调用:最后,在上述初始化过程完成后,启动代码会调用main()函数,程序的正常执行从这里开始。

当MCU从开机到启动main()函数期间,可能还会涉及以下一些额外的步骤或操作:

  1. 低功耗模式配置:根据系统需求,在初始化阶段可能需要配置低功耗模式,以降低功耗并延长电池寿命。这包括设置睡眠模式、待机模式或其他低功耗模式,并相应地配置唤醒源和中断。

  2. 外部设备初始化:如果系统中涉及外部设备,如传感器、存储器、通信接口等,需要在初始化阶段对这些设备进行适当的配置和初始化。这可能包括设备的寄存器配置、通信协议初始化、校准过程等。

  3. 自检和诊断:一些MCU可能具有自检或诊断功能,用于检测硬件或系统的状态。这些功能可以在启动过程中执行,以确保硬件的正常工作,并在需要时采取适当的纠正措施。

  4. 资源分配和初始化:在初始化阶段,可能需要对系统资源进行分配和初始化。这可能包括动态内存分配、任务堆栈的创建、中断向量表的初始化等。

  5. 硬件加速器或协处理器的配置:某些MCU可能具有硬件加速器或协处理器,如DMA(Direct Memory Access)、加密引擎、浮点单元等。在启动过程中,可能需要对这些硬件进行适当的配置和初始化,以提高系统性能。

  6. 系统自定义初始化:根据特定的应用需求,可能需要执行自定义的系统初始化操作。这可能涉及特定设备的驱动程序初始化、用户设置的加载、通信参数的配置等。

示例

// 复位向量表的设置
// 设置复位向量表中的Reset向量,指向主复位处理函数

// 时钟和时钟源配置
// 配置主时钟源,如使用外部晶体振荡器或内部时钟源
// 配置时钟分频器、PLL等,以获取所需的系统时钟和外设时钟

// 系统初始化
// 清除或初始化RAM
// 设置堆栈指针
// 初始化全局变量和静态变量

// 外设初始化
// 配置和初始化所需的外设,如GPIO、UART、SPI、I2C等
// 设置引脚复用、寄存器配置、中断设置等

// 中断配置
// 配置和初始化中断控制器
// 设置中断优先级、使能所需的中断
// 注册中断服务程序

// 启动操作系统(可选)
// 启动RTOS的调度器
// 初始化任务控制块
// 创建任务、设置任务优先级和任务堆栈等

// main函数的调用
int main() {
    // 程序正常执行的起始点

    return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六月悉茗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值