"嵌入式LAB71是一个关于引导装载程序的实验,主要涉及理解uboot等bootloader的功能和工作原理,以及如何调整编译链接参数以创建定制的编译结果。实验使用STM32F103核心板、ST-Link线、USB-TTL串口线和相关软件工具进行,旨在提升对嵌入式硬件的理解和实践能力。实验内容包括修改链接脚本以分配内存空间,并实现串口接收中断回调函数和主循环的控制逻辑。"
在嵌入式系统中,Bootloader是系统启动时运行的第一段代码,它的主要任务是初始化硬件,加载操作系统或应用程序到内存,并将控制权交给它们。uboot是一款广泛应用的开源Bootloader,适用于多种处理器架构,包括ARM,它具有设备检测、网络启动、文件系统管理等功能。在本实验中,学生需要理解Bootloader的基本工作流程,这包括从固件加载到启动操作系统的一系列步骤。
实验要求学生调整编译链接参数。在C语言编程中,链接器负责将编译器产生的目标文件合并成可执行文件。通过修改链接脚本,可以定制内存布局,比如为堆栈和程序存储分配不同的内存区域。实验中,学生需要分配5k的RAM作为堆栈和10k的RAM作为程序存储,同时在Bootloader的链接脚本中,分配5k的RAM用于堆栈,而FLASH用于程序存储。
在软件实现部分,实验使用了串口通信来交互。串口接收中断回调函数`HAL_UART_RxCpltCallback`在接收到完整数据包后,会解析出指令、操作数1和操作数2,并将接收到的信息回显。主循环根据接收标志`rx_flag`来判断是否处理新的指令,如"peek"和"poke",这两个指令通常用于内存查看和修改。`Peek`函数用于读取内存中的值,而`Poke`函数则用于写入新的值。
通过这个实验,学生不仅能学习到Bootloader的工作原理,还能深入理解嵌入式系统的内存管理和串口通信机制,这些都是嵌入式开发中至关重要的技能。此外,使用交叉编译工具链也是嵌入式开发的必备知识,它允许在宿主机上编译针对目标硬件的代码。实验环境的搭建和配置,如ST-Link驱动和串口终端软件的使用,也锻炼了学生的实际操作能力。