一个面向MCU的小型前后台系统

JxOS简介

JxOS面向MCU的小型前后台系统,提供消息、事件等服务,以及软件定时器,低功耗管理,按键,led等常用功能模块。

gitee仓库地址为(复制到浏览器打开):

https://gitee.com/jeremyceng/JxOS/tree/master

在此基础上实现了基于433的简单无线网络功能。

此项目的设计思想是:功能模块与硬件高度解耦,提高代码模块的可复用性;不使用复杂的数据结构和语法以提高不同硬件平台和编译器之间的兼容性,实现工程在不同MCU之间的快速移植;提供实用稳定常用的功能模块,实现项目的快速开发;定义标准应用开发框架,减轻应用开发的工作量和难度。

已使用此系统用于开发项目的硬件平台有:N76E003、STM8S103K、PC、KF8TS2716

Software Architecture

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  ┘
  1. kernel 提供系统内核功能:任务、事件、消息、公告板、邮箱、管道、注册、内存分配……
  2. driver 使用 静态 初始化的功能代码模块,使用config.h文件进行配置;此目录下的代码大部分与硬件相关,如:传感器、按键扫描、屏幕…… (driver 与 lib 有时并没有清晰的界限,如driver:led_blink 就有可能抽象成 lib:sw_pwm)
  3. lib 使用 动态 初始化的功能代码模块,使用初始化函数进行配置;此目录下的模代码大部分与硬件无关,如:环形缓冲区、crc16、栈、软件定时器……
  4. sys_service 基于任务实现的系统服务,如:低功耗管理、软件定时器、打印输出……(只有对外接口,不发出对外消息)
  5. std_app 基于任务实现的常用标准应用,如独立按键扫描、按键多次点击、指示灯闪烁…… (此类模块和user app属于同一级别,只不过已经标准化;此类模块发出对外消息,也有对外接口,用于兼容不能支持消息功能的硬件平台)
  6. platform 基于 jxos 实现的,使用不同平台硬件的具体项目
  7. 在某些编译器环境下可能出现以某些限制(不支持函数指针,不支持中断处理函数中调用其他函数,不支持函数指针带参数,不支持结构体),因此 std_app 提供的消息可能无法使用,作为补充std_app 也会同时提供全局变量来传出信息和函数接口来传入信息
  8. 为提高代码的兼容性;尽量不要使用函数指针
  9. 为提高代码的可复用性,std_app 中的功能尽量在 driver 和 lib 中实现,std_app 中的代码仅作为提供系统tick和统一对外接口的功能
  10. 模块和 std_app 可以提供多个不同实现方法的文件,但保持对外接口的统一
  11. 对外提供两套接口方案 jxos_public.h 提供高级接口(消息 事件等),jxos_public_lite.h 提供低级接口(全局变量, 函数)

  资料直通车:Linux内核源码技术学习路线+视频教程内核源码

学习直通车:Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈

Instructions

  1. 导入 jxos_public.h 即可调用系统所有的对外接口
  2. 每个项目通过 jxos_init_config.c 和 jxos_config.h 对系统进行配置,即每个项目有独立配置文件
  3. 在 jxos_init_config.c 实现需要硬件支持的系统模块硬件初始化,以及用户任务的初始化顺序
  4. 在 jxos_config.h 配置系统模块的参数和使能
  5. event 用于任务内部的信号同步,主要是将中断信号传递到任务
  6. msg 用于任务之间的消息传递,使用 jxos_msg_get_handle 可通过消息名(字符串)获取消息句柄
