PhoneMe Advanced 浅度探索五----JavaSE or JavaME

图谱后端选型:Memgraph vs Neo4j vs 嵌入式 SQLite,什么时候该切换? 本文通过脚本自动探测代码图谱规模,对比SQLite、Memgraph与Neo4j在不同节点量级下的性能表现。实测表明:10万节点内嵌入式SQLite凭借低延迟和轻量部署仍具竞争力;超15万节点后,Memgraph适合低延迟、高并发场景;而Neo4j仅在百万级图谱且需复杂查询时才具备优势。配套提供一键测试延迟与平滑迁移后端的Python工具链,实现按需选型与无缝切换。 阅读详情

 Mark Lam has been a virtual machine engineer in the JavaME CDC team at Sun Microsystems for over 6 years. Before joining Sun, he was a real-time embedded systems developer for 6+ years, working on application frameworks, graphics systems, networking protocols, game development, and fault tolerant systems amongst other things, on devices ranging from 64KB 8bit uControllers to 32-bit RISC machines.
原文URL:http://weblogs.java.net/blog/mlam/archive/2006/11/when_does_javas_1.html#more

 

 在我关于性能的文章中有一个评论,问到:我想到关于设备日益强大的处理能力和更多的RAM的事实,我想什么时候才是JavaSE代替JavaME/CDC的最好选择?你需要多少的CPU,RAM,Cache?
 在我回答这个之前,我必须放弃一个我是一个工程师的,这对我的雇员,Sun,甚至是Sun的其他工程师是不必要的。基于这点,让我们进入这个问题吧。。。
JavaSE or JavaME
 最初的问题是基于设备兼容性和性能为依据的。这个问题有许多尺度比我们第一次看到的。这个问题基于规范,普遍存在的,可移植的,等等。让我们从显而易见的地方开始。。。
设备能力
 如果你的设备象一个桌面/服务器(象奔腾系列)建立在嵌入式的盒子里。那么,常规来看,JavaSE VM能够取得更好的性能。如果性能稍微差些,那么你的路就长了。我说奔腾系列仅仅是给你一个计算能力的比较。我不是说只有X86处理器。显而易见,JavaSE也为SPARC和PowerPC移植,他们有同样的规则应用在这里。
 设备性能不只是关于选择处理器。以PowerPC为例。它嵌入我们已知的许多桌面和服务版本。处理器核心是一样的(执行同样的代码),但他们的性能是不一样的。显而易见他们的时钟频率,高速缓存是不一样的。还有其他的硬件不同(例如主板等级)在性能上。高速缓存体系,2极缓存,主内存容量,内存速度,总线速度,内存和I/O体系,I/O处理器,MMU,DMA,TLAB size,辅助存储器(硬盘,闪存)等等。。。你的设备有这些特性的大部分,这样看起来JavaSE更好,反之亦然。
 仅仅是看下内存容量,我想JavaSE在10,100MBs,甚至GBs内存上典型的操作有同样的footprint。CVM的操作通常在10MBs以下。当然,这取决于你的应用程序在做什么(对JavaSE和CVM一样)。但这些数字给你一个想法。如果你的设备有16MB RAM,CVM可能是你最好的办法。如果你有32MB RAM,它只会得到一点的提升,这依靠你努力达到的程度。CVM对大多数嵌入式应用程序仍然是最好的办法。低于100MBs,它仍然是比JavaSE有希望的。如果设备有1G或更多,我非常同意JavaSE是更好的选择。
 对于高速缓存,这更难告诉我们。0~10 KBs于CVM匹配。10~100 KBs,仍然是CVM。如果高速缓存大于1MBs,你可以默认运行JavaSE。但这不意味这CVM不是一个更好的选择。
 对时钟频率,低于100MHz,CVM是你较好的选择。100MHzs~1GHz,仍然是CVM。超过1GHz,JavaSE是当然的选择。但Sun在不久前展示了这些,CPU性能不只是时钟频率(参考 CoolThreads)。因此,上面的数字相对的。事实上,上面我提到的所有方面只是基于我的经验的猜测教育。我们可以使用这些提示,但真实世界的案例是不同的,这就是上面给出的案例没有固定规则的原因。
 现在,我们来谈论这些显而易见的材料,让我们进入那些人们没有想到的。。。
