Skip to content

Commit ea936c8

Browse files
authored
Merge pull request #10 from xrobot-org/docs/mspm0-env-setup
Add MSPM0 environment setup doc
2 parents 0bf99ea + 39babc1 commit ea936c8

1 file changed

Lines changed: 178 additions & 0 deletions

File tree

docs/env_setup/mspm0.md

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
---
2+
id: env-setup-mspm0
3+
title: MSPM0环境配置
4+
sidebar_position: 3
5+
---
6+
7+
# MSPM0 环境配置
8+
9+
当前默认使用 GNU Arm Embedded Toolchain,编译器前缀为 `arm-none-eabi-`。目前没有验证在 TI Arm Clang 工具链下的兼容性。
10+
11+
如果只是想快速开始,推荐直接使用 XRobot 的 MSPM0 Docker 镜像:`ghcr.io/xrobot-org/docker-image-mspm0:main`
12+
13+
## CMake 配置
14+
15+
在 LibXR 外部工程中,MSPM0 通常按下面的方式接入:
16+
17+
```cmake
18+
set(LIBXR_SYSTEM None)
19+
set(LIBXR_DRIVER mspm0)
20+
set(LIBXR_NO_EIGEN True)
21+
set(MSPM0_SDK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mspm0-sdk")
22+
23+
include("${CMAKE_SOURCE_DIR}/cmake/LibXR.CMake")
24+
```
25+
26+
其中:
27+
28+
* `LIBXR_SYSTEM None` 表示当前按裸机方式集成
29+
* `LIBXR_DRIVER mspm0` 表示启用 LibXR 的 MSPM0 驱动目录
30+
* `MSPM0_SDK_DIR` 指向 TI MSPM0 SDK 根目录
31+
* `cmake/LibXR.CMake` 负责把 LibXR 和 MSPM0 SDK 接到工程里
32+
33+
一个清晰的职责分工通常是:
34+
35+
*`CMakeLists.txt` 负责最终应用目标、用户源文件、链接选项和后处理
36+
* `cmake/LibXR.CMake` 负责 LibXR 平台选择、SDK 路径检查、SysConfig 输出检查,以及给 `xr` 目标补齐 MSPM0 相关依赖
37+
38+
## 目录结构约定
39+
40+
推荐采用下面的目录结构:
41+
42+
```text
43+
.
44+
|-- CMakeLists.txt
45+
|-- cmake/
46+
| `-- LibXR.CMake
47+
|-- libxr/
48+
|-- mspm0-sdk/
49+
|-- src/
50+
`-- sysconfig/
51+
```
52+
53+
其中:
54+
55+
* `libxr/` 是 LibXR 源码目录
56+
* `mspm0-sdk/` 是 TI MSPM0 SDK 根目录
57+
* `src/` 是应用层源文件
58+
* `sysconfig/` 保存 SysConfig 生成的配置文件
59+
60+
如果你的 SDK 不在仓库内,也可以把 `MSPM0_SDK_DIR` 改到其他位置。
61+
62+
## SysConfig 输出要求
63+
64+
MSPM0 工程通常依赖 SysConfig 输出的配置文件。CMake 一般只负责“查找并使用”,不负责调用 SysConfig 自动生成。
65+
66+
推荐把 SysConfig 输出统一放到:
67+
68+
```text
69+
sysconfig/
70+
```
71+
72+
CMake 侧通常需要能找到这些文件:
73+
74+
* `ti_msp*_config.c`
75+
* `ti_msp*_config.h`
76+
* `device.opt`
77+
* 一份 `.lds` 链接脚本,常见文件名为 `device_linker.lds`
78+
79+
如果项目采用自动发现方式,那么根工程里不需要手工写死 `ti_msp_dl_config.c` 这类具体文件名,只需要保证生成文件位于 `sysconfig/` 目录即可。
80+
81+
如果你修改了 `.syscfg` 文件,需要先重新生成这些输出,再重新执行 CMake 构建。
82+
83+
## 芯片型号相关项
84+
85+
虽然本文是通用说明,但 MSPM0 项目里仍有几项内容必须随芯片型号或开发板变化:
86+
87+
* 启动文件路径
88+
* `driverlib.a` 所在目录
89+
* SysConfig 目标板或目标芯片
90+
* 编译宏,例如 `__MSPM0xxxx__`
91+
92+
MSPM0 工程里,很多编译问题本质上都是“芯片型号相关文件没有同步替换”。
93+
94+
## 工具链要求
95+
96+
推荐使用:
97+
98+
* `cmake`
99+
* `ninja`
100+
* `arm-none-eabi-gcc`
101+
* `arm-none-eabi-g++`
102+
* `arm-none-eabi-objcopy`
103+
104+
本机直接构建的典型命令如下:
105+
106+
```powershell
107+
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=arm-none-eabi-gcc -DCMAKE_CXX_COMPILER=arm-none-eabi-g++ -DCMAKE_ASM_COMPILER=arm-none-eabi-gcc
108+
cmake --build build
109+
```
110+
111+
## Docker 构建
112+
113+
如果不希望在本机单独安装工具链,可以直接用 Docker。
114+
115+
PowerShell:
116+
117+
```powershell
118+
powershell -ExecutionPolicy Bypass -File .\tools\docker_build.ps1
119+
```
120+
121+
Bash:
122+
123+
```bash
124+
bash ./tools/docker_build.sh
125+
```
126+
127+
PowerShell 脚本支持:
128+
129+
```powershell
130+
.\tools\docker_build.ps1 -Image ghcr.io/xrobot-org/docker-image-mspm0:main -BuildType Release -BuildDir build -CCompiler arm-none-eabi-gcc -CxxCompiler arm-none-eabi-g++ -AsmCompiler arm-none-eabi-gcc
131+
```
132+
133+
Bash 脚本支持这些环境变量:
134+
135+
* `XROBOT_MSPM0_IMAGE`
136+
* `BUILD_TYPE`
137+
* `BUILD_DIR`
138+
* `C_COMPILER`
139+
* `CXX_COMPILER`
140+
* `ASM_COMPILER`
141+
142+
## 常见问题
143+
144+
### CMake 提示找不到 MSPM0 SDK
145+
146+
先检查:
147+
148+
```text
149+
${MSPM0_SDK_DIR}/source
150+
```
151+
152+
是否存在。如果不存在,说明 SDK 路径配置不对。
153+
154+
### CMake 提示找不到 SysConfig 文件
155+
156+
先检查 `sysconfig/` 下是否已经生成:
157+
158+
* `ti_msp*_config.c`
159+
* `ti_msp*_config.h`
160+
* `device.opt`
161+
* `.lds`
162+
163+
如果缺文件,说明还没有完成 SysConfig 输出生成,或者输出目录与 CMake 约定不一致。
164+
165+
### 链接阶段出现 `_write/_read/_close` 一类 warning
166+
167+
如果工程使用了:
168+
169+
```text
170+
--specs=nano.specs
171+
--specs=nosys.specs
172+
```
173+
174+
那么 `_write``_read``_close``_isatty``_fstat` 等未实现 warning 是常见现象。只要最终成功生成 ELF,通常不影响裸机程序运行。
175+
176+
## 示例工程
177+
178+
* [MSPM0G3507 LibXR Template](https://github.com/xrobot-org/MSPM0G3507_LibXR_Template)

0 commit comments

Comments
 (0)