zhomen/C-Embedded-System-Simulator
GitHub: zhomen/C-Embedded-System-Simulator
一个基于宿主机的 C++ 嵌入式中断驱动传感器系统模拟器,配合 Python 自动化测试框架,无需硬件即可练习和验证中断处理、环形缓冲区及事件驱动架构。
Stars: 0 | Forks: 0
# C++ 嵌入式系统模拟器 (C++ + Python 测试)
## 概述
本项目是一个使用现代 C++ 编写的**基于宿主机的嵌入式中断驱动传感器系统模拟**。它专为以下目的而设计:
- 练习嵌入式系统概念
- 演示 ISR(中断服务程序)的最佳实践
- 无需硬件即可测试中断驱动设计
本项目模拟了:
- 多个中断源
- ISR 行为(最小工作量)
- 使用环形缓冲区的延迟处理
- 事件驱动架构
- 用于 C++ 代码的基于 Python 的单元测试
## 演示的关键概念
### 中断处理
- ISR 仅执行**最少的工作**
- ISR 内部没有阻塞、内存分配或 I/O 操作
- 工作被延迟到主循环中处理
### 环形缓冲区(ISR 安全)
- 使用原子操作的无锁设计
- 单生产者(ISR)/ 单消费者(主循环)
- 溢出检测
### 多种中断类型
- 数据就绪
- 阈值超限
- 传感器错误
- 定时器节拍
### 可测试性
- 硬件通过 `InterruptController` 进行抽象
- 完全可在宿主机上测试
- Python 测试可编译并验证行为
## 项目结构
```
sensor-interrupt-sim/
├── include/ # Public headers
├── src/ # Implementation files
├── tests/ # Python tests
├── CMakeLists.txt
```
## 构建说明
### 依赖条件
- C++17 编译器 (g++, clang)
- CMake >= 3.16
- Python 3
- pytest
### 构建
```
mkdir build
cd build
cmake ..
cmake --build .
```
### 运行模拟器
```
./sensor_sim
```
## 运行测试
安装 pytest:
```
pip install pytest
```
运行测试:
```
pytest tests
```
Python 测试将会:
- 构建项目
- 编译小型 C++ 测试程序
- 执行并验证其行为
## 架构
### 数据流
```
SensorSimulator
↓
InterruptController
↓
ISR (SensorDriver::onXISR)
↓
Ring Buffer (InterruptRingBuffer)
↓
Main Loop / Consumer
```
## ISR 设计示例
```
void SensorDriver::onDataReadyISR(uint32_t value) {
pushEventFromISR(InterruptType::DataReady, value);
}
```
遵循的 ISR 规则:
- 无日志记录
- 无动态分配
- 常数时间执行
## 环形缓冲区行为
- 固定大小的循环缓冲区
- 溢出时丢弃事件
- 跟踪溢出计数
```
bool pushFromISR(const InterruptEvent& event);
bool pop(InterruptEvent& event);
```
## 可能的扩展
- 添加 RTOS 风格的任务处理
- 模拟中断优先级
- 添加 DMA 风格的批量传输
- 使用队列 + 互斥锁替换环形缓冲区(比较性能)
- 添加时序约束 / 延迟测量
标签:Bash脚本, C++, CMake, Python, 中断服务程序, 中断驱动, 事件驱动架构, 单元测试, 单生产者单消费者, 回归测试, 固件逻辑, 安全规则引擎, 嵌入式系统, 开发框架, 故障注入, 数据擦除, 数据管道, 无后门, 现代C++, 硬件抽象, 系统级验证, 跨平台开发, 软件工程, 逆向工具