# STM32F103C8XWOS
**Repository Path**: xwos/STM32F103C8XWOS
## Basic Information
- **Project Name**: STM32F103C8XWOS
- **Description**: 在STM32F103C8上移植了XWOS的模板工程
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2023-07-08
- **Last Updated**: 2025-05-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 介绍
本项目可作为模板工程。此工程仅仅在单片机STM32F103C8上移植了XWOS,不具有其他功能。
+ IDE:STM32CubeIDE
+ MCU: STM32F103C8
## XWOS
玄武操作系统(XWOS®)开发于2015年,是一款运行在嵌入式微控制器上的通用实时操作系统,
主要面向可靠、实时、安全的应用领域,包括汽车、物联网、工控等。
+
+
+
+
# 开发指南
## 下载源码
```shell
git clone --recursive https://gitee.com/xwos/STM32F103C8XWOS.git
```
## 搭建开发环境
参考
## 导入工程到STM32CubeIDE
工程需放在STM32CubeIDE的工作目录内(即STM32CubeIDE启动时指定的目录)。
+ 菜单: **File --> Import... --> General --> Projects from Folder or Archive**
## STM32CubeMX配置工程
MCU的驱动是使用 **STM32CubeMX** 进行配置的,并未直接在 **STM32CubeIDE** 内配置。
**STM32CubeMX** 配置文件的路径 `STM32Cube/STM32F103C8XWOS.ioc` 。
用户修改配置时,需要注意中断优先级的要求:
```
切换上下文的中断为系统中最低优先级中断
切换上下文的中断 <= 滴答定时器的中断 <= 调度器服务中断
```
+ NVIC设置
+ 设置 **3** 个抢占优先级位和 **1** 个子优先级位;
+ SVC中断设置成 **最高** 优先级,即 **Preemption Priority** 为 **0** ;
+ PendSV中断设置成 **最低** 优先级,即 **Preemption Priority** 为 **7** ;
+ Systick中断设置成 **最低** 优先级,即 **Preemption Priority** 为 **7** ;
+ 系统Fault的优先级设置为 **0** ;
+ 其他中断的优先级只可在 **1~6** 之间。
## 编译
有两种方法可以编译,两种方法结果产生一样:
+ 打开终端,并将当前路径切换到工程的 `Board` 目录,执行 `make` 命令。
+ 在IDE中点击 **编译** 按钮。
### 已知问题
+ 平台:Windows 11
+ 问题现象:STM32CubeIDE中编译时,提示错误 `make (e=3): 系统找不到指定的路径。`
+ 问题原因:STM32CubeIDE自带的 `make` 命令版本不兼容。
+ 解决方法:使用 **XWTC** 中提供的 `make` 命令,设置方法如下:

## 调试
+ 菜单: **Run --> Debug Configurations...** :
+ **STM32F103C8XWOS-Openocd-DAPLink.launch** : **gdb** + **Openocd** + **DAPLink调试器**
+ **STM32F103C8XWOS-STlink.launch** : **gdb** + **STLink**
+ **STM32F103C8XWOS-JLink.launch** : **gdb** + **JLink**
## 运行过程
+ 程序入口: `Board/main.c`
+ 启动流程:
+ `xwos_main()` 创建一个主线程 `main_task()` 。
# 客制化
## 工程改名
1. 可通过命令 `find . -type f -name "*STM32F103C8XWOS*"` 搜索所有文件名包含 `STM32F103C8XWOS` 的文件,将其改为 **新工程名** 。
2. 可通过命令 `find . -path "./.git" -prune -o -type f -exec grep -i -H "STM32F103C8XWOS" {} \;` 搜索所有内容包含 `STM32F103C8XWOS` 的文件,
然后依次打开,将其全部替换为 **新工程名** 。
## 连接到外部静态库
可在文件 `Board/lib.mk` 中定义外部静态库:
+ `EINCDIRS` :外部静态库头文件列表
+ `EINCDIRS_gcc` :只对gcc编译器生效的外部静态库头文件列表
+ `EINCDIRS_llvm` :只对clang编译器生效的外部静态库头文件列表
+ `ELIBS` :外部静态库列表
+ `ELIBS_gcc` :只对gcc编译器生效的外部静态库列表
+ `ELIBS_llvm` :只对clang编译器生效的外部静态库列表
# 源码说明
## BSP
+ STM32Cube模块: `STM32Cube`
+ STM32CubeMX配置文件: `STM32Cube/STM32F103C8XWOS.ioc`
+ 中断向量表: `STM32Cube/Core/Src/ivt.c`
+ 自动生成的脚本: `Tools/el/stm32ivt.el`