一个面向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 ┘
- kernel 提供系统内核功能:任务、事件、消息、公告板、邮箱、管道、注册、内存分配……
- driver 使用 静态 初始化的功能代码模块,使用config.h文件进行配置;此目录下的代码大部分与硬件相关,如:传感器、按键扫描、屏幕…… (driver 与 lib 有时并没有清晰的界限,如driver:led_blink 就有可能抽象成 lib:sw_pwm)
- lib 使用 动态 初始化的功能代码模块,使用初始化函数进行配置;此目录下的模代码大部分与硬件无关,如:环形缓冲区、crc16、栈、软件定时器……
- sys_service 基于任务实现的系统服务,如:低功耗管理、软件定时器、打印输出……(只有对外接口,不发出对外消息)
- std_app 基于任务实现的常用标准应用,如独立按键扫描、按键多次点击、指示灯闪烁…… (此类模块和user app属于同一级别,只不过已经标准化;此类模块发出对外消息,也有对外接口,用于兼容不能支持消息功能的硬件平台)
- platform 基于 jxos 实现的,使用不同平台硬件的具体项目
- 在某些编译器环境下可能出现以某些限制(不支持函数指针,不支持中断处理函数中调用其他函数,不支持函数指针带参数,不支持结构体),因此 std_app 提供的消息可能无法使用,作为补充std_app 也会同时提供全局变量来传出信息和函数接口来传入信息
- 为提高代码的兼容性;尽量不要使用函数指针
- 为提高代码的可复用性,std_app 中的功能尽量在 driver 和 lib 中实现,std_app 中的代码仅作为提供系统tick和统一对外接口的功能
- 模块和 std_app 可以提供多个不同实现方法的文件,但保持对外接口的统一
- 对外提供两套接口方案 jxos_public.h 提供高级接口(消息 事件等),jxos_public_lite.h 提供低级接口(全局变量, 函数)
资料直通车:Linux内核源码技术学习路线+视频教程内核源码
学习直通车:Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈
Instructions
- 导入 jxos_public.h 即可调用系统所有的对外接口
- 每个项目通过 jxos_init_config.c 和 jxos_config.h 对系统进行配置,即每个项目有独立配置文件
- 在 jxos_init_config.c 实现需要硬件支持的系统模块硬件初始化,以及用户任务的初始化顺序
- 在 jxos_config.h 配置系统模块的参数和使能
- event 用于任务内部的信号同步,主要是将中断信号传递到任务
- 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 模块
原文作者:【一起学嵌入式】