嵌入式系统开发者注意
 嵌入式硬件常常需要下面的特性:便宜(成本方式,非品质),可靠的,可能滞后于技术发展水平曲线一点,不会太多。它需要便宜是因为目标消费者是平常的人。便宜意味着你能够卖的更多。可靠性是显而易见的,没有人想要一个不可靠的系统。另外,死机的蓝屏(从其他的计算机体验)接受的体验。在嵌入式设备,如果设备失败,人们会得到真的伤害或苦恼。基于这些,设备厂商小笔记簿会受到伤害。消费者期望系统没有异常的工作。The lagging(绝缘材料?)的曲线部分是大部分cost reason(成本?)。曲线的最新的边缘是非常昂贵的。太多的lagging是昂贵的,因为部分(它们的替代)很难找到。在曲线之后的痕迹有一点典型的收益。显而易见,它们不能应用于所有的嵌入式设备。但我的焦点在这个观点,异常的案例也会背离这个这个理由。
 因此,这对于嵌入式软件(包括JavaME)开发者意味着什么?
可移植性
基于技术曲线变化,硬件设备应注意升级老设备导致成本过高的。当然,升级也会带来对硬件性能有利的地方。有时候,升级不仅仅是替换CPU,它是全部体系的更换。
有时候,厂商会基于不同的性能提出不同的硬件等级。比如,低端和高端是2个不同的市场,这些设备不会总是建立在同样的CPU体系上。
这是为什么JavaME吸引人的地方(write once run anywhere)。但WORA依靠Java VM的移植。因此,VM的可以移植性是非常重要的。在这之后,开发成本和移植成果同样棘手。 它会使厂商想把这些都最小化。这也是CVM更适合的一个原因。我会在一系列文章中解释,CVM的体系对不同的平台来说更容易移植。这不是说JavaSE不能移植,只是它不太容易做到。我在前面已经指出,可以移植性来自于性能成本。尽管这些成本对大部分案例来说微不足道。这就是为什么CVM的性能在好的设备上比不上JavaSE的原因。相反的,JavaSE难以移植。CVM选择可移植性,JavaSE选性能。
普遍存在的
 普遍存在的,我没有提及那些支持java的设备作为在这个领域里使用它们的小组。在这个案例里,我会提及VM移植的实用性。这些都基于易于移植。因为CVM是容易移植的,它的移植可用性(CPU体系和OS平台)多于JavaSE。举个例子,像这写的,CVM移植到ARM,MIPS,x86,SPARC和PowerPC。一些消费者会把CVM移植到其他CPU体系。前面我们知道,JavaSE只移植到x86,SPARC和PowerPC。你选择一个源代码已经移植的可用VM。除非你自己想做移植。这是一个可选项(通常这个工程师的玩笑,因为你的工作多移植有影响),你必须花时间去将它做正确。因此,这需要依靠你的开发者的时间表。如果你选择作一个移植,CVM是一个值得关注的容易移植的选择,对于你想在短时间里得到正确的高可移植性。
 这是CVM体系对于多样的嵌入式系统便于移植的一个因素,这是必要的折衷。
符合目的
像上面说的,你需要基于你要怎样的java平台特性在你的设备上运行来决定。让我们看几个例子:
案例1:你的设备是x86的盒子,只制造很少的数量(10s~100s),你可以在它身上花大量的金钱。它有1G的内存,有硬盘存储器。它主要运行一个java程序。这个程序有很沉重的线程负担,高性能。这个程序有特殊的目的,只对于这个盒子。这个盒子不被期望运行其他程序,尽管你可以升级它来适应你的程序。那么你的选择是JavaSE。关键字是:桌面/服务器类硬件,高性能,特殊目的的软件。它不服从标准。
案例2:你的设备要卖上百万台。它运行在ARM处理器。32M RAM。只有非常少的高速缓存。基于JavaME CDC1.1它有自己的组件,有自己的规范,应用在一系列的市场。那你的选择是CVM。关键字是:便宜的设备,小或低的性能,需要适应CDC。
案例3:你的设备是服务器,需要运行JavaEE servlets,它要在同一时间提供1000个servlet。每个servlet需要运行它自己的进程,不是线程。Servlet自己有多个线程。Servlets被期望有短的生命期。性能是临界的。每个servlet操作一个来自网络的服务会话。服务是未知的(没有图形),不计算范围(没有太多的问题需要解决)。如果servlets没有及时响应,,使用设备的用户会苦恼,非常的苦恼。设备有4G内存,配置4个超级CPU,需要适应JavaEE。
显而易见的答案是。。。JavaSE?不绝对。这是为什么:JavaSE比CVM有大的footprint。JavaSE基本的footprint是20MB。CVM的基本footprint在2MB以下。每个servlet需要4MB的内存来运行。因此,运行servlet的一个JavaSE实例需要大约24MB的内存。每个运行servlet的CVM需要大约6MB。
如果设备任何时候都有4GB内存,它可以运行170个JavaSE实例,或者682个CVM实例。如果你不想处理硬盘内存分页,那么你想同一时间你可以响应1000个服务请求里的多少?
我不想回答这个。答案是你必须清楚你想的。显而易见,仅仅是考虑设备性能,你不能做出最好的决定。其他方面,需要解决适应JavaEE。CVM完全适应Java VM第2版规范。因此,你可以在它上面运行JavaSE和JavaEE。但不会增加CVM的footprint,它仅仅是2MB。是的,我没有说出JavaSE VM的footprint的具体数量。我的例子的人为的,但它不是一个不可用的。它解释了我观点,事情不总是像它看上去的那样。有许多的事情需要考虑,的确,硬件/设备性能是不最重要的因素。
这对你意味着什么
 好的工程实践总是你决定的指南。明白你需要的(你的程序要干什么),考虑所有的因素:设备性能,可移植性,普遍存在,适应性,还要其他我们在上面谈到的。

