Skip to content

Commit 4eb1c0b

Browse files
committed
Update basic_coding/core
1 parent a09a922 commit 4eb1c0b

File tree

25 files changed

+1601
-5
lines changed

25 files changed

+1601
-5
lines changed

docs/basic_coding/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ sidebar_position: 7
66

77
# 基础编程(libxr)
88

9-
本页面简要介绍 LibXR 的CMake配置与基础API的使用方法,包括常用工具,外设,操作系统API以及各种控制算法。
9+
本章简要介绍 LibXR 的CMake配置与基础API的使用方法,包括常用工具,外设,操作系统API以及各种控制算法。

docs/basic_coding/core/README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
---
2+
id: core-coding
3+
title: 核心组件
4+
sidebar_position: 3
5+
---
6+
7+
# 核心组件
8+
9+
本章节介绍 LibXR 框架的核心模块,提供跨平台通用的数据类型、错误处理、操作封装、时间工具和终端格式支持等功能,为整个系统提供基础支撑。
10+
11+
## 模块概览
12+
13+
- [`libxr_def`](./core-def.md):常用宏定义、错误码与基础常量
14+
- [`libxr_assert`](./core-assert.md):断言机制与致命错误回调
15+
- [`libxr_cb`](./core-cb.md):类型安全的回调机制
16+
- [`libxr_type`](./core-type.md):原始数据封装与类型识别
17+
- [`libxr_string`](./core-string.md):固定长度安全字符串
18+
- [`libxr_color`](./core-color.md):终端输出格式与 ANSI 控制
19+
- [`libxr_time`](./core-time.md):微秒/毫秒级时间戳与时间差
20+
- [`libxr_rw`](./core-rw.md):通用读写接口与操作封装
21+
22+
各模块将在后续页面中展开详细介绍。

docs/basic_coding/core/core-assert.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
---
2+
id: core-assert
3+
title: 断言与错误处理
4+
sidebar_position: 2
5+
---
6+
7+
# 断言与错误处理
8+
9+
本模块用于运行时错误检查、致命错误处理及调试期间的尺寸校验。其核心是 `LibXR::Assert` 类及 `ASSERT` / `ASSERT_ISR` 宏,常配合 `libxr_def` 使用。
10+
11+
## 致命错误处理接口
12+
13+
```cpp
14+
void libxr_fatal_error(const char *file, uint32_t line, bool in_isr);
15+
```
16+
17+
该函数用于终止程序执行,可在正常或中断上下文中调用。发生断言失败时将自动调用,并可通过 `Assert` 类注册回调处理。
18+
19+
## `LibXR::Assert` 类
20+
21+
用于注册致命错误回调,并在调试模式下进行尺寸检查。
22+
23+
### 注册回调
24+
25+
```cpp
26+
LibXR::Assert::RegisterFatalErrorCB(cb);
27+
```
28+
29+
支持传入任意 `Callback<const char*, uint32_t>` 类型的函数或对象,用于处理致命错误事件。
30+
31+
### 尺寸限制检查
32+
33+
在调试模式(定义 `LIBXR_DEBUG_BUILD`)下启用:
34+
35+
```cpp
36+
template <SizeLimitMode mode>
37+
static void SizeLimitCheck(size_t limit, size_t size);
38+
```
39+
40+
支持三种模式:
41+
42+
- `EQUAL`: 大小必须等于限制值
43+
- `MORE`: 大小必须大于等于限制值
44+
- `LESS`: 大小必须小于等于限制值
45+
46+
发布模式下此函数为空操作。
47+
48+
## 宏定义:断言检查
49+
50+
- `ASSERT(expr)`: 普通上下文断言,失败时调用 `libxr_fatal_error(...)`
51+
- `ASSERT_ISR(expr)`: 中断上下文断言
52+
53+
这些宏由 `LIBXR_DEBUG_BUILD` 控制是否启用,建议用于调试、开发阶段的防御性编程。
54+
55+
## 用例示例
56+
57+
```cpp
58+
LibXR::Assert::RegisterFatalErrorCB(
59+
LibXR::Callback<const char*, uint32_t>::Create([](bool in_isr, const char* file, uint32_t line) {
60+
printf("Fatal error at %s:%u (ISR=%d)\n", file, line, in_isr);
61+
}, nullptr));
62+
63+
ASSERT(buffer != nullptr);
64+
ASSERT_ISR(interrupt_flag == true);
65+
```
66+
67+
---
68+
69+
本模块为 LibXR 所有调试和安全机制的核心基础,建议在系统开发初期即集成并启用断言与校验逻辑。