相关文章:
一个面向MCU的小型前后台系统
JxOS简介 JxOS面向MCU的小型前后台系统,提供消息、事件等服务,以及软件定时器,低功耗管理,按键,led等常用功能模块。 gitee仓库地址为(复制到浏览器打开): https://gitee.com/jer…...
软件外包开发人员分类
在软件开发中,通常会分为前端开发和后端开发,下面和大家分享软件开发中的前端开发和后端开发分类和各自的职责,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1. 前端开发&…...
HTML 元素被定义为块级元素或内联元素
大多数 HTML 元素被定义为块级元素或内联元素。 10. 块级元素 块级元素在浏览器显示时,通常会以新行来开始(和结束)。 我们已经学习过的块级元素有: <h1>, <p>, <ul>, <table> 等。 值得注意的是: <p> 标签…...
单调递增的数字【贪心算法】
单调递增的数字 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时,我们称这个整数是单调递增的。 给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。 public class Solution {public int monotoneIncreasingDigits…...
gnuradio-hackrf_info.exe -FM频率使用
97910000...
JVM学习(三)--生产环境的线程问题诊断
1.如何定位哪个进程对cpu占用过高 使用top命令 2.如何定位到某个进程的具体某个线程 使用ps H -eo pid,tid,%cpu | grep 进程id (可以具体定位到某个进程的某个线程的cpu占用情况) 3.如何查看有问题线程的具体信息,定位到代码的行数 使用jstack 进程id 可以找…...
PHP数组处理$arr1转换为$arr2
请编写一段程序将$arr1转换为$arr2 $arr1 array( 0>array (fid>1,tid>1,name>Name1), 1>array (fid>2,tid>2,name>Name2), 2>array (fid>3,tid>5,name>Name3), 3>array (fid>4,tid>7,name>Name4), 4>array (fid>5,tid…...
ATF(TF-A)安全通告 TFV-10 (CVE-2022-47630)
安全之安全(security)博客目录导读 ATF(TF-A)安全通告汇总 目录 一、ATF(TF-A)安全通告 TFV-10 (CVE-2022-47630) 二、CVE-2022-47630 2.1 Bug 1:证书校验不足 2.2 Bug 2:auth_nvctr()中缺少边界检查...
详解 SpringMVC 中获取请求参数
文章目录 1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、[RequestParam ](/RequestParam )4、[RequestHeader ](/RequestHeader )5、[CookieValue ](/CookieValue )6、通过POJO获取请求参数7、解决获取请求参数的乱码问题总结 在Spring MVC中,获取请…...
Message: ‘chromedriver‘ executable may have wrong permissions.
今天运行项目遇到如下代码 driverwebdriver.Chrome(chrome_driver, chrome_optionsoptions)上述代码运行报错如下: Message: chromedriver executable may have wrong permissions. Please see https://sites.google.com/a/chromium.org/chromedriver/home出错的原…...
每日一题 1372二叉树中的最长交错路径
题目 给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下: 选择二叉树中 任意 节点和一个方向(左或者右)。如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。改变前进方…...
【力扣每日一题】2023.9.2 最多可以摧毁的敌人城堡数量
目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 这道题难在阅读理解,题目看得我匪夷所思,错了好多个测试用例才明白题目说的是什么。 我简单翻译一下就是寻找1和…...
kotlin实现java的单例模式
代码 package com.flannery.interviewdemo.singleinstance//https://blog.csdn.net/Jason_Lee155/article/details/128796742 Java实现 //public class SingletonDemo { // private static SingletonDemo instancenew SingletonDemo(); // private SingletonDemo() // …...
使用 KeyValueDiffers 检测Angular 对象的变化
使用 KeyValueDiffers 检测Angular 对象的变化 ngDoCheck钩子 ngDoCheck 是 Angular 生命周期钩子之一。它允许组件在 Angular 检测到变化时执行自定义的变化检测逻辑。 当任何组件或指令的输入属性发生变化、在组件内部发生了变更检测周期或者当主动触发变更检测策略&#…...
Macos 10.13.2安装eclipse
eclipse for php 安装2021-12最后版本4.22 2021-12 R | Eclipse Packages jdk17 x64 dmg安装包,要安装jdk这个才能运行 Java Downloads | Oracle...
Android逆向学习(一)vscode进行android逆向修改并重新打包
Android逆向学习(一)vscode进行android逆向修改并重新打包 写在前面 其实我不知道这个文章能不能写下去,其实我已经开了很多坑但是都没填上,现在专利也发出去了,就开始填坑了,本坑的主要内容是关于androi…...
【深入浅出设计模式--状态模式】
深入浅出设计模式--状态模式 一、背景二、问题三、解决方案四、 适用场景总结五、后记 一、背景 状态模式是一种行为设计模式,让你能在一个对象的内部状态变化时改变其行为,使其看上去就像改变了自身所属的类一样。其与有限状态机的概念紧密相关&#x…...
Debezium系列之:Debezium Server在生产环境大规模应用详细的技术方案
Debezium系列之:Debezium Server在生产环境大规模应用详细的技术方案 一、需求背景二、Debezium Server实现技术三、技术方案流程四、生成接入配置五、新增数据库接入和删除数据库接入效果六、监控zookeeper节点程序七、新增数据库接入部署debezium server程序八、删除数据库接…...
Echart笔记
Echart笔记 柱状图带背景色的柱状图将X与Y轴交换制作为进度条 柱状图 带背景色的柱状图 将X与Y轴交换制作为进度条 //将X与Y轴交换制作为进度条 option { xAxis: {type: value,min:0,max:100,show:false,//隐藏x轴},yAxis: {type: category,data:[进度条],show:false,//隐…...
docker 笔记1
目录 1.为什么有docker ? 2.Docker 的核心概念 3.容器与虚拟机比较 3.1传统的虚拟化技术 3.2容器技术 3.3Docker容器的有什么作用? 3.4应用案例 4. docker 安装下载 4.1CentOS Docker 安装 4.2 Docker的基本组成 ?(面试)…...
PyTorch-2.x-Universal-Dev-v1.0镜像详解:预装库、国内源、GPU验证全攻略
PyTorch-2.x-Universal-Dev-v1.0镜像详解:预装库、国内源、GPU验证全攻略 1. 镜像概述与核心优势 PyTorch-2.x-Universal-Dev-v1.0镜像是一个专为深度学习开发者打造的高效开发环境。它基于官方PyTorch底包构建,经过精心优化和配置,旨在解决…...
前端自动化部署终极指南:从CI/CD到容器化的完整流程
前端自动化部署终极指南:从CI/CD到容器化的完整流程 【免费下载链接】all-of-frontend 你想知道的前端内容都在这 项目地址: https://gitcode.com/gh_mirrors/al/all-of-frontend GitHub 加速计划(all-of-frontend)是一个全面的前端学…...
51单片机实战:基于XPT2046的多传感器AD转换与LCD显示
1. 项目背景与核心器件选型 第一次接触51单片机AD转换时,我被各种专业术语搞得一头雾水。直到用XPT2046芯片完成了电位器、光敏电阻、热敏电阻的三路信号采集,才真正理解模拟信号数字化的奥妙。这个成本不到5元的触摸屏控制芯片,其实是个隐藏…...
TypeScript类型安全进阶:Readonly和Required在状态管理中的妙用
TypeScript类型安全进阶:Readonly和Required在状态管理中的妙用 状态管理是现代前端开发中不可或缺的一环,而TypeScript的类型系统为我们提供了强大的工具来确保状态的安全性。在Redux、MobX等流行状态管理库中,Readonly和Required这两个工具…...
基于MMC的两端柔性直流输电系统设计仿真:包含电压平衡控制策略、最近电平调制策略、环流抑制及详...
基于MMC的两端柔性直流输电系统设计仿真 1、MMC-HVDC 电压平衡控制策略:为了实现桥臂子模块的电压动态平衡 在正常运行时,由于桥臂子模块投切存在不一致性,以及级联的子模块中的电容不断的在充电、放电或者闭锁状态切换 2、最近电平调制策略&…...
AI编程实战:从零到一搭建全栈项目
1. 引入 在现代 AI 工程中,Hugging Face 的 tokenizers 库已成为分词器的事实标准。不过 Hugging Face 的 tokenizers 是用 Rust 来实现的,官方只提供了 python 和 node 的绑定实现。要实现与 Hugging Face tokenizers 相同的行为,最好的办法…...
基于SpringBoot + Vue的莱元元电商数据分析系统(双端 + 数据可视化大屏)
文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 💛博主介绍&#…...
基于MPC的四旋翼高度动力学及X-Y平面位置控制设计的实践与仿真
基于MPC的四旋翼高度动力学以及x-y平面位置控制设计 简介:本项目侧重于MPC控制器设计,用于控制四旋翼的高度动力学以及x-y平面位置 就方向动力学而言,使用了定制的离散PID(DPID)控制器 该项目在MATLAB 2022b中进行了完全编码和仿真 此外&…...
[WP]vulhub-dc1 flag全收集,靶机通关writeup超级详细,附带知识点讲解
2026/3/28 前言/提示: 本次记录的背景是作者本人积累2年多的基础知识,但是从来没有打过这种集成环境的靶机,所以仅供个人参考,尽管真的很想分享一些自己的思路也许能帮助读者,但是本次记录也大概率会出现手法惊奇&am…...
类型擦除与部分异步编程: 消除差别,统一使用
1. std::function:可调用对象的“统一调用接口”std::function 是针对可调用对象的类型擦除工具,其底层实现核心是「抽象基类 模板子类」的多态模式,也是运行时类型擦除的典型应用:抽象基类:定义了与“函数签名”完全…...