祝有美好的一天!

X书x-mini-sig_x-mini-mua X书的tiny风控代码,成功运行x-mini-sig|x-mini-mua 阅读详情

相关推荐

stm32最小系统_完成一个最小FOC矢量控制系统所需的基本模块和功能配置

当我们读懂 FOC 矢量控制的基本原理之后,便迫不及待的想动手尝试,去实现一个矢量控制系统,让电机先转起来,有一个直观的感受。因此,我们需要设计实现一个矢量控制的最小系统,具备矢量控制的基本功能,满足电机矢量运行的基本条件。首先,看一下矢量控制的基本架构:矢量控制架构如上图所描述,矢量控制系统包括实时电流的采集、clarke 变换、park 变换、SVPWM 、实时角度的反馈和计算以及电流环和速...

weixin_39524048的博客 1784

PhoneMe Advanced 浅度探索四----性能

 Mark Lam has been a virtual machine engineer in the JavaME CDC team at Sun Microsystems for over 6 years. Before joining Sun, he was a real-time embedded systems developer for 6+ years, working on ap

91program 的流水空间 1842

有了网段为什么还要有VLAN???

近几日,在学习VLAN及VXLAN方面的知识,对于产生原因做一个总结及详解。 VLAN(Virtual Local Area Network,虚拟局域网),其主要用途是用来缩小广播域,即进行隔离。 先对广播域的一个概念做如下描绘:如下图,主机A、B、C、D均连接在交换机SW1上,其中A、C同网段为192.168.252网段,而B和D同网段,为192.168.250网段。 现,假如A与C第...

dandandean_96的博客 6888

【STM32】 ADC 完全指南:从模拟信号采样量化到五大架构原理

本文系统介绍ADC核心概念与五大主流架构。模拟信号具时间与幅值连续性,需经采样(满足奈奎斯特准则防混叠)、量化(引入±1/2LSB误差,SNR≈6.02N+1.76dB)、编码三步转为数字信号。重点解析Flash(并行高速但受限于比较器数量)、SAR(逐次逼近,低功耗适合MCU如STM32)、双积分(高精度抗工频,用于万用表)、流水线(高速吞吐)及Σ-Δ(高分辨率,靠过采样与噪声整形)五类架构原理、优缺点与应用场景。强调分辨率≠精度,选型本质是速度、精度、功耗与面积的权衡。

专注后端与底层技术,分享实战干货与学习笔记,梦想进入字节跳动,步履不停,热爱不止。 525

AHB不对称半桥反激电路设计(三)主要器件参数规格计算

本文介绍了AHB拓扑变压器的设计步骤与核心参数计算,包括主控芯片选择、工作原理分析及参数计算。作者选择DK87XXD集成MOS方案,详细阐述了输入电压范围、反射电压限定、匝比计算、工作频率设定、原副边电流值、电感量计算、磁芯选择、匝数计算、谐振电容设计等关键步骤。通过公式推导与实例计算,展示了150W电源的变压器设计过程,最终确定匝比5.5、原边22匝、副边4匝、电感量200uH等参数。文章还讨论了谐振电容与漏感的关系,为后续调试提供理论基础。该设计方法结合理论分析与工程实践,适用于AHB拓扑电源开发。

