systeminit函数作用
时间: 2023-05-04 16:06:16 浏览: 599
systeminit函数是操作系统启动过程中第一个被执行的函数,其作用是进行系统的初始化工作。这个函数的主要任务是建立内存管理机制,初始化中断控制器,创建进程等。
首先,systeminit函数进行内存管理机制的建立,将物理内存映射到虚拟地址空间中,并建立页表。同时,初始化物理内存分配器和缓存管理器,为后续程序运行奠定基础。
接下来,systeminit函数初始化中断控制器,为中断处理机制做好准备。这个过程包括设置中断向量表和中断处理程序,并开启中断控制器的工作。这样,在操作系统运行过程中,当有中断发生时,系统能够迅速响应。
最后,systeminit函数创建系统的第一个进程,初始化用户态和内核态环境,为用户进程的运行提供支持。此时,整个操作系统已经初始化完成,开始运行用户程序。
综上所述,systeminit函数是操作系统启动过程中不可或缺的一环,它完成了系统内存管理、中断管理和进程管理等重要工作,为后续程序运行提供了必要的基础。
相关问题
SystemInit函数作用
SystemInit函数是一个在C/C++程序中被调用的初始化函数,它的作用是初始化系统的运行环境和相关资源。具体来说,SystemInit函数会执行以下操作:
1. 初始化内存管理器:它会设置堆和栈的起始地址,初始化内存分配算法等。
2. 初始化设备和外设:SystemInit函数可能会初始化一些硬件设备,如时钟、中断控制器、串口、定时器等。
3. 设置全局变量和数据结构:SystemInit函数可以设置一些全局变量和数据结构,用于程序运行期间的状态维护和数据传递。
4. 配置系统参数:SystemInit函数可以配置一些系统参数,如时钟频率、中断优先级、堆栈大小等。
总之,SystemInit函数是一个在程序启动时调用的初始化函数,它的目标是确保系统处于一个合适的状态,以便后续的代码能够正常运行。
SystemInit函数是干什么的
### SystemInit 函数的功能
`SystemInit()` 是 CMSIS(Cortex Microcontroller Software Interface Standard)规范定义的一个重要函数,用于初始化基于 ARM Cortex-M 架构的微控制器系统[^1]。该函数的主要目的是设置 MCU 的基本运行环境,以便后续的应用程序能够正常工作。
对于 STM32 系列芯片而言,`SystemInit()` 通常由 ST 官方提供,并位于 `system_stm32f10x.c` 文件中[^2]。其具体功能可能因不同的芯片型号而有所差异,但在大多数情况下,它会执行以下操作:
#### 1. 配置系统时钟
`SystemInit()` 通常负责配置系统的默认时钟源。这包括启用内部高速振荡器 (HSI) 或外部晶振 (HSE),并将其作为系统时钟的基础。需要注意的是,在某些较新的系列(如 H7),这部分功能已经被转移到其他函数中,例如 `SystemClock_Config()`[^3]。
#### 2. 复位向量表偏移设置
为了支持从不同存储区域启动应用程序(如 Flash、SRAM 或者外部存储设备),`SystemInit()` 可能会对复位向量表的位置进行调整。这是通过修改 SCB->VTOR 寄存器实现的,从而允许中断向量表放置在指定地址上。
#### 3. 缺省异常优先级设定
部分版本的 `SystemInit()` 实现还会更改 NVIC 控制寄存器 (`SCB->AIRCR`) 来降低缺省异常处理程序的优先级级别。这种做法可以防止高优先级中断抢占低延迟响应需求的任务。
以下是简化版的 `SystemInit()` 示例代码片段:
```c
void SystemInit(void) {
// 如果使用了外部高速晶体,则开启之
if (RCC_CR & RCC_CR_HSEON) {
while (!(RCC_CR & RCC_CR_HSERDY));
}
// 设置矢量中断表位置到闪存起始处
#if defined(VECT_TAB_SRAM)
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET;
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;
#endif
// 调整所有可用内核错误中断优先级至最低
#ifndef DISABLE_WIC
SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
__DSB();
__ISB();
#endif
}
```
尽管如此,随着硬件架构的发展和技术进步,像 STM32H7 这样的高级别产品线里,原本属于 `SystemInit()` 的职责逐渐被分解到了更专门化的子模块当中去完成。
---
###
阅读全文
相关推荐
