如何建立新项目:
 获取 Jxos 所有文件和目录结构
 在 \platform 目录下建立当前工程的目录(platform\芯片型号\工程命名\)
 在 \工程名称 目录下新建工程文件(keil、iar 等IDE的newproject)
 在 \工程名称 目录下新建 \config 目录,增加 jxos_config.h type.h 系统配置文件
 在 \config 目录下增加工程用到的功能模块的配置文件 (如 button_config.h sim_timer_config.h ...)
 在 \工程名称 目录下新建 \framework 目录
 在 \framework 目录下增加 main.c ,实现main函数,在main函数中调用jxos_run() ( void main(void) {jxos_run();} )
 在 \framework 目录下增加 isr.c ,实现工程需要的中断处理函数
 在 \framework 目录下增加 callback_handler.c ,实现工程用到的功能模块的callback函数
 建议在 \工程名称 目录下新建 \app 目录,实现用户功能任务
 建议在 \芯片型号 目录下增加芯片需要用到的库文件目录
 在IDE的新工程中导入 jxos.c
 在IDE的新工程中导入需要的Jxos模块的文件(kernel、sys_service ...)
 在IDE的新工程中导入 main.c, isr.c, callback_handler.c
 在IDE的新工程中导入用户任务文件 (\工程名称\app\)
 在IDE的新工程中增加include目录,包括:\joxs,\platform\芯片型号\工程命名\config
 在IDE的新工程中增加其他的include目录,如芯片库文件的头文件
 按照框架实现用户任务

如何配置与使用 kernel
如何配置与使用 sys_service
如何配置与使用 std_app
如何使用标准框架的 driver 模块
如何使用标准框架的 lib 模块

原文作者:【一起学嵌入式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/101323.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux安装firefox

1.下载对应包 https://www.mozilla.org/en-US/firefox/all/#product-desktop-release 2. 挂载桌面链接(如果/usr/bin/firefox下有的话,先删除) ln -s /opt/firefox/firefox /usr/bin/firefox 3.执行以下命令,即可启动Firefox客户端: firefox

WSL中为Ubuntu和Debian设置固定IP的终极指南

文章目录 **WSL中为Ubuntu和Debian设置固定IP的终极指南****引言/背景****1. 传统方法****2. 新方法:添加指定IP而不是更改IP****结论**WSL中为Ubuntu和Debian设置固定IP的终极指南 引言/背景 随着WSL(Windows Subsystem for Linux)的普及,越来越多的开发者开始在Windows…

WPF Material Design 初次使用

文章目录 前言相关资源快速开始快速开始说明地址 吐槽一下 前言 MD全称MaterialDesignInXamlToolkit,MaterialDesign和Bootstrap一样,都是一个UI风格库。相当于衣服中的休闲服,汉服,牛仔裤一样,就是风格不一样的Ui框架…

VS + QT 封装带UI界面的DLL

一、创建编译DLL的项目 1.新建Qt Class Liabrary 2.新建项目,选择Qt Widgets Class 3.新建C类,可以在此类里面写算法函数用于调用。 4.下面是添加完Qt窗体类和C类之后的项目截图 5.修改头文件并编译 将uidemo_global.h中的ifdef内容复制到dialog.h上…

leetcode 1365. 有多少小于当前数字的数字

2023.9.2 本题直观的解法就是双层for循环暴力求解&#xff1a; 暴力解&#xff1a; class Solution { public:vector<int> smallerNumbersThanCurrent(vector<int>& nums) {vector<int> ans;for(int i0; i<nums.size(); i){int temp 0;//比当前元素…

ESP32C3 LuatOS RC522②写入字符串

编写了字符串转16进制表函数 -- 将字符串转换为十六进制表 local function stringToHexTable(str)local hexTable {}local maxLength 16 -- 最大长度为16个元素-- 将字符串转换为十六进制for i 1, #str doif i > maxLength thenbreakendlocal hex string.format("…

Node基础and包管理工具

Node基础 fs 模块 fs 全称为 file system&#xff0c;称之为 文件系统&#xff0c;是 Node.js 中的 内置模块&#xff0c;可以对计算机中的磁盘进行操作。 本章节会介绍如下几个操作&#xff1a; 1. 文件写入 2. 文件读取 3. 文件移动与重命名 4. 文件删除 5. 文件夹操作 6. …

每日一题(链表中倒数第k个节点)

每日一题&#xff08;链表中倒数第k个节点&#xff09; 链表中倒数第k个结点_牛客网 (nowcoder.com) 思路: 如下图所示&#xff1a;此题仍然定义两个指针&#xff0c;fast指针和slow指针&#xff0c;假设链表的长度是5&#xff0c;k是3&#xff0c;那么倒数第3个节点就是值为…

项目总结知识点记录-文件上传下载(三)

