Skip to content

Commit 2b74907

Browse files
committed
Merge branch 'develop' into CMSIS-Pack
2 parents 1c5a4d3 + 84ce6df commit 2b74907

File tree

2 files changed

+1
-332
lines changed

2 files changed

+1
-332
lines changed

fool_cat.fc_embed.pdsc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,6 @@
175175
<!-- Main stdio implementation (includes all utils/*.c internally) -->
176176
<file category="source" name="core/fc_stdio.c" />
177177
<file category="header" attr="template" select="StdIO Header" name="core/fc_stdio.h" />
178-
<file category="doc" name="core/utils/readme.md" />
179178
<file category="include" name="core/" />
180179
</files>
181180
</component>

readme.md

Lines changed: 1 addition & 331 deletions
Original file line numberDiff line numberDiff line change
@@ -1,331 +1 @@
1-
# 暂时使用AI生成,仅供参考
2-
3-
4-
5-
6-
7-
8-
# fc_embed
9-
10-
> 个人嵌入式开发库 - 提供轻量级、高性能的嵌入式系统基础组件
11-
12-
![License](https://img.shields.io/github/license/fool-cat/fc_embed)
13-
![Language](https://img.shields.io/badge/language-C-blue.svg)
14-
![Platform](https://img.shields.io/badge/platform-Cortex--M-orange.svg)
15-
16-
## 📖 简介
17-
18-
`fc_embed` 是一个面向 ARM Cortex-M 系列微控制器的嵌入式基础库,提供了一系列高性能、可配置的核心组件,帮助开发者快速构建嵌入式应用。
19-
20-
### 核心特性
21-
22-
- 🚀 **高性能**:关键组件如 FIFO 采用无锁设计,内存池提供 O(1) 分配
23-
- 🔧 **模块化**:组件独立可选,按需集成
24-
- 💾 **内存高效**:精细的内存管理,适合资源受限的嵌入式环境
25-
- 🎯 **易于移植**:支持 Keil、IAR、GCC 等主流编译器
26-
- 📦 **CMSIS-Pack 支持**:支持通过 Keil 包管理器安装
27-
28-
## 🧩 组件架构
29-
30-
```
31-
fc_embed 核心组件
32-
├── Common 编译器抽象、辅助宏、配置管理
33-
├── Auto_Init 可选的自动初始化框架(4级优先级)
34-
├── FIFO 无锁环形缓冲区(单生产者/单消费者)
35-
├── Memory_Pool O(1)固定大小内存池管理器
36-
├── Port 多缓冲区 I/O 抽象层(类 SEGGER RTT)
37-
├── Transport 多路复用传输层(ANSI 转义序列)
38-
├── StdIO 简化的标准 I/O(printf 家族)
39-
└── Logger 多级日志系统(带颜色、RTT 支持)
40-
```
41-
42-
### 依赖关系
43-
44-
```
45-
Common (基础)
46-
├─> FIFO (头文件)
47-
├─> Memory_Pool
48-
└─> StdIO
49-
50-
FIFO → Port (多缓冲区 I/O)
51-
52-
Port + FIFO → Transport (多路复用)
53-
54-
Memory_Pool + StdIO → Logger (日志系统)
55-
56-
Auto_Init (可选,提供自动初始化)
57-
```
58-
59-
## 📦 安装方式
60-
61-
### 方式 1: CMSIS-Pack(推荐)
62-
63-
1.[Releases](https://github.com/fool-cat/fc_embed/releases) 下载最新的 `.pack` 文件
64-
2. 在 Keil MDK 中导入:`Pack Installer``Import` → 选择 `.pack` 文件
65-
3. 在项目中选择需要的组件:`Manage Run-Time Environment``fc_embed`
66-
67-
### 方式 2: 源码集成
68-
69-
```bash
70-
git clone https://github.com/fool-cat/fc_embed.git
71-
cd fc_embed
72-
git checkout develop # 或 CMSIS-Pack 分支
73-
```
74-
75-
`core/` 目录下的文件添加到你的项目中。
76-
77-
## 🔧 快速开始
78-
79-
### 1. 基础配置
80-
81-
复制配置模板并根据需求修改:
82-
83-
```c
84-
// 基于 core/fc_config_template.h 创建 fc_config.h
85-
#define FC_LOG_ENABLE 1
86-
#define FC_LOG_LEVEL FC_LOG_ALL
87-
#define USE_FC_AUTO_INIT 1 // 启用自动初始化
88-
```
89-
90-
### 2. FIFO 环形缓冲区
91-
92-
```c
93-
#include "fc_fifo.h"
94-
95-
// 定义 FIFO
96-
fc_fifo_t fifo;
97-
uint8_t buffer[256];
98-
99-
// 初始化
100-
fc_fifo_init(&fifo, buffer, sizeof(buffer));
101-
102-
// 写入数据
103-
uint8_t data[] = "Hello";
104-
fc_fifo_write(&fifo, data, sizeof(data));
105-
106-
// 读取数据
107-
uint8_t recv[10];
108-
size_t len = fc_fifo_read(&fifo, recv, sizeof(recv));
109-
```
110-
111-
**特性:**
112-
- 无锁设计(单生产者/单消费者)
113-
- 基于 Linux kfifo 实现
114-
- 支持批量读写、零拷贝操作
115-
116-
### 3. 内存池管理
117-
118-
```c
119-
#include "fc_pool.h"
120-
121-
// 定义内存池
122-
fc_pool_t pool;
123-
uint8_t pool_mem[1024];
124-
125-
// 初始化(每块 64 字节)
126-
fc_pool_init(&pool, pool_mem, sizeof(pool_mem), 64);
127-
128-
// 分配内存
129-
void *ptr = fc_pool_alloc(&pool);
130-
131-
// 释放内存
132-
fc_pool_free(&pool, ptr);
133-
```
134-
135-
**特性:**
136-
- O(1) 时间复杂度
137-
- 固定大小块分配
138-
- 支持内存链式扩展
139-
140-
### 4. 日志系统
141-
142-
```c
143-
#include "fc_log.h"
144-
145-
// 初始化日志(使用自动初始化时无需手动调用)
146-
fc_log_init();
147-
148-
// 使用日志
149-
FC_LOG_I("系统启动");
150-
FC_LOG_W("警告:温度过高 %d°C", temp);
151-
FC_LOG_E("错误:传感器无响应");
152-
```
153-
154-
**特性:**
155-
- 多级日志(ERROR/WARN/INFO/DEBUG/VERBOSE)
156-
- 支持颜色输出
157-
- 集成 SEGGER RTT 支持
158-
159-
### 5. Port I/O 抽象
160-
161-
```c
162-
#include "fc_port.h"
163-
164-
// 默认端口已自动初始化(使用自动初始化时)
165-
// 或手动初始化
166-
fc_default_port_init();
167-
168-
// 重定向 printf 到端口
169-
printf("输出到调试端口\n");
170-
171-
// 或直接使用端口 API
172-
fc_port_printf(&fc_stdout, "格式化输出: %d\n", value);
173-
```
174-
175-
### 6. 自动初始化框架
176-
177-
```c
178-
#include "fc_auto_init.h"
179-
180-
// 定义初始化函数
181-
void my_device_init(void) {
182-
// 设备初始化代码
183-
}
184-
185-
// 注册到自动初始化(DEVICE 阶段,优先级 100)
186-
INIT_EXPORT_DEVICE(my_device_init, 100);
187-
188-
// 在 main 中调用初始化
189-
int main(void) {
190-
fc_section_init_env(); // 环境初始化(main 之前)
191-
fc_section_init_clock(); // 时钟初始化
192-
fc_section_init_device(); // 设备初始化
193-
fc_section_init_app(); // 应用初始化
194-
195-
while(1) {
196-
// 主循环
197-
}
198-
}
199-
```
200-
201-
## 📚 组件详解
202-
203-
### FIFO 环形缓冲区
204-
205-
基于 Linux kfifo 的无锁环形队列实现,适用于单生产者/单消费者场景。
206-
207-
**主要 API:**
208-
- `fc_fifo_init()` - 初始化
209-
- `fc_fifo_write()` / `fc_fifo_read()` - 批量读写
210-
- `fc_fifo_write_byte()` / `fc_fifo_read_byte()` - 单字节读写
211-
- `fc_fifo_peek()` - 查看但不取出
212-
- `fc_fifo_get_write_region()` - 零拷贝写入
213-
214-
### Memory Pool 内存池
215-
216-
O(1) 复杂度的固定大小内存池,支持链式内存块扩展。
217-
218-
**主要 API:**
219-
- `fc_pool_init()` - 初始化
220-
- `fc_pool_alloc()` - 分配内存块
221-
- `fc_pool_free()` - 释放内存块
222-
- `fc_pool_chain()` - 链接多个内存池
223-
224-
### Port I/O 层
225-
226-
类似 SEGGER RTT 的多缓冲区 I/O 抽象,支持标准 I/O 重定向。
227-
228-
**主要 API:**
229-
- `fc_port_printf()` - 格式化输出
230-
- `fc_port_write()` / `fc_port_read()` - 原始读写
231-
- 标准 I/O 重定向支持(printf/scanf)
232-
233-
### Logger 日志系统
234-
235-
基于内存池的轻量级日志系统,支持多级过滤和颜色输出。
236-
237-
**日志级别:**
238-
```c
239-
FC_LOG_E() // ERROR - 错误
240-
FC_LOG_W() // WARN - 警告
241-
FC_LOG_I() // INFO - 信息
242-
FC_LOG_D() // DEBUG - 调试
243-
FC_LOG_V() // VERBOSE - 详细
244-
```
245-
246-
### Transport 传输层
247-
248-
使用 ANSI 转义序列实现的多路复用传输层,可在单个物理通道上传输多个逻辑通道。
249-
250-
### Auto Init 自动初始化
251-
252-
4 级优先级的自动初始化框架:
253-
- **ENV** - 环境层(main 之前/构造函数)
254-
- **CLOCK** - 时钟配置
255-
- **DEVICE** - 设备初始化
256-
- **APP** - 应用初始化
257-
258-
## 🛠️ 编译器支持
259-
260-
- ✅ ARM Compiler 5/6 (Keil MDK)
261-
- ✅ IAR EWARM
262-
- ✅ GCC (ARM Embedded)
263-
- ✅ MSVC (Windows 测试)
264-
265-
## 📝 配置说明
266-
267-
所有配置项在 `fc_config.h` 中定义(基于 `fc_config_template.h` 创建),主要配置包括:
268-
269-
```c
270-
// 自动初始化
271-
#define USE_FC_AUTO_INIT 1
272-
273-
// 日志配置
274-
#define FC_LOG_ENABLE 1
275-
#define FC_LOG_LEVEL FC_LOG_ALL
276-
#define FC_LOG_COLOR_ENABLE 1
277-
278-
// 内存池配置
279-
#define FC_LOG_POOL_TOTAL_SIZE (4 * 1024)
280-
#define FC_LOG_ALLOC_BLOCK_SIZE 128
281-
282-
// Port 配置
283-
#define FC_PORT_NUM 8
284-
#define FC_PORT0_SIZE 1024
285-
```
286-
287-
## 🧪 测试示例
288-
289-
项目提供了多个测试示例,位于 `test/` 目录:
290-
291-
- `test_ring_fifo.cpp` - FIFO 环形队列测试
292-
- `test_stdio.cpp` - StdIO 测试
293-
- `test_transport.cpp` - Transport 传输层测试
294-
- `test_auto_init.cpp` - 自动初始化测试
295-
- `STM32F407VET_keil/` - STM32 完整工程示例
296-
- `VS2022/` - Windows 平台测试工程
297-
298-
## 🤝 贡献指南
299-
300-
欢迎提交 Issue 和 Pull Request!
301-
302-
1. Fork 本仓库
303-
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
304-
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
305-
4. 推送到分支 (`git push origin feature/AmazingFeature`)
306-
5. 提交 Pull Request
307-
308-
## 📄 许可证
309-
310-
本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件
311-
312-
## ⚠️ 注意事项
313-
314-
1. **线程安全**:大部分组件不提供内置锁机制,需由使用者保证线程安全
315-
2. **FIFO 限制**:仅支持单生产者/单消费者场景
316-
3. **配置优先**:使用前需根据实际需求创建 `fc_config.h`(基于 `fc_config_template.h`
317-
4. **内存对齐**:内存池要求内存按 `sizeof(size_t)` 对齐
318-
319-
## 🗺️ 路线图
320-
321-
- [x] 核心组件实现
322-
- [x] CMSIS-Pack 支持
323-
- [x] GitHub Actions CI/CD
324-
- [ ] 更多平台移植示例
325-
- [ ] 上位机工具(Transport 解析)
326-
- [ ] 完整的 API 文档
327-
- [ ] 性能基准测试
328-
329-
---
330-
331-
⭐ 如果这个项目对你有帮助,请给个 Star 支持一下!
1+
# 文档建设中...

0 commit comments

Comments
 (0)