【Simon】的博客 3339

《备考系统分析师》 - 专栏介绍和目录

本专栏提供软考高级系统分析师全套备考资料,包含四大核心内容:1.详细考点梳理(覆盖基础知识、关键技术、案例实践三大模块16个章节);2.历年真题及解析(2009-2022年所有真题含综合知识、案例分析和论文);3.100+篇高质量论文范文;4.预测模拟题。早鸟价仅需9.9元,可节约80%资料搜集时间,帮助考生高效备考、顺利通过考试。专栏持续更新,有问题可随时联系作者。

数据知道的博客 1万+

[学习笔记]超越超级大循环与原生RTOS:事件驱动架构如何改变嵌入式固件的可扩展性

RTC:事件处理器一旦开始,全部状态迁移、进出动作、输出事件必须全部执行完毕才返回;同一个组件,当前处理没结束,不会开始下一条事件。这不是架构给状态机额外施加的限制,这是UML状态图等全部状态机形式化本身固有的语义要求。如果迁移中途可以被打断,状态机会停留在未定义的中间状态。RTC保证两次事件之间,状态机永远处于明确定义的合法状态,便于分析与测试。

MiKiJT的博客 236

AI:240-YOLOv8高效涨点 |Swin Transformer的主干网络替换与优化(附代码 + 详细修改步骤 +原理介绍)

YOLOv8作为目标检测领域的最新版本,在速度和精度之间取得了良好的平衡。然而,随着计算机视觉任务的复杂性不断增加,YOLOv8的标准主干网络(Backbone)在处理高分辨率图像或多尺度目标时,可能存在一定的局限性。为了进一步提升YOLOv8的性能,我们可以引入Swin Transformer替换其主干网络,以增强模型的全局感知能力和多尺度特征提取能力。本文将详细介绍如何在YOLOv8中用Swin Transformer替换原有的Backbone,提供代码示例,并深入探讨其中的原理和效果。

一键难忘的博客 3961

DPU安全组与ACL性能测试:从规则爆炸到线速卸载的实战指南

本文深入剖析DPU安全组与网络ACL的底层卸载架构,通过两个完整实战测试矩阵,量化评估规则复杂度、有状态连接跟踪(Conntrack)及OVS Offload协同对RoCEv2性能的影响。结合真实故障排查案例与工具输出矩阵,揭示大规模云环境中安全组性能跌落的根因,并给出基于规则聚合与硬件表项优化的最优配置指南。

专注分享DPU、RDMA智能网卡/SSD(固态硬盘)产品测试与优化 339

【Unity实战】实现最完美最简单的UI适配方案,背景压缩或者拉伸变形解决方案,手机刘海屏适配,适配不同分辨率,不同尺寸,不同设备。

这期来讲一个简单的UI设计方案,很多同学可能搞不懂锚点、轴心这些概念,导致做好的UI在别人的设备上,乱跑或者是重叠,或者是参加游戏老发时间比较紧来不及做适配,都可以来试试这个方法,通过填充边框来保持游戏画面的原始比例,所以它的缺点也很明显,在一些移动设备上会浪费比较大的显示面积。 unity不同设备UI变形? UI在不同设备上如何适配?

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3655

【PX4学习笔记】3. PX4 固件烧写(1 探索过程)

飞控型号:cube orange【PX4官方用户指南中关于cube orange的描述】 飞控载板型号:Mini Carrier Board【迷你载板说明文档】 固件安装参考:The Cube User Manual V1.0

【人工智障 | 计算鸡视觉 | 机器孩】 7677

嵌入式:2.STM32底层基础(存储、寄存器、时钟、总线、GPIO、寄存器点灯)

存储系统用来存放程序、数据、设备状态,核心三大作用:存放程序代码、保存运行时数据(全局、局部、栈、堆)、数据持久化(比如W25Q64 Flash,可以搭配文件系统)。

2401_86731574的博客 379

【图像超分】论文复现:Pytorch实现SRCNN!保姆级复现教程!提供完整代码和最优权重模型(x2、x3、x4)!科研级论文曲线图!计算平均PSNR和SSIM!代码Windows和Linux都可用!