&#xff08;1&#xff09;文件上传 代码&#xff1a; RequestMapping(value "doUpload", method RequestMethod.POST)public String doUpload(ModelAttribute BookHelper bookHelper, Model model, HttpSession session) throws IllegalStateException, IOExcepti…

Git使用

本地操作 1. 初始化git仓库 git init 把当前目录变成git可以管理的仓库 git init2.登录-身份认证 区别登录和注册 git config --global user.name “xxx” git config --global user.email “xxxqq.com”/3.下载别人的git git clone https://gitee.com/meini/user-menage…

Gorm简单了解

GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly. 04_GORM查询操作_哔哩哔哩_bilibili 前置&#xff1a; db调用操作语句中间加debug&#xff08;&#xff09;可以显示对应的sql语句 1.Gorm模型定义&#xff08;理解重点&#xff…

色温曲线坐标轴的选取:G/R、G/B还是R/G、B/G ?

海思色温曲线坐标 Mstar色温曲线坐标 高通色温曲线坐标 联咏色温曲线坐标 查看各家白平衡调试界面&#xff0c;比如海思、Mstart、高通等调试资料&#xff0c;白平衡模块都是以R/G B/G作为坐标系的两个坐标轴&#xff0c;也有方案是以G/R G/B作为坐标系的两个坐标轴。 以G/R G…

不同写法的性能差异

“ 达到相同目的,可以有多种写法,每种写法有性能、可读性方面的区别,本文旨在探讨不同写法之间的性能差异 len(str) vs str "" 本部分参考自: [问个 Go 问题&#xff0c;字符串 len 0 和 字符串 "" &#xff0c;有啥区别&#xff1f;](https://segmentf…

002图的基本概念与表示方法

文章目录 一. 图的组成二. 本体图2.1 什么是本体图2.2 怎么设计本体图 三. 图的种类3.1 按连接是否有向分3.2 按本体图分3.3 按连接是否带权重分 四. 节点连接数&#xff08;节点的度&#xff09;4.1 无向图节点的度4.2 有向图节点的度 五. 图的表示方法5.1 邻接矩阵5.2 连接列…

Swift使用PythonKit调用Python

打开Xcode项目。然后选择“File→Add Packages”&#xff0c;然后输入软件包依赖链接&#xff1a; ​https://github.com/pvieito/PythonKit.git https://github.com/kewlbear/Python-iOS.git Python-iOS包允许在iOS应用程序中使用python模块。 用法&#xff1a; import Pyth…

在Mac 上安装flutter 遇到的问题

准备工作 1、升级Macos系统为最新系统 2、安装最新的Xcode 3、电脑上面需要安装brew https://brew.sh/ 4、安装chrome浏览器(开发web用) 下载Flutter、配置Flutter环境变量、配置Flutter镜像 下载Flutter SDK https://docs.flutter.dev/release/archive?tabmacos 根据自己…

Spring Cloud--从零开始搭建微服务基础环境【二】

&#x1f600;前言 本篇博文是关于Spring Cloud–从零开始搭建微服务基础环境【二】&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;…

vue中使用window.open打开assets文件夹下的pdf文件

需求&#xff1a;系统有个操作手册&#xff0c;点击会在浏览器新开个窗口并打开pdf文件。这个pdf文件存储在本地assets文件夹中。 文件结构&#xff1a; 注&#xff1a;直接使用window.open(文件路径)不能打开&#xff0c;需要在vue.config.js中配置所需文件 引入图中红框中的…

YOLOV8模型使用-检测-物体追踪

这个最新的物体检测模型&#xff0c;很厉害的样子&#xff0c;还有物体追踪的功能。 有官方的Python代码&#xff0c;直接上手试试就好&#xff0c;至于理论&#xff0c;有想研究在看论文了╮(╯_╰)╭ 简单介绍 YOLOv8 中可用的模型 YOLOv8 模型的每个类别中有五个模型用于检…

从零开始,探索C语言中的字符串

字符串 1. 前言2. 预备知识2.1 字符2.2 字符数组 3. 什么是字符串4. \04.1 \0是什么4.2 \0的作用4.2.1 打印字符串4.2.2 求字符串长度 1. 前言 大家好&#xff0c;我是努力学习游泳的鱼。你已经学会了如何使用变量和常量&#xff0c;也知道了字符的概念。但是你可能还不了解由…