docs/basic_coding/core/core-cb.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
---
2+
id: core-callback
3+
title: 通用回调
4+
sidebar_position: 3
5+
---
6+
7+
# 通用回调
8+
9+
本模块提供轻量级、可嵌入中断的通用回调系统,包括 `Callback``CallbackBlock` 两个模板类,广泛用于异步通知、事件处理、错误回调等场景。
10+
11+
## CallbackBlock
12+
13+
```cpp
14+
template <typename ArgType, typename... Args>
15+
class CallbackBlock;
16+
```
17+
18+
用于封装一个具体的回调函数及其第一个绑定参数,支持中断上下文安全调用:
19+
20+
- `FunctionType`: 回调函数签名为 `void(bool in_isr, ArgType arg, Args... args)`
21+
- `Call(bool in_isr, Args&&...)`: 执行回调,传递额外参数。
22+
23+
构造时即完成函数与绑定参数的绑定。支持移动构造与移动赋值,禁用拷贝。
24+
25+
## Callback
26+
27+
```cpp
28+
template <typename... Args>
29+
class Callback;
30+
```
31+
32+
`CallbackBlock` 的进一步封装,提供统一接口、类型擦除和创建工厂方法:
33+
34+
### 创建回调
35+
36+
```cpp
37+
LibXR::Callback<Args...> cb = LibXR::Callback<Args...>::Create(fun, bound_arg);
38+
```
39+
40+
- `fun`: 回调函数,格式为 `void(bool, BoundArgType, Args...)`
41+
- `bound_arg`: 回调函数的第一个绑定参数
42+
43+
### 执行回调
44+
45+
```cpp
46+
cb.Run(in_isr, arg1, arg2, ...);
47+
```
48+
49+
可传递任意数量的附加参数,`in_isr` 指示是否在中断上下文中调用。
50+
51+
### 其他接口
52+
53+
- `Empty()`: 判断回调是否为空
54+
- 支持默认构造、拷贝构造、移动构造与赋值
55+
56+
## 使用示例
57+
58+
```cpp
59+
void OnEvent(bool in_isr, int context, const char* msg) {
60+
printf("ISR=%d context=%d msg=%s\n", in_isr, context, msg);
61+
}
62+
63+
auto cb = LibXR::Callback<const char*>::Create(OnEvent, 42);
64+
cb.Run(false, "Hello");
65+
```
66+
67+
输出:
68+
69+
```bash
70+
ISR=0 context=42 msg=Hello
71+
```
72+
73+
## 设计特点
74+
75+
- **无动态内存管理需求**:除非用户自定义 CallbackBlock 派生类
76+
- **支持 ISR 上下文**:可在中断中安全调用
77+
- **类型安全封装**:利用模板与类型推导实现参数绑定
78+
- **适用于嵌入式场景**:非常轻量,占用资源小
79+
80+
---
81+
82+
该模块是 LibXR 异步机制与回调接口的基础组件,适用于 IO、定时器、事件发布等模块的回调传递。

docs/basic_coding/core/core-color.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
---
2+
id: core-color
3+
title: 终端颜色与格式
4+
sidebar_position: 6
5+
---
6+
7+
# 终端颜色与格式
8+
9+
本模块定义了终端打印时常用的格式控制枚举和 ANSI 转义序列,支持文本加粗、颜色设置、背景色等,适用于串口调试终端、日志系统、彩色输出等场景。
10+
11+
## 文本格式 Format
12+
13+
```cpp
14+
enum class Format : uint8_t {
15+
NONE = 0, RESET, BOLD, DARK, UNDERLINE, BLINK, REVERSE, CONCEALED, CLEAR_LINE, COUNT
16+
};
17+
```
18+
19+
- `NONE`: 无格式
20+
- `RESET`: 重置所有格式
21+
- `BOLD`: 加粗
22+
- `DARK`: 暗色字体
23+
- `UNDERLINE`: 下划线
24+
- `BLINK`: 闪烁
25+
- `REVERSE`: 前景/背景反转
26+
- `CONCEALED`: 隐藏
27+
- `CLEAR_LINE`: 清除整行
28+
29+
对应 ANSI 转义字符串:`LIBXR_FORMAT_STR[]`
30+
31+
## 字体颜色 Font
32+
33+
```cpp
34+
enum class Font : uint8_t {
35+
NONE = 0, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, COUNT
36+
};
37+
```
38+
39+
对应 ANSI 字符串:`LIBXR_FONT_STR[]`
40+
41+
## 背景颜色 Background
42+
43+
```cpp
44+
enum class Background : uint8_t {
45+
NONE = 0, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, COUNT
46+
};
47+
```
48+
49+
对应 ANSI 字符串:`LIBXR_BACKGROUND_STR[]`
50+
51+
## 粗体样式 Bold
52+
53+
```cpp
54+
enum class Bold : uint8_t {
55+
NONE = 0, YELLOW, RED, ON_RED, COUNT
56+
};
57+
```
58+
59+
简化常用彩色粗体样式输出,例如:
60+
61+
- `YELLOW`: 黄色加粗
62+
- `RED`: 红色加粗
63+
- `ON_RED`: 红底白字加粗
64+
65+
对应 ANSI 字符串:`LIBXR_BOLD_STR[]`
66+
67+
## 使用示例
68+
69+
```cpp
70+
std::cout << LIBXR_FORMAT_STR[(int)Format::BOLD]
71+
<< LIBXR_FONT_STR[(int)Font::GREEN]
72+
<< "This is bold green text!"
73+
<< LIBXR_FORMAT_STR[(int)Format::RESET];
74+
```
75+
76+
效果为绿色加粗文本。
77+
78+
---
79+
80+
本模块可配合终端类、调试输出类、日志系统使用,用于构建清晰、可读性强的彩色输出。