由于很多同学反应没用过jupyter notebook,更习惯用pycharm项目的形式跑代码。于是,本文将用pycharm项目的形式,重新复现SRCNN!【图像超分】论文复现:新手入门!Pytorch实现SRCNN,数据预处理、模型训练、测试、评估全流程详解,注释详细,简单修改就可以训练你自己的图像数据,有训练好的模型下载地址,随取随用。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 4704

基于STM32的智能浇花系统

本文设计基于STM32F103C8T6的智能浇花系统,集成DHT11、YL-69、MQ-135、GL5528四类传感器,实现温湿度、土壤湿度、CO₂浓度与光照的实时监测。系统支持自动、手动、远程三模式联动控制,通过ESP8266-01S以MQTT协议上云,配合手机APP实现数据可视化与远程指令下发。硬件采用多通道ADC采样、继电器驱动与OLED显示,软件实现精准时序控制与双向通信。测试表明系统稳定可靠,完整覆盖“感知—控制—云联”IoT全链路,具备高扩展性与工程实践价值。

weixin_45732499的博客 175

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

MCU复位电路不加单片机可行吗?PCB踩坑记

第一版板子长按偶发不触发,经查为Key脚走线穿越DC-DC电感下方,受开关噪声干扰导致判定失败。改用丽晶微EY407-383329(SOT23-6)专用复位ASIC,硬件实现3秒长按、1秒双路互补脉冲输出,无需MCU参与,省去软件消抖与定时器资源。关键点:Key线避开通路、就近加104P去耦、低有效接法正确、输出极性匹配、RESET上拉可靠、扩流器件靠近输出。全靠硬件实现稳定复位,主控死机仍可工作。建议依8项排查清单验证,量产前索取规格书并打样验证。

ELITECHIP_ECM的博客 276

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

锅炉房已经有PLC,还需要IoT吗?从安全控制到全局能效的智能化升级

无论是工业蒸汽锅炉房,还是酒店、医院等商业热水场景,改造都可以从现有条件出发:先梳理控制系统、仪表和通信情况,再明确安全边界与数据需求;盈电物联网的云边协同思路,是在尽量保留原有控制与仪表设备的基础上,通过IOT控制器补齐数据接入和边缘处理能力,再与云端平台协同,逐步建立运行、能耗与运维之间的数据闭环。锅炉房智能化,不是用IoT取代PLC,也不是简单增加一块远程大屏,而是在保障安全控制独立可靠的基础上,让分散的数据真正服务于运行管理。将告警、排查、处理、复核和维修记录串联起来,形成可追溯的设备档案。

olzorange的博客 286

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

20 嵌入式系统架构:架构模式、实时操作系统、鸿蒙案例

嵌入式架构模式怎么选、RTOS 和通用操作系统差在哪、优先级反转怎么破?本篇把前后台、中断驱动、管态目态几种结构排成一条演进线,手把手算 RMS 可调度界限、判断任务集能不能跑得动,再把优先级继承与优先级天花板两种解法对上号,配鸿蒙案例讲清工程落地。

weixin_46316564的博客 227

重复网格自动实例化:6400个方块背后的提交成本

这项夹具关闭了G-buffer、AO、GI、阴影、AA、MSAA和大气,用来隔离不透明实例提交成本。本文依据2026年11月9日已合并的PR #792及其中的验证记录撰写,数字不是本次重新运行的测试。这次实现把符合条件的重复不透明网格与材质组合,自动送入现有Vulkan实例化间接绘制路径。EVEngine最近合并的自动实例化改动,针对的正是这段重复工作。它们看起来不像渲染大功能,但位于每对象、每帧的循环里,数量一多就值得测量。真正可复用的是保留场景、构建参数、预热时间和日志汇总工具,再对照同源代码开关。

西风世界 142

注塑机数据采集网关 ZK-D1/D3 如何与 MES/IOT 平台对接并展示数据

本文系统阐述注塑车间数据采集难题及ZK-D1/D3网关解决方案,聚焦设备异构协议统一、数据建模规范与四层链路对接。通过明确设备唯一标识、统一命名规则与上行协议选择,实现多品牌注塑机数据标准化采集与传输。结合MQTT/HTTP/OPCUA多协议支持,构建从设备层到MES/IOT平台的完整链路,支撑实时看板、历史趋势、OEE分析与报警管理。强调前期标准化与端到端验证的重要性,确保数据可靠落地,赋能智能制造。

专业采集注塑机数据,为mes系统提供数据服务! 251

