前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >纯粹炫技

纯粹炫技

作者头像
我不是码神
发布于 2022-07-28 07:56:35
发布于 2022-07-28 07:56:35
19300
代码可运行
举报
文章被收录于专栏:流媒体技术流媒体技术
运行总次数:0
代码可运行

最近在搞原子状态机,后续会发文章介绍。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export const enum FSM_EVENT {
  START = 'start',
  START_SUCCESS = 'startSuccess',
  START_FAILED = 'startFailed',
  STOP = 'stop',
  STOP_SUCCESS = 'stopSuccess',
  STOP_FAILED = 'stopFailed',
};
export const enum FSM_STATE {
  IDLE,
  STARTING,
  RUNNING,
  STOPING,
}
const Transitions = [
  {
    [FSM_EVENT.START]: FSM_STATE.STARTING,
  },
  {
    [FSM_EVENT.START_SUCCESS]: FSM_STATE.RUNNING,
    [FSM_EVENT.START_FAILED]: FSM_STATE.IDLE,
  },
  {
    [FSM_EVENT.STOP]: FSM_STATE.STOPING,
  },
  {
    [FSM_EVENT.STOP_SUCCESS]: FSM_STATE.IDLE,
    [FSM_EVENT.STOP_FAILED]: FSM_STATE.RUNNING
  }
] as const;

这个状态机是写死的四种状态

下面是正常的改变状态的过程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private transition(event: FSM_EVENT, ...args: any[]) {
    const to = Transitions[this.state]?.[event];
    if (typeof to == 'number') {
      this.state = to;
      return true;
    }
    return false;
  }
}

到这里没什么问题,但是我盯着最上面的代码看,总觉得里面有重复的东西需要优化。

开始和结束有相同的状态变化过程,而且看着这张图总有种对称性,似乎我们的代码太过肤浅了,没有那个玄而又玄的味道。

直觉上来说四种状态对应着两个二进制位,00、 01、 10 、11,也可以作为数组的下标,0,1,2,3。

这里面一定可以用数学来计算。

现在有六种事件,但是抽出重复的单词,实际上还是四个单词的组合:start、stop、Success、Failed,所以这四个单词也可以用00、01、10、11表示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export enum FSM_EVENT {
  start,
  stop,
  Success,
  Failed
}
export enum FSM_STATE {
  IDLE = 0b11,
  STARTING = 0b00,
  RUNNING = 0b10,
  STOPPING = 0b01
}

整理一下状态机:得到下面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const Transitions = [];
Transitions[0b00] = {
  [FSMEvent[0b00] + FSMEvent[0b10]]: 0b10,
  [FSMEvent[0b00] + FSMEvent[0b11]]: 0b11,
};
Transitions[0b01] = {
  [FSMEvent[0b01] + FSMEvent[0b10]]: 0b11,
  [FSMEvent[0b01] + FSMEvent[0b11]]: 0b10,
};
Transitions[0b10] = {
  [FSMEvent[0b01]]: 0b01
};
Transitions[0b11] = {
  [FSMEvent[0b00]]: 0b00
};

现在的问题是,如果通过输入:当前状态和事件,得到输出:下一个状态(或者不变)

我们已经把startSuccess事件拆成了,start+Success了,所以相当于有三个输入量,当前状态、X、Y。

反复观察上面的规律,可以发现 下一个状态值 ,就是 X^Y (异或)。

现在剩下如何判断是否跳转到下一个状态了。

00 状态下只接受 X =00,01状态下只接受X = 01 ,那这个好办就是state ^ X == 00

10 状态下只接受 X = 01 ,11 状态下只接受X = 00 ,这个也好办就是state ^ X == 11

再考虑一下其他情况,Y只能是10 和 11,但是下面两个状态变化中没有Y,所以给Y 为0,这样也能保证下一个状态是X^Y。

最后我们整理到一个判断里面即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 private transition(x: FSM_EVENT.start | FSM_EVENT.stop, y: 0 | FSM_EVENT.Success | FSM_EVENT.Failed, ...args: any[]) {
    const from = this.state.value;
    const event = FSM_EVENT[x] + (y ? FSM_EVENT[y] : "")
    if ((from ^ x) == (y ? 0 : 3)) {
      this.state.value = x ^ y;
      return true;
    }
    return false;
  }
}

