matter乐鑫 c3 低功耗乐鑫科技的代理商深入RISC-V 程序开发,在嵌人式系统软件开发过程中经常会遇到一些共性的问题。本文将讨论嵌入式系统程序中的启动程序、内存资源管理、程序优化和系统能耗管理等问题,并通过在GD32VF103V-EVAL 开发环境上所实现的程序进行说明。
RISC-V 启动程序
上电复位后,CPU 程序计数器 PC 指向程序空间的起始地址,读取指令并执行启动程序与处理器架构和类型紧密关联,是 CPU 启动后执行的第一段程序,它初始化处理器和系统硬件,为后续运行用高级语言编写的程序做准备。在不同类型处理器之间移植软件系统时,启动程序必须重写或改写。matter乐鑫 c3 低功耗乐鑫科技的代理商启动程序是引导装载程序(Bootloader)的关键部分,通常用汇编语言编写。例如,在 u-boot 中,CPU 的启动程序文件是“start.s”。
启动过程
当处理器上电,或者复位(RESET)引脚的电平由低变高时,matter乐鑫 c3 低功耗乐鑫科技的代理商处理器执行硬件初始化及内部自测试(Build-in Self-Test,BIST),然后执行启动程序,后执行由高级语言编写的程序,完成系统启动,进入正常工作状态。
启动程序通常包含处理器中断和异常向量表、处理器初始化模块、系统硬件初始化模块,以及准备高级语言程序运行环境模块等。如图 8.1 所示为一个典型嵌入式系统中的启动程序流程。
上电或复位后,处理器 PC 首先指向中断向量表的基地址,即复位中断向量的位置,然后执行启动程序。matter乐鑫 c3 低功耗乐鑫科技的代理商在启动程序中,先初始化处理器本身的工作状态,再初始化系统中处理器以外的硬件环境,然后初始化 C 语言程序运行环境,后跳转到C语言程序入口 main。
通常,初始化处理器的工作包括选择内时钟源,设置内核工作频率,设置处理器工作模式,设置内核定时器,初始化存储管理单元,设置内部看门狗(Watchdog)电路,设置外部存储接口,设置内核中断使能及其他片内集成外设。系统初始化系统中处理器外部的设备。
准备高级语言运行环境需要初始化系统堆栈,改变处理器模式或状态,为高级语言程序运行环境分配并初始化存储空间。如图8.2所示为一个处理器初始化过程的示例。其中,matter乐鑫 c3 低功耗乐鑫科技的代理商初始化存储管理单元适用于拥有存储管理单元的处理器,并且该步骤必须在初始化处理器的存储器接口之后进行。
中断和异常常向量--初始化处理器--初始化系统硬件--初始化C语言程序运行环境--调用主程序main
图8.1 启动程序流程
初始化系统时钟--初始化存储器接口--初始化存储管理单元--初始化I/O接口--设置看门狗--设置处理器模式
图8.2 初始化处理器流程