arm-none-eabi-gcc
工具链,其他架构(如 8051、RISC-V)只需替换工具链和参数即可。工具名称:ARM GNU Toolchain(包含 arm-none-eabi-gcc
)
下载地址:ARM Developer 官网
推荐版本:arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.exe
(适用于 Windows)
下载步骤:
安装步骤:
.exe
文件运行安装程序。C:\arm-gnu-toolchain
)。验证安装:
打开 CMD:
arm-none-eabi-gcc --version
arm-none-eabi-ar --version
arm-none-eabi-objcopy --version
应显示版本信息(如 13.2.1
)。
api.h
和 api.c
。.hex
文件烧录到芯片,验证功能。已完成:下载并安装 arm-none-eabi-gcc
(见 1.1)。
配置环境变量(若未自动添加):
右键“此电脑” -> “属性” -> “高级系统设置” -> “环境变量”。
在“系统变量”的 Path
中添加:C:\arm-gnu-toolchain\bin
。
在 CMD 中验证:
arm-none-eabi-gcc --version
操作:
在磁盘上创建目录,如:
mkdir C:\Projects\api
cd C:\Projects\api
API 头文件(api.h
):
// api.h
#ifndef API_H
#define API_H
void init_device(void);
int read_sensor_data(unsigned char sensor_id, unsigned char* buffer);
void set_output(unsigned int value);
#endif
C:\Projects\api\api.h
。API 实现文件(api.c
):
// api.c
#include "api.h"
#define REG_CONTROL (*(volatile unsigned int*)0x40000000)
#define REG_DATA (*(volatile unsigned char*)0x40000004)
void init_device(void) {
REG_CONTROL = 0x01; // 假设初始化
}
int read_sensor_data(unsigned char sensor_id, unsigned char* buffer) {
if (!buffer) return -1;
*buffer = REG_DATA; // 假设读取
return 0;
}
void set_output(unsigned int value) {
REG_CONTROL = value; // 假设设置
}
C:\Projects\api\api.c
。编译:
cd C:\Projects\api
arm-none-eabi-gcc -c api.c -o api.o -mcpu=cortex-m3 -mthumb -O2
打包:
arm-none-eabi-ar rcs libapi.a api.o
验证:
arm-none-eabi-nm libapi.a
init_device
、read_sensor_data
、set_output
。移除符号:
arm-none-eabi-strip --strip-unneeded libapi.a
硬件保护准备:
文件:
C:\Projects\api\api.h
C:\Projects\api\libapi.a
文档(可选):
说明每个函数的用法,如:
函数: int read_sensor_data(unsigned char sensor_id, unsigned char* buffer)
描述: 读取传感器数据
参数: sensor_id (0-255), buffer (数据缓冲区)
返回值: 0 (成功), -1 (失败)
下载工具链:同开发者,安装 arm-none-eabi-gcc
。
验证:
arm-none-eabi-gcc --version
api.h
libapi.a
C:\UserProject
。创建 main.c
:
// main.c
#include "api.h"
int main(void) {
unsigned char data;
init_device();
read_sensor_data(1, &data);
set_output(0x1234);
while (1);
return 0;
}
C:\UserProject\main.c
。命令:
cd C:\UserProject
arm-none-eabi-gcc -c main.c -o main.o -mcpu=cortex-m3 -mthumb -O2
arm-none-eabi-gcc main.o -L. -lapi -mcpu=cortex-m3 -mthumb -o main.elf --specs=nosys.specs
arm-none-eabi-objcopy -O ihex main.elf main.hex
输出:生成 main.hex
。
main.hex
烧录到 Cortex-M3 芯片。arm-none-eabi-gcc
(ARM GNU Toolchain)。api.h
和 api.c
-> 生成 libapi.a
-> 保护代码 -> 提供 api.h
和 libapi.a
。api.h
和 libapi.a
-> 编写代码 -> 编译链接 -> 烧录运行。若切换到 8051 或 RISC-V等,只需替换工具链和命令(如前述表格),其他步骤不变!
void
关键字区别有了更深入的理解和认识。