至此我们消灭了一坨看似无法消灭的代码。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
可以,大佬,互粉一下
可以,大佬,互粉一下
回复回复点赞举报
推荐阅读
Type-C PD快充诱骗协议芯片PD3.1支持从充电器获取5V9V12V15V28V
一、PD快充技术演进与诱骗芯片核心价值 PD3.1协议的发布标志着快充技术进入新纪元,将最大功率提升至240W(48V/5A),同时向下兼容PD3.0的100W(20V/5A)标准。诱骗协议芯片在此过程中扮演着"协议翻译官"角色,其核心功能是通过与充电器的智能协商,获取5V/9V/12V/15V/20V/28V等多档电压。这种技术使得传统设备无需内置完整PD协议栈即可享受快充便利,在移动电源、电动工具、智能家居等领域具有广泛应用价值。 二、FS8025BH芯片技术深度解析 作为支持PD3.0/3.1双协议的全能型诱骗芯片,FS8025BH采用QFN-16封装(3x3mm),集成了多项创新技术: 1. 宽电压支持能力:精确识别5V-28V输入范围,自动匹配最佳充电电压 2. 智能协议解析引擎:内置可编程MCU内核,支持USB PD Rev3.1 V1.8最新规范 3. 多重保护机制:集成OVP/UVP/OCP/SCP防护,工作温度范围-40℃至+85℃ 4. 低功耗设计:待机电流<10μA,转换效率高达95% 5. 配置灵活性:支持I2C接口编程,可存储多组电压配置方案 三、典型应用场景与电路设计要点 在实际应用中,FS8025BH展现出强大的适应性: 1. 移动电源改造:通过CC引脚检测接入PD充电器后,可在200ms内完成协议握手并输出预设电压。典型电路只需外接2颗电容和1颗电阻即可工作。 2. 工业设备供电:针对28V电动工具设计的参考方案显示,芯片可稳定输出28V±1%精度,最大支持5A电流传输。 3. 智能家居集成:配合Buck-Boost电路,实现12V/15V双模输出,满足智能音箱等设备的多样化需求。 开发注意事项: - PCB布局需遵循高频信号处理原则,CC引脚走线长度建议<15mm - 建议在VBUS端并联100μF固态电容以抑制电压波动 - 批量生产时应通过专业烧录器配置EFUSE参数 四、市场主流方案对比与选型建议 相较于传统方案,FS8025BH具有明显优势: 1. 与LDR6035相比:支持更高28V输出电压,协议响应速度提升30% 2. 对比CH224K:新增PPS协议支持,兼容性更广 3. 相较于IP2726:静态功耗降低60%,更适合电池供电设备 选型决策树: - 如需20V以上输出:必须选择PD3.1芯片 - 对成本敏感的中低功率场景:可考虑PD3.0方案 - 特殊协议需求(如QC4+):建议选择多协议兼容芯片 五、开发调试实战技巧 1. 协议分析仪使用:建议配备专业测试仪(如Power-Z KM002C)监控通信过程 2. 常见故障排查: - 握手失败:检查CC引脚下拉电阻(5.1kΩ±1%) - 电压波动:确认VBUS电容ESR值(建议<10mΩ) 3. 量产测试要点: - 需进行100%的老化测试(85℃/85%RH环境) - 建议采用自动化测试治具校验输出电压精度 六、技术发展趋势展望 随着USB4和Thunderbolt4标准的普及,未来诱骗芯片将呈现三大发展方向: 1. 更高集成度:可能整合DC-DC转换功能 2. 动态电压调节:实现ms级电压切换的智能功率分配 3. 安全增强:支持数字签名认证防止固件篡改
泛海微电
2025/05/19
210
聊聊身边的嵌入式:点菜机用着好好的,突然挂了,这口锅应该甩给谁?
周末被老婆challenge了。之所以用这个英文词汇,是因为实在难以找出一个恰当的中文,来表达这个意思。挑战?盘问,质疑?臭骂?好像都不对劲儿。对了,想来想去,只有diao这个词有点儿接近,又实在是难登大雅之堂。语言真是个奇怪的东西。
用户2366192
2023/09/14
1790
聊聊身边的嵌入式:点菜机用着好好的,突然挂了,这口锅应该甩给谁?
无线充电器方案(方案选型)
现今几乎所有的电子设备,如手机,MP3和笔记本电脑等,进行充电的方式主要是有线电能传输,既一端连接交流电源,另一端连接便携式电子设备充电电池的。这种方式有很多不利的地方,首先频繁的插拔很容易损坏主板接口,另外不小心也可能带来触电的危险。
全栈程序员站长
2022/08/01
1.9K0
无线充电器方案(方案选型)
WattUP无线充电技术:5米范围内为所有电子设备充电
虽然无线充电并不是一个新的概念,但目前市面上的“无线充电”仍然需要你将手机放在充电座上。好消息是,科技公司Energous即将推出一款无线充电器WattUp,可以为5米内所有设备同时进行无线充电。 现在,想象一下你永远不再需要将智能手机插入充电槽来充电,或者有一种技术能够使得一台充电设备能够同时为多个用电设备充电,这将是多么美好的场景。而这就是Energous公司即将为你带来的新型无线充电器。 WattUp:无线充电技术 科技公司Energous即将推出一款无线充电器WattUp,它将改变家庭中、办公室
FB客服
2018/02/06
1.4K0
WattUP无线充电技术:5米范围内为所有电子设备充电
无线充电器沦为帮凶,不仅操纵语音助手,还能烧毁手机
据BleepingComputer消息,佛罗里达大学和 CertiK的一项学术研究表明,名为“VoltSchemer”的新攻击利用电磁干扰,不仅可以让现成的无线充电器操纵智能手机的语音助手,还能够对设备以高热的形式进行物理破坏。
FB客服
2024/02/26
1930
无线充电器沦为帮凶,不仅操纵语音助手,还能烧毁手机
无线充电技术简介
无线充电技术最早出现于19世纪末,当时的物理学家Nikola Tesla演示了磁共振耦合——在两个电路(一个发射器一个接收器)之间建立磁场,通过空气来传输电能。但在之后的大约100年时间里,这项技术并没有得到多少实际应用。直到近年来智能终端设备的广泛应用,尤其是智能手机的普及,才让无线充电技术得以重新发展和推广。
233333
2021/06/10
2.9K0
无线充电技术简介
飞思卡尔恒功率无线充电(中)
根据波形图我们需要一个电压可变化的充电电路,我们可以想到PWM波,PWM控制技术就是对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形。按一定的规则对各脉冲的宽度进行调制,既可改变电路输出电压的大小,也可改变输出频率。将脉冲时间宽度比上周期,定义为PWM波形的占空比,它是一个从0到100%的数值。PWM平均值就等于信号的峰值乘以占空比。下图为“半桥”功率输出电路:
狂人V
2020/06/29
2.4K0
USB-C PD受电端Sink取电诱电受电多协议芯片LDR6328S
USB PD通讯就是Host(Source)和Power Brick(Sink)之间的数据交互。
Legendary_008
2023/07/07
5340
CDIO工程实践 无线充电智能循迹小车制作
一、CDIO理念 CDIO工程教育模式是近年来国际工程教育改革的最新成果。从 2000 年起,麻省理工学院和瑞典皇家工学院等四所大学组成的跨国研究获得 Knut and Alice Wallenberg 基金会近 2000 万美元巨额资助,经过四年的探索研究,创立了 CDIO 工程教育理念,并成立了以 CDIO 命名的国际合作组织。 CDIO代表构思(Conceive)、设计(Design)、实现(Implement)和运作(Operate) ,它以产品研发到产品运行的生命周期为载体,让学生以主动的、 实践
叶庭云
2021/07/01
1.8K0
PD芯片的实际应用场景有哪些?
在当今这个移动设备普及、快充技术日新月异的时代,PD(Power Delivery)芯片作为实现快速充电技术的关键组件,正逐步成为市场关注的焦点。PD芯片以其强大的功能特性和广泛的应用领域,为我们的生活带来了前所未有的便捷与高效。本文将深入探讨PD芯片的定义、功能、应用场景及其在未来市场中的发展前景,为您全面推荐这一前沿科技产品。
legendary_163
2024/07/10
3270
科学瞎想系列之四十三 无线充电
宝宝们平常用的手机、iPad、笔记本电脑、电动车等等都需要充电,现在宝宝们充电都是用个充电器,一头插在电源上,一头插在你的宝贝上进行充电,如果不用这些肠子肚子的电线连接就可以充电那该多爽!于是工程师们就想到了充电神器----无线充电!所谓无线充电就是不需要电力传输线将电能传递到需要充电的设备上,对这些设备的电池充电,这里就涉及到一个关键技术----电能的无线传输技术。其实早在1890年还没有手机、iPad这些宝贝之前,有个叫特斯拉的老爷爷就提出了无线传输电力的设想,只不过因种种条件所限,他的设想没有
标准答案
2018/04/18
1.2K0
科学瞎想系列之四十三 无线充电
在线互动式 UPS、在线式 UPS 、离线式 UPS 三种UPS原理与对比
在离线(“备用”)UPS 系统中,负载直接由输入电源供电,只有在市电出现故障时才会调用备用电源电路。
网络技术联盟站
2023/03/13
7.7K0
在线互动式 UPS、在线式 UPS 、离线式 UPS 三种UPS原理与对比
USB PD快充协议_pd快充协议文件
1 USB Type-C 1.1 电气参数 Rd: 5.1kΩ Ra: 1.0kΩ Rfrswap: 5Ω,for PD 3.0 FR_Swap 4b5b bit rate: 300kbps BMC bit rate: 600kbps Rp: Reference to the Figure 1-1
全栈程序员站长
2022/11/16
1.8K0
USB PD快充协议_pd快充协议文件
无线充电迷局:淘宝月销2万+,为何苹果却一再跳票?
苹果的谨慎以及山寨厂商的大刀阔斧。 苹果最近跳票了,这次跳票的对象是他们去年9月推出的无线充电器AirPower。据彭博社报道,原计划于本月上市的AirPower因发热问题再次推迟,内部工程师表示有望
镁客网
2018/06/28
5130
AP6317 同步3A锂电充电IC 带散热 便携式设备 充电器
概述是一款面向5V交流适配器的3A锂 离子电池充电器。它是采用800KHz固定频率的同 步降压型转换器,因此具有高达92%以上的充电效 率,自身发热量极小。 包括完整的充电终止电路、自动再充 电和一个精确度达±1%的4.2V预设充电电压,内 部集成了防反灌保护、输出短路保护、芯片及电池 温度保护等多种功能。 采用带散热片的SOP8封装,并且只 需极少的外围元器件,因此能够被嵌入在各种手持 式应用中,作为大容量电池的高效充电器。最大额定值 输入电源电压(Vcc):-0.3V~6.5V BAT:-0.3V~7V LX:-0.3V~7V PROG:-0.3V~7V NCHRG:-0.3V~7V NSTDBY:-0.3V~7V TS:-0.3V~7V BAT短路持续时间:连续 最大结温:145℃ 工作环境温度范围:-40℃~85℃ 贮存温度范围:-65℃~125℃ 引脚温度(焊接时间10秒):260℃
SW18923706103
2023/03/24
4120
智能穿戴国产手表单线圈快速无线充电器IC芯片
产品名称:单线圈快速无线充电器 输出功率:2.5W ​ 输入:5V/0.5A(Max) 产品尺寸:TBD 有效充电距离:5mm 典型充电效率: 74 % 标准:支持兼容Qi -- BPP 工作频率:127.7khz 保护机制:FOD/OTP/OVP/OCP
泛海微电
2023/04/13
5940
【持续更新中】物联网(NB-IOT/LoRa/RFID/NFC/5G)的架构,协议及应用入门汇集
本文作为一个对物联网感兴趣的爱好者的一些收集信息,包括物联网的架构,协议及应用入门,涉及NB-IOT,LoRa,MQTT,NFC,RF-ID,5G等技术,并持续更新中(截止2020.01.31)。 欢迎大家也推荐好的文章。
辉哥
2020/02/18
6.3K0
【持续更新中】物联网(NB-IOT/LoRa/RFID/NFC/5G)的架构,协议及应用入门汇集
DC-DC 40V降12V 36V降3.3V 30V转5V3.2A大电流充电器/仪表盘同步整流恒压芯片-H4023
各位电子工程师小伙伴们,今天给大家介绍一款厉害的 DC-DC 芯片 ——H4023 ,它是我们在电源管理领域的得力助手,拥有众多让人眼前一亮的特性,能为我们的设计工作带来诸多便利。​
用户11416530
2025/03/28
490
DC-DC 40V降12V 36V降3.3V 30V转5V3.2A大电流充电器/仪表盘同步整流恒压芯片-H4023
NFC芯片选型及基本电路框架
RFID作为一项专业度较高的技术,在一些公司,可能还会专门招聘专业的RFID工程师。本篇阐述的涉及到的只是基本选型设计、电路框架,关于RFID天线调试、低功耗检卡调试等,后续再其他篇章会继续更新!
硬件大熊
2022/06/23
1.7K0
NFC芯片选型及基本电路框架
热点丨无线充电行业繁华前景可预见 手机、汽车厂商齐布局
导读:从2015年开始,各消费电子巨头纷纷推出具有无线充电功能的产品:包括苹果推 出apple watch、三星推出gear watch、S6/S6 edge、S7/S7 edge等,我们判断后续会持
钱塘数据
2018/03/02
1.1K0
热点丨无线充电行业繁华前景可预见 手机、汽车厂商齐布局
推荐阅读
相关推荐
Type-C PD快充诱骗协议芯片PD3.1支持从充电器获取5V9V12V15V28V
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档