裸机没有操作系统时,存在以下关键组成部分和概念:
启动文件(startup.s)
相当于房子的地基,包含最基本的启动代码,用于初始化硬件和设置堆栈指针等。
链接脚本(*.ld)
类似于房子的设计图,定义了内存布局和外部设备的映射关系,确保程序在内存中的正确位置加载和执行。
主程序(main.c)
这是实际执行的程序代码,即我们住的房子本身,包含了应用程序的主要逻辑和功能。
交叉编译工具链
用于将编写的C代码转换成目标硬件能理解的机器码。例如,在ARM架构上,可能需要使用特定的工具链如ARM GCC。
调试器
如J-Link、ST-Link,用于在开发过程中调试程序,查找和修复bug。
编辑器
推荐使用VSCode或Keil MDK等工具进行代码编写和编辑。
硬件认识
以STM32F103系列为例,其核心是一个CM3内核的ARM处理器,板子上最基本的外设包括时钟系统、GPIO口、NVIC中断控制器和各种总线(AHB/APB)。时钟系统的配置至关重要,类似于人的心跳,配置错误会导致整个系统无法正常运行。
裸机编程的基本概念
裸机编程是指在没有任何操作系统的情况下直接与硬件打交道,需要从最基础的硬件初始化开始,逐步构建整个系统。
总结来说,裸机没有操作系统时,需要手动编写和初始化硬件驱动程序、配置内存布局、编写和调试应用程序代码。这些任务需要深厚的硬件知识和编程技能。开发环境的搭建和工具的使用也是裸机编程过程中必不可少的部分。