02-单片机商业项目编程,从零搭建低功耗系统设计

news/2024/5/20 12:05:16

一、本文内容

    上一节《01-单片机商业项目编程,从零搭建低功耗系统设计-CSDN博客》已经对事件驱动原理有个基本了解,本节主要就是如何将事件写的更规范,而不是用t_flag这样的标记,写多了可读性也不强;本节结尾总结将提出时间片伪多任务系统概念。

二、事件编程代码优化

    代码编写过程中,对于一个特定功能代码,都有初始化、执行两个过程,在上节代码中对于事件t_flag是一个100ms的定时,对于执行就是当t_flag=1时,执行对应任务,我们实际执行过程也会进一步封装,留给最上层的接口往往叫回调函数,所以一个完整的框架包含:创建、执行、回调三个过程。

//事件执行
void evt_handle(void)
{if(g_event){evt_callback(g_event);	//回调}set_wakeup_condition();mcu_sleep_and_wait_wakeup();
}int main(void)
{evt_create(EVT_INDEX_100MS,100);	//创建100ms事件evt_create(EVT_INDEX_150MS,150);	//创建150ms事件while (1){evt_handle();	//执行}
}

    对于事件标记实际只需要1bit即可描述,因此事件我们往往直接用uint8_t表示8个事件,或者uint16_t表示16个事件等等,根据自身需求来设定,按上述代码中的EVT_INDEX_100MS、EVT_INDEX_150MS则使用了2byte,对于事件回调则是处理完成则清零即可。

uint16_t g_event = 0x0000;				//全局事件标记#define EVT_INDEX_100MS	0x0001	//100ms事件索引,对应bit0位
#define EVT_INDEX_150MS	0x0002	//100ms事件索引,对应bit1位//事件回调
void evt_callback(uint16_t event)
{if(event&EVT_INDEX_100MS){//执行100ms中断对应任务//...event ^= EVT_INDEX_100MS;//清零事件标记}if(event&EVT_INDEX_150MS){//执行150ms中断对应任务//...event ^= EVT_INDEX_150MS;//清零事件标记}
}

三、总结

    创建、执行、回调三部曲这是做系统架构很常见的做法,在代码设计初期,把框架设计好了,后续再针对每个函数去做进一步的参数优化,比如定时事件时持续跑,还是只执行一次等等,还有是不是有附加参数传入等等;当我们搭建了一个基于时间系统的事件,实际我们就做了一个基于时间片的伪操作系统。


http://www.mrgr.cn/p/87574072

相关文章

vmware虚拟机内删除文件后宿主机空间不释放

问题描述 linux下,vmware内虚拟机删除文件,宿主机空间不释放,D盘快满了 解决方法 通过vmware-toolbox进行空间回收 安装 在虚拟机内操作 yum install -y open-vm-tools 清理 在虚拟机内操作 #查看磁盘的挂载点 sudo /usr/bin/vmware…

Java | Leetcode Java题解之第77题组合

题目&#xff1a; 题解&#xff1a; class Solution {List<Integer> temp new ArrayList<Integer>();List<List<Integer>> ans new ArrayList<List<Integer>>();public List<List<Integer>> combine(int n, int k) {List&l…

分享一个php常驻内存多进程任务的扩展

前言 最近在摸鱼的时候发现一个PHP常驻内存多进程任务扩展包&#xff1a;EasyTask: PHP常驻内存多进程任务管理器&#xff0c;支持定时任务(PHP resident memory multi-process task manager, supports timing tasks) (gitee.com)&#xff0c;支持php使用多线程处理任务。之前…

【使用ChatGPT的API之前】OpenAI API提供的可用模型

文章目录 一. ChatGPT基本概念二. OpenAI API提供的可用模型1. InstructGPT2. ChatGPT3. GPT-4 三. 在OpenAI Playground中使用GPT模型-ing 在使用GPT-4和ChatGPT的API集成到Python应用程序之前&#xff0c;我们先了解ChatGPT的基本概念&#xff0c;与OpenAI API提供的可用模型…

dotnet 9 WPF 支持 Style 的 Setter 填充内容时可忽略 Value 标签

本文记录 WPF 在 dotnet 9 的一项 XAML 编写语法改进点,此改进点用于解决编写 Style 的 Setter 进行给 Value 赋值时,不能将 Value 当成默认内容,需要多写 Value 标签的问题。通过此改进点可减少两行 XAML 代码在原先的 WPF 版本里面,对 Style 的 Setter 填充复杂的对象内容…

Java 中的 HTTP 客户端库OkHttp、Apache HttpClient和HttpUrlConnection

大家好&#xff0c;我是G探险者。 项目开发里面经常会有这么一种场景&#xff1a;与服务器进行 HTTP 通信。一般存在于服务间远程调用的场景 Java 生态系统提供了多种 HTTP 客户端库&#xff0c;每种都有其自己的特点、优势和适用场景。 本文将介绍几种主要的 Java HTTP 客户…

Cheetah3D for Mac - 轻松打造专业级3D作品

对于追求专业级3D作品的设计师来说&#xff0c;Cheetah3D for Mac无疑是一款不可多得的工具。 这款软件拥有强大的建模、渲染和动画功能&#xff0c;能够满足您在3D设计方面的各种需求。通过简单的操作&#xff0c;您可以轻松构建出复杂的3D模型&#xff0c;并为其添加逼真的材…

树莓派4b红外检测

1.红外检测连接图 2.红外检测工作原理 红外传感器的工作原理类似于物体检测传感器。该传感器包括一个红外LED和一个红外光电二极管&#xff0c;因此通过将这两者结合起来&#xff0c;可以形成一个光耦合器。 红外LED是一种发射红外辐射的发射器。该LED看起来与标准LED相似&a…

Apache DolphinScheduler 4月简报:社区发展与技术革新速递

各位热爱 DolphinScheduler 的小伙伴们&#xff0c;4 月份的 DolphinScheduler 社区月报更新啦&#xff01;这里将记录 DolphinScheduler 社区每月的重要更新&#xff0c;欢迎关注&#xff01; 月度 Merge 之星 感谢以下小伙伴 4 月为 Apache DolphinScheduler 所做的精彩贡献…

Jmeter用jdbc实现对数据库的操作

我们在用Jmeter进行数据库的操作时需要用到配置组件“JDBC Connection Configuration”&#xff0c;通过配置相应的驱动能够让我们通过Jmeter实现对数据库的增删改查&#xff0c;这里我用的mysql数据库一起来看下是怎么实现的吧。 1.驱动包安装 在安装驱动之前我们要先查看当前…

5月记录

76.CF1967 Codeforces Round 942 (Div. 1) CF1967A CF1967B1 \[b\times \gcd(a,b)|a+b \to qi^2|(p+q)i \to qi|(p+q)\to q|p \to b|a \]反过来也能推到。 CF1967B2 \[a+b|b\times \gcd(a,b) \to (p+q)i|qi^2\to (p+q)|qi \to (p+q)|i \]枚举 \(p,q\),因为 \(p<i,pi< n\…

ssm111基于MVC的舞蹈网站的设计与实现+vue

基于MVC的舞蹈网站的设计与实现vue 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;舞蹈网站当然也不能排除在外。舞蹈网站是以实际运用为开发背景&#xff0c;运用软件…

标准引领 | 竹云参编《面向云计算的零信任体系》行业标准正式发布!

近日&#xff0c;中华人民共和国工业和信息化部公告2024年第4号文件正式发布行业标准&#xff1a;YD/T 4598.1-2024《面向云计算的零信任体系 第1部分&#xff1a;总体架构》&#xff08;后简称“总体架构”&#xff09;&#xff0c;并于2024年7月1日起正式实施。 该标准汇集大…

【Golang】VSCode进行GO的调试

原来的launch.json {"version": "0.2.0","configurations": [{"name": "Golang","type": "go","request": "launch","program": "${workspaceFolder}","…

SQL查询语句(四)模糊查询

前文介绍的查询语句&#xff0c;无论是利用常规的数学运算符&#xff0c;还是IN&#xff0c;BETWEEN和EXISTS等范围查询关键字&#xff0c;本质上都属于精确查询的范围&#xff0c;也就是说&#xff0c;我们在条件中写明了完全限定死的条件。而有些场景&#xff0c;我们的条件并…

Pikachu 靶场 CSRF 通关解析

前言 Pikachu靶场是一种常见的网络安全训练平台&#xff0c;用于模拟真实世界中的网络攻击和防御场景。它提供了一系列的实验室环境&#xff0c;供安全专业人士、学生和爱好者练习和测试他们的技能。 Pikachu靶场的目的是帮助用户了解和掌握网络攻击的原理和技术&#xff0c;…

[转帖]ldap配置系列三:grafana集成ldap

https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_liunx_51_ldap_for_grafana.htmlgrafana的简介grafana是一个类似kibana的东西,是对来自各种数据源的数据进行实时展示的平台,拥有这牛逼的外观。给一个官方的demo体验地址: https://play.grafana.org/d/000000012/grafan…

识货小程序逆向

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872&#xff0c;x30184483x…

UE5材质基础(2)——数学节点篇

UE5材质基础&#xff08;2&#xff09;——数学节点篇1 目录 UE5材质基础&#xff08;2&#xff09;——数学节点篇1 Add节点 Append节点 Abs节点 Subtract节点 Multiply节点 Divide节点 Clamp节点 Time节点 Lerp节点 Add节点 快捷键&#xff1a;A鼠标左键 值相加…

Hive SQL Join连接操作用法详解

Hive SQL Join连接操作 1.Hive join语法规则 基本语法&#xff1a; SELECT column_list FROM table1 JOIN table2 ON table1.column_name table2.column_name;JOIN类型&#xff1a; 在JOIN语句中&#xff0c;你可以使用不同类型的JOIN操作&#xff0c;包括INNER JOIN、LEFT O…