- 博客(80)
- 资源 (3)
- 收藏
- 关注
原创 lv_binding_js 两端函数调用全链路解析
第 4 层:C 桥接层(text_wrap.cpp 第 15-27 行)第 5 层:C++ Text 类(text.cpp 第 17-19 行)第 3 层:JS 包装层处理。第 1 层:用户写的 JSX。第 6 层:LVGL C 库。
2026-06-09 20:01:26
63
原创 lv_binding_js 代码解读
如果要新增一个组件应该怎么办呢?创建 xxx_wrap.cpp,模仿 view_wrap.cpp 的模式定义宏展开 + 方法列表 + Constructor + Finalizer + Init 函数在 component.cpp 的 NativeComponentInit() 中添加调用在 JS 端创建 XxxComp extends NativeXxx 并调用 registerComponent()
2026-06-09 19:24:32
271
原创 实战踩坑:Gerrit HTTP 克隆失败解决方案
路由优先级:在Nginx中,正则匹配的优先级高于通用前缀匹配location /。利用这一特性,我们可以完美剥离Git流量。不仅仅是/a/:除了带认证的/a/和工具路径/tools/,还要把不带/a/的匿名克隆路径(如/p//info/refs)也一并对Nginx释放。否则,团队成员在拉取公开项目或未登录克隆时,依然会被Nginx的弹窗拦截。协议优化:由于Git传输大文件是流式数据,配置并清除Connection头,能有效维持持久连接,规避RPC failed;错误。
2026-06-04 13:48:50
252
原创 从零开始在 Linux 上编译运行 lvgljs 图形界面项目
lvgljs 是一个用 JavaScript/React 语法操作 LVGL(轻量级通用图形库)的开源项目。它将 LVGL 的 C 语言 UI 组件封装成了类似 React 的组件化接口,开发者可以用 JSX 编写嵌入式 UI,渲染到 SDL2 模拟器或真实的嵌入式设备上。技术栈:JavaScript 运行时:txiki.js(基于 QuickJS + libuv + curl)图形引擎:LVGL(嵌入式 GUI 库)前端框架。
2026-05-29 12:28:47
386
原创 聊聊如何纯手搓一个完美的“全屏页面指示器”
摘要: 在AI生成代码盛行的时代,精细UI仍需"手搓"实现。本文探讨一个全屏页面指示器开发案例,需满足动态数量、固定间隔、完美撑满屏幕三大要求。通过数学建模分析屏幕宽度与指示器数量的整除问题,提出"基础宽度取整+余数分配"的解决方案,确保像素级对齐。代码实现中,计算基础宽度后,将余数均匀分配给前N个指示器(各+1px),解决了屏幕适配的精度问题。文章强调,优秀开发需平衡设计理想与实现细节,用算法弥补像素级误差,体现开发者的技术匠心。
2026-05-21 20:26:16
254
原创 纯手写边缘检测算法
由于要在开发板上实现一些基础的图像处理算法,本想着直接使用opencv,怎奈何移植后占用空间太大,放弃了这个想法。于是乎自己手lu图像处理算法代码,顺便复习一下数字图像处理的相关知识。
2024-04-26 10:30:11
391
1
原创 LVGL界面卡顿优化总结
前面移植了lvgl到全志r528平台(Linux),但是运行起来界面有些卡顿,当遇到页面切换时帧率能下降到个位数。为此,我查阅了大量资料,咨询了方案厂商,总结出一些优化方案。注意这是针对Linux平台下的优化。
2023-11-22 09:21:17
9589
7
原创 嵌入式Linux人脸检测libfacedetection
如果编译出来的so文件太大,可以考虑根据自己的需求裁剪部分功能。将以下so文件推送到板子上,如遇到版本号不对可以建立对应软连接。如果遇到找不到库的话-l -L 也添加上。将编译出来的so文件放入交叉编译工具链的。依赖的库全是NO,开启为YES需要依赖。编译完成发现无法调用摄像头,原来。发现编译不通过,根据提示修改。首先要交叉编译Opencv。推送到板子上,运行即可。环境变量添加好全志的。代码下载后 执行一下。文件夹下,头文件放入。
2023-08-25 11:17:10
664
原创 在Flutter应用内部实现分屏功能
这一次被要求实现屏幕上同时展示两个页面,并且两个页面的逻辑,功能互不影响,通俗一点讲就是在Flutter内部实现一个类似于分屏的功能,这可难不倒我。以上就是本期内容啦,如果你有其他的实现方法,欢迎留言一起讨论交流哦。
2023-08-21 17:25:34
2215
原创 Jenkins自动发送飞书消息
公司办公软件用的是飞书套壳,本文主要介绍如何通过飞书机器人发送Jenkins构建的进度和消息。本文给出了详细的shell脚本代码,实现了将Jenkins构建消息发送到飞书的功能。欢迎白嫖!!!
2023-08-17 11:26:31
2090
2
原创 嵌入式Linux的学习之初试uboot
因为uboot本身附带了众多开发板的配置文件(configs文件夹下),其中就包括树莓派,在u-boot文件夹下执行,如果你的板子是全新的,那就要自己在u-boot中适配添加配置以适配你的开发板,这个我们留到后面去讲。找教程的过程真的很艰辛啊,很多开发板以及配套教程都是面对初学者,花费大量篇幅去讲解Linux基础命令,文件结构,虚拟机安装过程,ftp,nfs等环境配置之类的。看上去东西也不多,像我如果有Linux,C,GUI开发基础的话,只需要学习下面嵌入式开发的2.3.两点即可。
2023-08-07 11:30:59
310
原创 Django入门
早就想入门后端了,自己倒是用过Flask,对于常规网站来说Django更完善一些。稍微学习下,能够做一些简单业务处理就好啦。跟着官方文档学习的,这里做一下记录。纯纯拿来用,不去研究原理与架构,无脑跟着做就行了!
2023-07-13 14:54:56
1098
原创 Flutter调用C语言(FFI方式)
重点讲一下SendPort传递消息吧,因为dart是线程隔离的,如果你在C语言侧起了新的的线程执行了一些任务并且想把结果传回dart,就要用到这个了。这里一定注意内存泄漏!在做嵌入式Linux时选用了Flutter做GUI,但是底层必然使用C写的,那么最终怎么交互呢?这里调研了FFI,FFI赋予了Dart语言调用.so动态链接库的能力。虽然项目后来采用了Dbus进行通信,还是记录下研究过程吧。这个方法应该是跟JNI非常相似的。
2023-07-10 14:00:55
1752
原创 LVGL展示网络图片
这样操作有一个问题就是文件保存以后再读取解码非常耗时,导致界面卡顿。于是想着进一步优化步骤,在不保存文件的情况下从内存中直接解码图片并展示出来。实际应用中已经进行了组件化的封装,不便展示,这里贴一部分最初的原始代码参考。时,有一个需求是需要在界面上展示网络图片。以上代码只是参考,还有很多不足之处:比如内存的申请和释放可以使用。上面展示一个给定的网络图片。免去文件存读以后速度快了很多,其中解码用。这个库,支持很多格式的图片,应该够用了。获取图片的操作应该放到子线程,避免阻塞。,如果不包含就要自己编译一下,
2023-06-30 10:14:05
2560
原创 opencv调用预训练模型
前言这篇文章主要讲一下opencv怎么调用已经训练好的模型。对于不懂tensorflow,只想调用tensorflow已经训练好模型的朋友来讲非常有用。下载链接:.configs文件下载.pb文件下载.pbtxt文件下载转换脚本下载:tf_text_graph_faster_rcnn.pytf_text_graph_mask_rcnn.pytf_text_graph_ssd.py...
2023-01-04 09:44:56
1111
2
原创 antd-mobile脚手架
前言还是为了备忘,记录一下自己利用Create-React-App脚手架搭建antd-mobile的开发环境安装npm install -g create-react-appcreate-react-app testcd testnppm start至此 react已经运行起来了然后引入 fastclick 不然在使用过程中会出现一些问题,在header添加如下代码 <meta name="viewport" content="width=device-width, initia
2023-01-04 09:41:27
1057
1
原创 Dbus的使用
最近在开发Linux应用时,需要用到跨进程通信,一番调研后决定使用Dbus。在此记录一下学习过程。的架构与优点在此就不展开介绍了,主要记录一下如何使用。不过它的作者还是推荐大家使用。我只想说,大佬您太谦虚了.是非常痛苦的,我们选择了。内部实现并不是最完美的。协议的一个实现参考。
2022-12-26 16:54:18
898
原创 LVGL自定义组件__页面指示器
LVGL对硬件的要求非常低,使用其自带的组件能够搭建出精美的界面,动效也很棒。但是如过移植到Linux平台下,开发稍微复杂的应用项目,那些组件就远远不够用了。为此需要自己自定义一些组件,以方便实用。为此,尝试开发了一个页面指示器,先看效果:circles.hcircles.c使用方法项目根目录下,新建文件夹,把上面的两个文件放进去修改:要使用时引入头文件可以使用自带的Demo快速预览,具体使用方法可以参考Demo函数配置参考demo函数初始化配置即可:由于刚刚上手lvgl
2022-12-06 10:08:03
2008
原创 Magisk搞机器记录(小米Mix3)
安装完以后打开可以看到是否有Ramdisk,如果有Ramdisk的话还好说,没有的话Magisk就只能劫持你的Recovery分区,这种设备每次想要可开启Magsik的话,必须重启到Rec,而且这类设备不可以使用第三方Rec安装或升级Magisk。笔者也是第一次玩,查阅了很多资料,如有错误的地方,还请大佬们指出来。Rec:默认的Rec只能恢复出厂设置,擦除数据等等,第三方Rec有刷入第三方Rom,第三方固件的功能。后面的步骤不记得了哈哈哈,参考网上其他教程吧,大家都写的很全面,懒得梳理和整理了。
2022-11-21 15:46:19
13384
转载 tkinter最小化至托盘
平常自己会用tkinter开发一些小工具,有的工具需要一致运行,这类程序还是隐藏到托盘比较好。于是上网搜索,了解了下如何将开发tkinter的最小化到托盘的程序。这里做下记录,方便使用。前提是要有以下代码,直接复制下来保存即可。以使用为目的,就不过多的讲解实现代码啦。:根据传入的菜单和回调渲染托盘图标的右键菜单,设置菜单回调;同时还封装了弹Window消息,和退出回调。方便实现自己想要的功能。:测试Demo主程序程序持续后台运行的话,需要将 函数放在单独的线程中进行使用。两个文件放在同一文件夹下即可:
2022-09-19 16:39:37
3104
3
原创 安装Windows Subsystem for Linux并配置图形化界面
找到对应系统对应版本复制下来,替换掉 /etc/apt/source.list 中的内容即可。公司不可以安装破解软件,直接用windows的Linux子系统叭。最近要转Linux开发了哈,开始学习喽。等待下载安装完成,在弹窗中设置用户名密码就可以了。
2022-09-14 09:27:55
3061
原创 Bloc入门之Bloc详解
Bloc 和 Cubits 都会忽略重复的状态,也就是说如果currentState与nextState一致,则本次状态变化会被忽略。Bloc 不可以直接发出状态,所有状态都应该是通过EventHandler函数发出的。类里面重写方法来观察状态,也可以和之前一样也可以通过将观察部分单独写在。时,只需要定义状态以及我们想要公开的改变状态的函数。可以查看什么事件引发了状态改变。时,必须定义状态、事件和。各自的优势,以便按需使用。从上面两图可以看出,在使用。能够控制和转换事件的传入流。本地的方法,然后再触发。..
2022-08-17 13:23:33
1035
原创 autojs脚本备忘
本文仅记录一些笔者实践中摸索出来的开发方法,包括部分品牌手机的自动解锁,远程控制,一键熄屏,及利用QQ小号进行远程控制指令的下发等,更具体的开发请参看官网原文档无密码上滑解锁有密码,亮屏密码解锁锁屏没有root,无法模拟。替代方案:通过华为自带的一键锁屏这个应用熄屏读取通知可以注册回调函数,比如收到qq消息后执行某些脚本,可以用这个特点在手机挂一个QQ小号来做远程控制。当然也可以通过后台实现此功能,只不过这样开发更快一些。......
2022-07-09 10:09:06
705
原创 Bloc入门之Cubit详解
前面学写了一些基础的开发知识,但是对于项目的整体架构以及开发模式并没有进行一个系统的学习,经过上网查询,发现目前很多项目采用了Bloc(业务该逻辑组件)这种开发模式,下面就找到了该库的官网首先对于熟悉的同学可以忽略此部分,的新特性里面也有流这部分内容。新建一个文件,输入以下内容,简单了解以下流这个类型 :预热以后,开始上手,安装库在根文件夹里面新建一个文件pubspec.yaml并输入以下内容执行 下载库开始上手这是偷来官网的图:定义一个CounterCubit添加输出状
2022-06-22 16:15:05
1494
原创 一文教你利用OpenWrt外挂网卡,共享校园WiFi,远程ADB调试手机
背景改装了一个小米路由器小米R3G,要知道路由器的系统本身就是基于Linux。本文还是以实用为主:编写开机启动脚本,登录校园网共享WiFi安装ADB调试工具,实现远程控制手机包管理工具Openwrt 使用okpg包管理工具可以执行以下代码更新或者安装一些软件包:opkg updateopkg install XXXopkg remove XXX外挂网卡安装usb驱动及usb网卡驱动opkg update opkg install XXX需要安装的包如下:rt2800-us
2022-05-10 20:06:54
9516
3
原创 Android WebView中使用React
背景本人工作中日常使用React开发H5页面较多,最近有需要写一个安卓App,于是简单学习了一下安卓的基础。本文将介绍如何在安卓WebView中嵌入React页面,快速搭建一个安卓应用。本文适合那些想快速搭建一个安卓APP的H5开发。本文还包括页面通过JavaScript与原生交互的简单例子。React本文默认你是一个比较熟悉React的前端开发。如不熟悉可以参考React官方的QuickStart。创建完成后执行npm run build打包,工程目录下面将生成build文件夹,打开build下的
2022-04-09 13:43:44
4384
5
原创 在NPM发布一个React组件
前言在前端开发过程中,组件往往是可以复用的,如果没有封装成package的话,就需要从一个项目拷贝到另一个项目,操作比较麻烦。如果发布成package,每次项目用的时候,就只需要安装一下package,非常方便,那么我们自己如何创建一个React组件并发布呢?本文就来学习一下。实战本次就以一个按钮为例,进行实战操作新建一个react项目安装脚手架,并用脚手架创建一个react项目npm install -g create-react-app create-react-app floatbut
2021-12-08 15:57:24
1574
1
原创 Flutter数据持久化
前言欢迎阅读Flutter系列教程,本文讲解Flutter的数据持久化。主要分三块内容:1.使用Sqlite2.读写文件3.存储键值对Sqlite的使用如果你的APP需要经常在本地存储查询大量数据,就选择数据库。通常使用数据库来进行数据的增删改查比其他数据持久化方案速度更快。Flutter里面可以通过sqflite插件来操作Sqlite。sqlite简介如果你用过数据库,可以略过此部分,使用时留意一下代码语法就行。实战首先要添加依赖,在pubspec.yaml文件里添加,添加完以后
2021-12-02 15:35:55
4269
原创 Flutter路由及传参
前言一个APP往往是由很多个页面组成的,单独的一个页面在安卓里面称为Activity,IOS称为ViewController,在Flutter里面仅仅是一个Widget。本文讲解Flutter的路由,Flutter内的路由组件有Navigator 和Router 。简单的可以用Navigator,更复杂的可以用Router。主要学习两个页面之间的跳转和传参,以及跨屏动画。简单路由在Flutter中,Navigator维护了一个堆栈,用来管理页面路由。可以通过Navigator.push()和Navig
2021-12-01 16:42:16
5771
原创 Flutter组件状态管理的三种方法
前言前面讲了Flutter布局,布局只是静态的。在Flutter中,组件分为StatelesslWidget和StatefulWidget。StatelesslWidget没有状态,是一成不变的。比如图标,文字,按钮等StatefulWidget有状态的组件,页面数据是动态的,或者会随着用户操作变化,比如多选框,文本输入框等。有状态组件重点来了,如何使用实现一个有状态的组件呢?有状态的组件一般由两个类构成,一个StatefulWidget子类和一个State子类.State类包含了组
2021-11-30 09:31:16
2309
原创 一文读懂Flutter布局原则——‘约束下降,尺寸上升’
前言上一篇简单学习了flutter开发与调试,先学习Flutter布局。Flutter布局依赖于很多特定的布局对象。本片对常用的布局对象进行讲解和使用。要理解一句话Constraints go down. Sizes go up. Parent sets position.谷歌翻译为约束下降,尺寸上升,名称功能...
2021-11-29 13:53:58
1014
flutter初学者教程 flutter路由-入门代码
2021-12-01
color_change.zip
2020-03-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