# JxOS **Repository Path**: jeremyceng/JxOS ## Basic Information - **Project Name**: JxOS - **Description**: 面向MCU的小型前后台系统。此项目的设计思想是:功能模块与硬件高度解耦,提高代码模块的可复用性;不使用复杂的数据结构和语法以提高不同硬件平台和编译器之间的兼容性,实现工程在不同MCU之间的快速移植;提供实用稳定常用的功能模块,实现项目的快速开发;定义标准应用开发框架,减轻应用开发的工作量和难度。 - **Primary Language**: C - **License**: MPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 290 - **Forks**: 101 - **Created**: 2018-09-20 - **Last Updated**: 2025-09-25 ## Categories & Tags **Categories**: hardware **Tags**: mcu, os, 前后台 ## README # JxOS ## 描述 JxOS 是一个轻量级的面向MCU的小型前后台系统,提供消息、事件等服务,以及软件定时器,低功耗管理,按键,led等常用功能模块。在此基础上实现了基于433的简单无线网络功能。此项目的设计思想是:功能模块与硬件高度解耦,提高代码模块的可复用性;不使用复杂的数据结构和语法以提高不同硬件平台和编译器之间的兼容性,实现工程在不同MCU之间的快速移植;提供实用稳定常用的功能模块,实现项目的快速开发;定义标准应用开发框架,减轻应用开发的工作量和难度。已使用此系统用于开发项目的硬件平台有:N76E003、STM8S103K、PC、KF8TS2716 ## 软件架构 ![输入图片说明](jxos/JXOS.jpg) ![输入图片说明](fun_module_demo/module_interface.jpg) ```shell JxOS ├───demo_code 参考代码,未整理代码 │ ├───jxos jxos │ ├───bsp 过时分类,将逐步归类到 driver 和 lib 中 │ ├───kernel 内核,提供系统内核功能:任务、事件、消息、公告板、邮箱、管道、注册、内存分配…… │ ├───driver 使用 静态 初始化的功能代码模块,使用config.h文件进行配置;此目录下的代码大部分与硬件相关,如:传感器、按键扫描、屏幕…… (driver 与 lib 有时并没有清晰的界限,如driver:led_blink 就有可能抽象成 lib:sw_pwm) │ ├───lib 使用 动态 初始化的功能代码模块,使用初始化函数进行配置;此目录下的模代码大部分与硬件无关,如:环形缓冲区、crc16、栈、软件定时器…… │ ├───sys_service 基于任务实现的系统服务,如:低功耗管理、软件定时器、打印输出……(只有对外接口,不发出对外消息) │ └───std_app 基于任务实现的常用标准应用,如独立按键扫描、按键多次点击、指示灯闪烁……(此类模块和user app属于同一级别,只不过已经标准化;此类模块发出对外消息,也有对外接口,用于兼容不能支持消息功能的硬件平台) │ ├───platform │ ├───N76E003 ┐ │ ├───N76E003 ├─── 基于 jxos 实现的,使用不同平台硬件的具体项目 │ └───STM8S103K3 ┘ │ ├───JSnet ┐ ├───.... ├─── 基于 jxos 实现的功能模块 └───SRTnet ┘ ``` JxOS 的架构分为以下几个主要部分: - **内核(Kernel)**:提供任务调度、事件管理、消息队列、内存管理等基础功能。 - **驱动(Driver)**:包括 LED、按键、定时器、PWM、串口、I2C、SPI 等常用外设驱动。 - **库(Lib)**:提供通用数据结构(如 FIFO、环形缓冲区、栈、列表等)、CRC 校验、字符串操作、时间处理、数值转换等实用函数。 - **HAL(硬件抽象层)**:为不同平台提供统一的硬件接口,便于移植和跨平台开发。 - **应用层(Application Layer)**:包含多个示例项目,如健康照明、温控设备、RF 模块通信等。 - **通信协议栈(Communication Stack)**:支持 Zigbee、JSNet、SRTNet 等协议,提供帧处理、数据同步、重传机制等功能。 - **调试与测试工具**:提供调试打印、软件定时器、低功耗管理等辅助模块。 ## 安装 1. **获取源码**: ```bash git clone https://gitee.com/jeremyceng/JxOS.git ``` 2. **开发环境搭建**: - 使用 Keil、IAR 或其他支持目标平台的 IDE。 - 根据目标平台选择对应的 `platform` 文件夹,导入项目文件(如 `.uvproj` 或 `.cbp`)。 - 配置 `jxos_config.h` 文件以启用或禁用特定模块。 3. **编译与烧录**: - 编译项目并生成可执行文件(如 `.hex` 或 `.bin`)。 - 使用编程器将固件烧录到目标设备中。 ## 使用说明 ### 1. **任务调度** JxOS 使用基于优先级的任务调度机制。开发者可以通过 `jxos_task.c` 和 `jxos_task.h` 创建和管理任务。 ```c void my_task(uint8_t task_id, void * parameter) { while (1) { // 任务逻辑 jxos_task_delay(100); // 延迟 100 ticks } } void my_task_init(void) { jxos_task_create(my_task, "MyTask", 1, NULL, 0); } ``` ### 2. **定时器** JxOS 提供软件定时器模块,支持周期性和一次性定时任务。 ```c void timer_callback(swtime_type * timer) { // 定时器回调逻辑 } void init_timer(void) { swtime_type my_timer; swtime_init(&my_timer, timer_callback, 1000); // 1000 ticks swtime_start(&my_timer); } ``` ### 3. **按键与 LED 控制** JxOS 提供按键扫描和 LED 控制模块,支持短按、长按、双击等事件。 ```c void button_press_handler(uint8_t button_num) { if (button_num == 0) { led_toggle(0); // 切换 LED 状态 } } void button_init(void) { std_app_button_task_hal_init_callback(); std_app_button_scan_task_button_press_event_callback = button_press_handler; } ``` ### 4. **通信协议** JxOS 支持多种通信协议,如 Zigbee、JSNet、SRTNet 等。开发者可以使用 `jsnet_dlk.h` 和 `srtnet_app_layer_service.h` 来实现设备间的无线通信。 ```c void onoff_command_handler(uint8_t service_seri_num) { // 处理开关命令 } void service_init(void) { srtnet_app_layer_service_register_onoff(onoff_command_handler); } ``` ### 5. **低功耗管理** JxOS 提供低功耗管理模块,支持睡眠模式和唤醒机制。 ```c void enter_sleep_mode(void) { sys_power_mgr_task_go_to_sleep_callback(); } void wake_up_handler(void) { sys_power_mgr_task_recover_to_wake_callback(); } ``` ## 贡献 欢迎贡献代码、文档或提出改进建议。请遵循以下步骤: 1. Fork 仓库。 2. 创建新分支(`git checkout -b feature/your-feature-name`)。 3. 提交更改(`git commit -am 'Add some feature'`)。 4. 推送分支(`git push origin feature/your-feature-name`)。 5. 提交 Pull Request。 ## Gitee 特性 - **代码托管**:项目托管在 Gitee 上,支持 Git 协议和 HTTPS 协议。 - **Issue 跟踪**:可在 Gitee 上提交 bug 报告或功能请求。 - **文档与示例**:项目包含详细的文档和多个示例项目,帮助开发者快速上手。 - **社区支持**:活跃的开发者社区,提供技术支持和经验分享。 ## 许可证 本项目采用 MIT 许可证。详情请参阅 `LICENSE` 文件。