docs/basic_coding/core/core-def.md

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
---
2+
id: core-def
3+
title: 公共定义
4+
sidebar_position: 1
5+
---
6+
7+
# 公共定义
8+
9+
本模块提供 LibXR 中最基础的宏、常量、错误码及通用模板函数,广泛用于其他模块的实现。它避免平台差异、简化编码,并为调试与运行时检查提供基础设施。
10+
11+
## 数学与物理常量
12+
13+
- `M_PI`, `M_2PI`: 圆周率及其两倍,常用于角度计算。
14+
- `M_1G`: 标准重力加速度常量,值为 `9.80665 m/s²`
15+
16+
## 常用宏定义
17+
18+
- `DEF2STR(x)`: 将宏值转为字符串。
19+
- `UNUSED(x)`: 用于消除未使用变量的编译器警告。
20+
- `OFFSET_OF(type, member)`: 获取结构体成员的偏移量。
21+
- `MEMBER_SIZE_OF(type, member)`: 获取结构体成员的字节大小。
22+
- `CONTAINER_OF(ptr, type, member)`: 从成员指针获取结构体指针,常用于回溯对象。
23+
24+
## 缓存行定义
25+
26+
- `LIBXR_CACHE_LINE_SIZE`: 根据平台指针位数定义的缓存行大小,64 位平台为 64 字节,32 位平台为 32 字节。
27+
28+
## 错误码定义(`ErrorCode`
29+
30+
枚举类型 `ErrorCode` 定义了统一的错误码系统,用于表示各类操作结果:
31+
32+
| 名称 || 含义 |
33+
|--------------|------|--------------------|
34+
| `OK` | 0 | 操作成功 |
35+
| `FAILED` | -1 | 操作失败 |
36+
| `INIT_ERR` | -2 | 初始化错误 |
37+
| `ARG_ERR` | -3 | 参数错误 |
38+
| `STATE_ERR` | -4 | 状态错误 |
39+
| `SIZE_ERR` | -5 | 尺寸错误 |
40+
| `CHECK_ERR` | -6 | 校验失败 |
41+
| `NOT_SUPPORT`| -7 | 功能不支持 |
42+
| `NOT_FOUND` | -8 | 未找到对象 |
43+
| `NO_REPONSE` | -9 | 无响应 |
44+
| `NO_MEM` | -10 | 内存不足 |
45+
| `NO_BUFF` | -11 | 缓冲区不足 |
46+
| `TIMEOUT` | -12 | 操作超时 |
47+
| `EMPTY` | -13 | 数据为空 |
48+
| `FULL` | -14 | 数据已满 |
49+
| `BUSY` | -15 | 资源忙碌中 |
50+
| `PTR_NULL` | -16 | 空指针错误 |
51+
| `OUT_OF_RANGE`| -17 | 超出有效范围 |
52+
53+
## 尺寸限制模式(`SizeLimitMode`
54+
55+
用于运行时检查尺寸是否符合要求:
56+
57+
- `EQUAL`: 必须等于参考值
58+
- `LESS`: 小于或等于参考值
59+
- `MORE`: 大于或等于参考值
60+
- `NONE`: 不限制尺寸
61+
62+
## 断言宏
63+
64+
提供统一的运行时断言机制:
65+
66+
- `ASSERT(x)`: 在调试模式下检查表达式是否为真,否则触发致命错误
67+
- `ASSERT_ISR(x)`: 用于中断上下文的断言检查
68+
69+
`LIBXR_DEBUG_BUILD` 编译宏启用时生效,触发时会调用:
70+
71+
```cpp
72+
void libxr_fatal_error(const char *file, uint32_t line, bool in_isr);
73+
```
74+
75+
可通过注册回调处理断言失败行为(详见 `libxr_assert.hpp`)。
76+
77+
## 通用模板函数
78+
79+
```cpp
80+
template <typename T1, typename T2>
81+
constexpr auto LibXR::max(T1 a, T2 b) -> common_type<T1, T2>::type;
82+
83+
template <typename T1, typename T2>
84+
constexpr auto LibXR::min(T1 a, T2 b) -> common_type<T1, T2>::type;
85+
```
86+
87+
用于计算任意类型的最大/最小值,支持整数、浮点等常见数值类型。
88+
89+
---
90+
91+
该文件为 LibXR 的所有模块提供基础能力,强烈建议在开发过程中充分利用本模块的工具和约定。

0 commit comments

Comments
 (0)