- 博客(144)
- 资源 (2)
- 收藏
- 关注

原创 C# 图像灰化处理方法及速度对比
第二种方法,使用托管内存来直接操作图像数据,速度速度较第一种方法快约30倍,非常明显,但是要根据不同的图片像素格式来处理数据,相对比较麻烦一些,兼容性不好。图像处理过程中,比较常见的灰化处理,将彩色图像处理为黑白图像,以便后续的其他处理工作。第三种方式,直接使用指针来操作内存,得到最快的速度(相比托管内存操作方式略快)。
2023-10-12 16:22:25
604
2

原创 在嵌入式系统高效实现软定时器-STOpen软件定时器
在中低端MCU中,定时器的资源有限,经常会使用起来入不敷出,捉襟见肘。而且有时候不同的场景需要的定时时间不同,操作比较麻烦。比如我们常见的按键扫描,灯闪烁,屏幕闪烁,延时退出等但是我们对这些需求进行仔细分析,基本上都会有如下特点:定时间隔较长(不是us级别),准确度要求不高(相差ms级基本无影响),有一次性定时的,也有循环定时的。针对这种需求,我们在STOpen实现了一组软件定时器,配合消...
2020-03-22 18:02:15
673

原创 一个用于嵌入式开发的简单可靠的消息系统-STOpen消息系统
在一般中低端的嵌入式系统里面,程序要么是跑大循环,要么是跑一个简单的操作系统(比如ucos,rtthread,freertos等等),简单和效率是第一要素,毕竟系统硬件资源有限。要在这方寸之间,施展十八般武艺,实属具有一定的挑战性。我们实现了一个简单的类windows的消息系统,让所有的操作都采用消息的机制来传递信息,把模块之间的耦合度降低到最低,并且让程序事务处理起来特别简单,层次分明,逻辑...
2020-03-21 21:59:35
1336
1
原创 DALI DT6与DALI DT8介绍
摘要: DALI协议中的DT6(Device Type 6)和DT8(Device Type 8)分别代表单通道调光LED驱动器和多通道调色温/颜色控制装置。DT6适用于基本调光场景(如办公室、住宅),每个通道需独立地址;DT8支持双/多通道控制(色温或RGB),单个地址即可管理,适合酒店、剧院等需复杂调光的场景。主要区别在于控制类型、地址需求及功能复杂度,DT8提供更高级的照明动态调节能力。(150字)
2025-05-30 18:20:21
318
原创 [MH22D3开发笔记]1. 变量地址对齐,宏__ALIGNED的使用
在将某GUI移植到迅龙3号开发板时,遇到了动态内存分配问题。首次编译运行良好,但修改编译选项为-O0后,程序崩溃。调试发现内存对齐检查失败,原因是uint8_t类型的数组未按4字节对齐。通过使用宏__ALIGNED(4)强制对齐,但编译报错。进一步调查发现,__ALIGNED宏定义在cmsis_armclang.h中,需在数组定义前包含cmsis_compiler.h文件。最终编译运行成功,建议使用__ALIGNED宏以确保代码兼容性,避免直接使用编译器相关语法。
2025-05-22 16:55:31
288
原创 MH22D3开发高级UI应用,适配arm2d驱动
在资源有限的嵌入式系统上开发现代风格的UI应用,通常需要高算力和丰富的资源支持,但高成本的MCU和低端MCU的资源限制使得这一目标难以实现。兆讯公司推出的MH22D3芯片,基于Cortex-M3内核,主频高达216MHz,配备64KB SRAM和512KB Flash,为开发复杂UI应用提供了良好的硬件基础。结合ARM2D(一种高效的绘图和部分帧缓冲支持工具),可以在低成本MCU上实现流畅的UI效果。这一组合不仅提供了高性价比的解决方案,还为中小屏幕应用带来了新的可能性。更多详细信息可参考相关链接和开发板资
2025-05-15 20:45:49
709
原创 迅龙3号基于兆讯MH22D3适配CST328多点触摸驱动开发笔记
兆讯公司推出的MH22D3芯片,基于cortex-M3内核,主频216Mhz,配备64KB SRAM和512KB Flash,专为显示应用设计。新龙微基于此芯片开发了“迅龙3号”开发板,支持320x240分辨率的显示屏和5点触摸的电容TP,触摸屏采用海栎创CST328芯片。开发板提供了完整的驱动源代码,解决了CST328芯片在初始化、寄存器序号和数据读取中的问题,并比较了CST328与CST826系列的差异。文章还提供了开发板资料的下载链接,并强调了版权声明。
2025-05-13 12:03:49
527
原创 MH2103 MH22D3系列的JTAG/SWD复用功能和引脚映射,IO初始化的关键点
MH21xx和MH22xx内核集成了串行/JTAG调试接口(SWJ-DP)。这是标准的ARM CoreSight调试接口,包括JTAG-DP接口(5个引脚)和SW-DP接口(2个引脚)。● JTAG调试接口(JTAG-DP)为AHP-AP模块提供5针标准JTAG接口。● 串行调试接口(SW-DP)为AHP-AP模块提供2针(时钟+数据)接口。在SWJ-DP接口中,SW-DP接口的2个引脚和JTAG接口的5个引脚中的一些是复用的
2025-04-26 16:30:39
511
原创 在兆讯MH2103,MH22D3系列上microlib和标准库的选择及对比
MH21xx和MH22xx系列有较大的内存(最大96KB RAM)和FLASH容量(最大1MB),最高主频达216M,非常适合用来做显示类应用加速。至此,我们就可以再不使用Microlib的情况下,发挥编译器优化的最佳性能。
2025-04-23 10:13:38
566
原创 兆讯MH22D3-新一代显控应用性价比之王
MH22D3xxxx 是一款高性能、增强型 32 位 ARM® Cortex®-M3 核心微控制器,专为满足复杂嵌入式系统的需求而设计。它集成了丰富的外设和高级功能,适用于多种应用场景,包括工业控制、智能仪表、物联网设备,家电显示,智慧屏等。14 个通信接口,包括 I2C、USART、UART、SPI、QSPI、LCD、CAN 和 USB。2 个 12 位模数转换器(ADC),支持最多 16 个输入通道,最快 2M 采样速率。13 个定时器,包括 2 个高级控制定时器,支持 PWM 和电机控制。
2025-04-21 22:02:53
414
原创 MH2103系列coremark1.0跑分数据和优化,及基于arm2d的优化应用
它旨在替代陈旧的 Dhrystone 标准(Dhrystone 容易受到各种libc不同库的影响),成为工业界衡量处理器性能的新标准。视频为arm2d运行在MH2103的实际效果,320x240的分辨率,各种圆弧绘制,效果,图像旋转等都有较好的效果,充分说明了这颗高主频(216M,cortex-M3内核)的芯片在现实应用方面的强劲能力。但是对比两次运行结果,AC6相较于AC5编译器,成绩提升约15%,还是非常明显,所以建议后续开发的时候,切换到AC6编译器来,以最大化的发挥该息芯片的性能。
2025-04-21 21:49:25
433
原创 doxygen自动生成文档,注释容易错位的补充
按照相关说明,安装好doxygen,进行简单的配置后,就很可以立即使用了。如果注释是放到和变量同一个行,则需要在标记“/**”后增加符号"<“。如此一来,生成的文件描述才和变量一对一对应。最后生成的效果就和预想的一致。dt后面要有一个空格。
2025-04-09 22:26:18
264
原创 兆讯MH2103系列pin to pin替代STM32F103,并且性能超越
MH2103 是一款高性能的 32 位微控制器,由兆讯恒达推出,主要用于替代 STM32F103 系列产品。MH2103 系列凭借其高性能、低功耗和丰富的外设接口,成为理想的通用微控制器选择,适用于多种工业和消费类应用场景。其高达216M的主频和96KB的内存,非常适合做显示类的应用产品,具有极高的性价比。
2025-04-09 14:43:20
491
原创 在MDK新版本中添加AC5编译器支持
深圳市新龙微电子科技有限责任公司在使用兆讯芯片开发相关产品的时候,进行了大量的适合批量化的代码改进和工具完善(下载,升级,图片处理,压缩,资源生成等),为客户提供定制化的产品开发,提供优化后的二次开发SDK,加速产品应用。项目开发,芯片购买,技术交流联系:1356072三一四一(微信同号)从 Keil MDK 5.37 版本开始,AC5(ARM Compiler 5)编译器不再默认安装,需要用户手动安装。编译工程,如果编译成功,说明 AC5 编译器已正确安装并配置。
2025-04-07 22:09:17
1024
原创 在MH2103上如何将usb cdc类虚拟出来的串口在Windows上使用固定串口号
但是官方usb cdc使用了默认的实现方式,每一个板子接入Windows系统的时候,都会出现一个新的串口号,这样子在批量升级或者下载资源的时候,随着板子的接入增多,串口号就会从com2一直飙升下去,直到com98,com99等等,在使用串口工具选择串口的时候非常麻烦,而且也容易和其他串口混淆(因为每一次接入一块新的板子的时候,串口号都不一样)。比如第一次接入Windows系统分配的是串口号10,以后这个类型的板子接入系统都是串口号10,那这样一来我所有的板子升级的时候就比较舒服了。最终完成我们的初始需求。
2025-04-07 18:18:26
270
原创 [ARM-2D 专题]6.脏矩形定义的宏使用技巧和分析
要使用这个功能,我们必须指出当前画面中的那些区域是需要更新的(第一次刷新除外),也就是定义好脏矩形,从而接下来的相关API在绘制图形的时候,才会对区域进行剪切,通过一些列复杂的计算,得到最终需要绘制的区域。这段代码的意思就是将素组的第一个arm_2d_region_list_item_t元素的ptNext指针,指向了该数组的第二个元素的其实地址,形成一个单向链表,同时,将tRegion按照传入的参数初始化。好啦,了解了上面的硬核知识,后,上面的定义我们进一步展开就得到如下代码(假定编译到这里的此时此刻,
2024-11-11 17:34:20
1059
原创 [ARM-2D 专题]5 MDK编译器一个旧版本-Ofast优化bug的问题及解决办法
以前使用microlib库编译,运行良好,所以也没有在意问题,现在使用arm-2d,不使用microlib编译,运行,读数据错误了。最近开始大量基于ARM-2D开发应用项目,为了达到最佳性能,我们使用了编译器的许多特殊技能,其中就包含了-Ofast优化,很不幸,一不小心踩坑了。还是这一段代码,其他配置一样,编译,链接,下载,测试。编译器的坑,很难对付,我们理解一下编译器的行为,站在编译器的角度去思考问题,平时写出更优质的代码,才能完全防止这种情况的发生。使用的MDK版本5.36,编译器6.16。
2024-10-26 12:07:15
1135
原创 [ARM-2D 专题]4. 快速搭建ARM2D的PC仿真开发环境及避坑手法
有几种情况你需要使用pc仿真开发环境:文章原创,欢迎转载,请注明出处,未经书面允许,不得用于商业用途。
2024-10-25 09:52:21
1061
原创 git 更新LingDongGui问题解决
oh,看起来和超时与网络有关,由于arm-2d是托管到github上的。众所周知的原因,我们访问github的网速那不是一个“爽”字了得,好了,魔高一尺道高一丈,我们打开加速器(自行百度)在试一次?灵动简化了直接使用arm-2d开发ui的工作,提供了诸多控件,作者在不停的更新,和arm-2d保持同步。而且也能够直接使用arm-2d混合编程,方便有个性需求的小伙伴手撸代码。经过漫长的等待,终于完成clone下来了,在如此恶劣的大环境下,要学点东西,实属不易啊。oh,my god,以外发生了。
2024-09-13 16:29:18
1049
1
原创 PADS设计:从库中更新已经用于设计的器件封装
在使用过程中,发现某个封装设计有缺陷,需要修正,修正后的结果除了用于当前设计以外,还希望更新库元件,以后其他设计也同时使用新的封装。要完成这个需求,我们可以先进入库管理,将元件的的封装修改完成后保存,以后其他网表导入新设计的时候,自然会使用最新的设计库封装。操作方法:选择要修改的器件,右键弹出菜单,选择“编辑封装”,进入封装编辑器,修改完成后退出,根据提示进行选择即可。针对这个器件的封装直接进行编辑,并且将修改应用于该器件,完成单独器件或者同类器件的修改。
2024-08-01 10:33:39
1465
原创 [物联网专题] RS485继电器输出之Modbus控制流程和时间优化分析
由于继电器属于机械触点,所以在吸合过程中不可避免的会产生机械整栋,是输出过程出现一个开关的往复动作,经过一个时间后才会稳定下来(这个和机械按键的抖动类似)。
2024-07-27 11:58:25
1279
原创 pads layout 脚本导出不能运行excle解决办法
导致上述问题的原因是在我们配置导出带坐标的脚本时,默认使用的是微软的Excel工具,而电脑上安装的却是WPS或者破解问题,所以就会出现上述所示的错误。
2024-07-02 21:42:44
1283
2
原创 [物联网专题] - 螺钉式接线端子的选择和辨识
级联方式如下:每一个端子一边是凸台,一边是凹槽,可以互相插入,组成更多位数的端子。这样端子与端子之间形成物理连接,更稳固,有效的避免两位端子的缺点(容易摇晃)。在设计pcb封装的时候,孔的尺寸一般设计为1.1-1.2mm较合适,能适应端子尺寸和装配的误差,也方便焊锡浸入内孔,增强导电性能。标准端子一般是2位(2个接线端子),端子与端子之间可以级联,组成任意数量的位数。端子的标准尺寸如下图:pin间距一边为标准的5.08mm,pin直径为0.9mm。端子按照材质不同,一般分为三种类型:全铜,半铜,铁。
2024-06-25 11:45:09
990
原创 华芯微特SWM34-使用定时器捕获快速解码EV1527编码
在无线应用领域,很多433Mhz和315Mhz的遥控器,红外探测器,门磁报警器,无线门铃等都使用EV1527编码格式来发射数据。发射和接收均有对应的RF芯片完成,而且成本极低(目前市场价3毛钱不到)。
2024-06-24 22:44:39
1603
原创 [ARM-2D 专题]3. ##运算符
##运算符,也叫连接运算符(也称胶水运算符),预处理程序把出现在##两侧的参数合并成一个符号,通常用于宏参数的连接。
2024-06-17 22:22:49
539
原创 [ARM-2D 专题] 2. 逗号表达式
逗号表达式,是c语言中的逗号运算符,优先级别最低,它将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。(2) 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。要注意逗号运算符和函数参数分隔符(也是一个逗号)的区别。(表达式1,表达式2,表达式3,…(3) 逗号运算符的优先级别在所有运算符中最低。(1) 逗号表达式的运算过程为:从左往右。万丈高楼平地起,基础非常重要。
2024-06-17 21:04:08
269
原创 [ARM-2D 专题] 1.开始:基本工程搭建,编译和开发环境配置问题解决
要开始使用ARM-2D,前期两个准备工作需要完成: 1. 一块mcu内核为cortex-M的板子,带显示屏(彩色TFT屏,分辨率建议320x240或以上,带TP更佳)。 2. 基于这个板子可以正常运行的keil MDK的工程。
2024-05-29 11:04:18
573
原创 [ARM-2D 专题] arm-2d配套开发工具准备
arm-2d 提供了配套的图片转换工具img2c.py和字体转换工具ttf2c.py,工具用python语言编写,所以需要先安装python及其相关的支持包。没有特别要求的,安装软件选择所有用户可以使用。勾选上面所有的项目,特别是PIP是必须的,后面其他软件安装需要他。如上图选择管理员身份安装,并且将路径增加到环境变量,以便在任意地方执行python的命令。从python网站可以下载到最新的安装版本,根据你自己的电脑配置选择。好了,一路next,正常安装完成。
2024-05-29 10:38:19
319
原创 [ARM-2D 专题] arm-2d项目简介
2023年2月发布第一个正式版V1.1.1,近一年来快速迭代和功能增强,成为Cortex-M系列的一个重要软件组成部分,其参考和实用价值的意义及其重大。初始目标:物联网终端设备、白色家电、手持设备和可穿戴设备,尤其是资源受限且功耗要求低的设备。Arm-2D 是一个用于 Cortex-M 处理器上的 2.5D 图像处理的开源项目。由ARM公司开发和维护,属于官方性质的项目,目前最新版本为V1.1.6.2022年7月发布1.0的预览版,
2024-05-29 10:14:57
507
原创 pcb天线设计中的DRC网络错误检查解决方法(allegro,pads等均适用)
原因是我们的天线原理图设计的时候有两个引脚,一个是输入信号,一个是接地。但是通过我们制作的倒F天线后,在pcb设计的过程中,两个引脚走线在物理上总是会连接到一起,出现两个不同的网络连接到一起,出现DRC检查网络错误的问题。我们通过观察pcb的最终设计图,可以发现有一个引脚连接到输入信号,一个引脚会连接到GND,并且由于RF的走线限制,肯定是走直线连接的。在射频天线的pcb设计过程中,会经常用到pcb走线来制作天线,比如2.4G的倒F天线,可以大幅降低成本和提供制造的一致性,取得良好的设计质量和性价比。
2024-02-20 11:34:26
1749
原创 BLE MAP profile时间戳格式
顺便唠叨一下,看看该profile的贡献人列表,发现基本上是国际大公司的员工(博通,ti,三星,诺基亚,东芝,摩托罗拉,intel等等),一方面蓝牙协议在最先在相关公司实现,进而推广。在广大的以应用开发为主的中小型公司做技术开发工作,以用为主,更多的是去理解和学习别人的东西,用到实际的产品中去。如果你对更底层和基础的技术工作更感兴趣,那么选择公司的时候还是要以大型公司为主,才有机会参与相关的工作,做到“名留青史”。对应的profile文件详细的列出了消息的格式,编码,参考的其他文档等内容。
2024-01-03 16:09:00
692
原创 C#之常见图形文件格式及其特点
PNG 文件可以存储每像素 8、24 或 48 位的颜色和每像素 1、2、4、8 或 16 位的灰度。PNG 文件还可以为每个像素存储一个 Alpha 值,该值指定该像素的颜色与背景色混合的程度,所以在相同分辨率的情况下,png的文件比jpg大很多。GIF 是网页上显示的图像的常用格式。与图像相关的信息(扫描仪制造商、主机、压缩类型、方向、每像素样本数等)可以存储在文件中,并使用标记进行排列。PNG 在 GIF 的基础上改进了其渐进式显示图像的能力(即,在图像通过网络连接到达时显示越来越好的近似图像)。
2023-10-12 10:22:20
623
原创 C语言的使用技巧--在IO操作中的移位和快速配置
他们的定义bit位置是经过精心的安排和计算的(比如不同的功能定义占用的bit位置不重叠,方便进行移位运算,和对应的寄存器的操作有一一的对应关系),以便于后续代码设计和简化代码的操作。通过前面这一条代码的操作,屏蔽了不需要操作的gpio配置位(也就是说关闭了对无关gpio的bit写的作用),比如你本次只是操作gpio0,这条代码就会把对gpio1-15的操作屏蔽,以后写其他配置寄存器(比如前面的MODER寄存器),就只有gpio0对应的bit起作用,其他bit不会影响原来的值。
2023-08-16 10:43:27
469
1
原创 华芯微特SWM34-编译优化
但是,这个代码有一个问题,如果我们使用keil()或者其他编译器)的时候,开了优化(非默认和-O0),此段代码会被编译器优化掉,不会起作用(不会运行,因为编译器发现此代码没有动作)。在开发过程中,经常会出现代码bug,导致各种死机问题,比较多的就是非法地址访问,导致出现硬件错误(HardFault)的中断。出现这种问题后,使用调试器再次连接,很难连接上cpu,需要使用工具,进行ISP擦除,开发非常不方便。此代码的原理,就是在启动阶段,延时一会,在程序跑飞之前,使调试器能够有机会连接上去。
2023-07-16 20:44:49
521
原创 华芯微特SWM34-IO速度优化之模拟SPI写速度提速
由于编译器的优化(而且一定要开优化(O1以上),速度才会快,开与不开大约相差3倍),从低电平到高电平之间的时间似乎并没有完全和代码一致,但是宽度已经变成14ns了,已经能基本满足我们的需求了。,请记住我们用的是32bit mcu,代码中的i,spidat两个变量是采用8bit定义的,习惯了单片机的内存紧张,尽量用最小单位来定义了。这个优化我们很容易忽略,因为spi传输8bit数据的时候,我们是msb在前,要先判断最高位,惯性的就用了8bit来表示数据,,在代码中,用32bit也是一样的效果。
2023-06-30 17:33:23
900
原创 LVGL-最新版本及其版本定义标准
lvgl的最新版本是9.0.0,处于开发分支中。建议一般开发使用稳定版8.3.0..\lvgl.h定义了当前版本。稳定版本是8.3.0.
2023-05-25 08:00:00
4412
原创 华芯微特SWM34-IO速度优化
答案是有,查询了一下手册,居然有一个不太注意的地方是可以的,操作虽然和st等其他类似芯片的有差异,但是结果是一致的。测试优化后的数据,io最高速度已经能到接近30Mhz(我这个是连续输出8bit,有判断语句,非纯粹翻转速度,也是大多应用的情况),估计这也是极限了。查阅datasheet发现有相关的描述,可以做位操作,虽然和用习惯了的st系列比起来有点不一样,但是结果一样。速度大约5Mhz,主要是因为函数调用开销和函数内部的移位和异或操作,增加了指令的运行数量。2 去掉调用开销,优化操作。
2023-05-24 17:31:16
1169
原创 LVGL- 颜色转换系统和相关宏的使用技巧
因为lvgl是一个通用的可以适配不同颜色深度像素的gui系统,要做到最大化,最简单的兼容这些系统,让用户无感,对应用代码不产生影响,具有最大的移植性,这是非常必要的。系统编译的时候就可以自动根据配置信息来选择合适的目标颜色系统,完成对应的操作。看完这一系列“眼花缭乱”的转换,替换后,你也许在嘀咕,简单的赋值不是更好吗,搞得这么“花里胡哨”的,有必要吗?其中有一个很关键的函数,转换r,g,b显示像素到对应的目标显示器的格式,使用这个函数来适配不同的目标设备。我可以很负责人的告诉你,很有必要。
2023-05-19 13:59:59
4412
9
蓝牙串口profile_BLE spp profile
2022-04-02
蓝牙BLE电池服务profile中文版本
2022-03-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人