中科晟达注塑机数据采集网关 ZK-D1/D3:如何读取各品牌注塑机系统数据并对接 MES/IoT 平台

注塑车间数字化改造核心挑战在于多品牌、多协议设备的数据采集。中科晟达ZK-D1/D3网关通过边缘计算,兼容海天、发那科等主流机型及私有协议,支持EUROMAP63/77、Modbus、OPCUA等标准,实现南向多协议解析与北向标准化上行(MQTT/OPCUA/HTTP)。结合统一点位模型设计与断网续传机制,助力MES高效对接。部署中需重点确认通信权限、合理配置轮询周期、保障时间同步与数据去重,可有效解决“采不到数”“数据不准”等痛点,为OEE分析、工艺追溯与智能运维提供可靠数据底座。

专业采集注塑机数据,为mes系统提供数据服务! 297

越华环保集团碳惠小屋|面向碳普惠场景的 IoT 终端与碳数据链路设计方案

越华环保集团碳惠小屋这套 IoT 碳数据方案,把物联网感知技术和碳普惠业务规则深度绑定,补齐了碳普惠线下可信数据源短板。相比通用回收设备,它的核心价值在于标准化碳数据链路与可对接上层碳普惠平台的开放能力。随着各地碳普惠数字化建设提速,对合规、可溯源线下采集终端需求持续增长。这套架构具备良好扩展性,后续可以继续接入骑行、节水节电等更多低碳感知终端,作为统一的公众低碳数据采集底座,支撑区域碳普惠数字化体系持续迭代升级。

MuMuMu1223的博客 198

python标准库使用总结

它跟着 Python 解释器一起发布,跨平台(Windows / Linux / Mac / 嵌入式),文档统一,稳定性高。TCP/UDP,和 C 的 socket API 思想几乎一致,嵌入式网络开发必看。和第三方库(requests、numpy)对比:第三方要 pip 装;:IO 多路复用(epoll/poll),写服务端、高并发网络。包(标准库 HTTP 请求,不用装 requests)内置模块是标准库的子集。,是内置模块,不需要 import。包(标准库自带 HTTP 组件)

qq_28576837的博客 212

STM32串口DMA+IDLE空闲中断接收不定长数据:完整代码与避坑指南

串口接收不定长帧是嵌入式通信中最普遍的工程难题:轮询占用 CPU、定长 DMA 接收不齐、逐字节中断在 115200 波特率下每 86.8 μs 打断一次主循环。本文基于 STM32F103C8T6(72 MHz),采用 USART1

12 年嵌入式一线固件工程师。只写两种内容:板上量到的真实数据,和照着做就能定位到代码行的排查步骤。主攻 STM32 现场故障、RTOS 与显示驱动。 312

【成品设计】基于51单片机的智能鱼缸控制系统设计

本文介绍基于51单片机的智能鱼缸控制系统,实现水位、温度、浑浊度实时采集与LCD显示,支持按键手动投喂及参数设置。通过蓝牙模块连接手机APP,实现远程监测,并具备自动加水与排水功能。版本V2在V1基础上优化蓝牙通信与APP交互体验,提升智能化水平。作品设计完整,展示详实,适合爱好者参考学习。

Dev_XH 's HOME 172

软考嵌入式工程师笔记复盘

迎来正式的考试,无论是临时抱佛脚还是巩固知识,我个人总结了一份冲刺笔记。2027年上半年考试科目。

u012890771的博客 212

六轴机械臂的关节里,是一颗 600MHz 的国产 MCU

electronica 2026 慕尼黑开幕,兆易创新(GigaDevice)把一台由 GD32H77R 驱动的六轴协作机械臂搬进了展台:Cortex-M7 跑到 600MHz,绝对值编码器反馈加 EtherCAT 总线,协同六轴做联动控制。当"物理 AI"的叙事全部集中在 GPU 和大模型上时,展台上这台机械臂提醒了一件事:让机器真正动起来的,是一颗实时控制芯片。📌 全文 7 章 · 7 张图 · 一条主线:物理 AI 的下半场,控制层国产化正在悄悄提速。

嵌入式单片机实验室 485
上一篇: PhoneMe Advanced 浅度探索六----C特性和CVM
下一篇: PhoneMe Advanced 浅度探索四----性能
普通网友
普通网友 领域专家: 编程技术技术领域 领域专家: 编程技术技术领域
博客等级 码龄25年 2837粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值