- 博客(73)
- 资源 (13)
- 收藏
- 关注
原创 【随笔记】两种方式实现时间测量功能
方式一:使用 Linux 的函数实现(局限 unix/linux)方式二:使用 C++ 标准库函数实现,跨平台更好。
2024-11-17 12:11:26
154
原创 【随笔记】C++ condition_variable 陷阱
这种问题只有在系统时间发生变化的时候才会出现,例如搭配 NTP 更新功能,硬件还未同步时间时,一般在 1993 年,此时使用了 wait_for() 这类接口等待 10 秒,结果在 10 秒内被 ntp 同步更新了时间到 2023,那么时间生效的一瞬间,wait_for() 就会直接被唤醒,且返回的结果是超时唤醒。通过 std::condition_variable 来实现超时等待,会受到系统时间变化的影响,系统时间倒退修改就会导致延后唤醒,系统时间提前将会导致提前被唤醒,返回结果仍为超时。
2023-09-30 23:14:19
1406
6
原创 【随笔记】Linux/Win 平台调用外部命令并获取执行结果
有些命令输出结果并不是通过 ”标准输出“,而是通过 "错误输出",因此为了能获取到所有的执行结果,需要将 "错误输出" 重定向 "标准输出"。
2023-08-05 17:18:09
402
原创 【分析笔记】全志 T507 PF4 引脚无法被正常设置为中断模式的问题分析
全志原厂提供的 SoCs pinctrl driver 中的 PG4 中断信息描述错误,导致覆盖了 PF4 的引脚编号,因此只要修正 PG4 的描述信息,即可解决问题。这个问题不仅仅会影响 PF4 无法使用,也会影响 PG4 引脚无法使用,从代码来看,想要设置为 PG4 为中断模式,实际修改的会 PA0(0)。
2023-05-20 16:18:12
848
原创 【分析笔记】Linux 4.9 单总线驱动框架分析
本文主要是基于 T507 Android 10 Linux 4.9 的源代码,对 Linux W1 总线框架的分析记录,便于了解整个框架的基本实现机制。
2023-02-04 00:43:36
970
原创 【随笔记】T507 Android10 EC200U-CN 4G Cat1 移植
一个 USB 设备可以有多个功能不同的接口,在 option_ids 添加该设备的 PID\VID 后,会导致该设备的所有接口都会绑定到 USB Serial Option 驱动上,导致 USBNet 驱动接口无法正常工作,因此需要在 option_probe 中根据类码、接口索引、端点数量、子类码将 USBNet 的接口排除出来。这里使用 ECM 的驱动方式,参考《Quectel_UMTS_LTE_5G_Linux_USB_Driver_User_Guide_V3.0.pdf》
2022-12-30 22:13:37
1341
原创 【分析笔记】全志 i2c-sunxi.c 控制器驱动分析
由 Soc 芯片原厂提供,通常 Soc 支持多少路 I2C 总线,就会有多少个硬件控制器,这些硬件控制器才是真正实现与外设芯片通信的地方。我们也可以通过 GPIO 模拟 I2C 时序来实现一个硬件适配器,对于设备驱动来说,它不需要关心 Soc 是通过何种方式产生通信时序来跟外设芯片通信的。
2022-11-28 20:33:06
2200
原创 【分析笔记】Linux 4.9 backlight 子系统分析
1. 对上,面对应用层提供统一的设备节点入口2. 同级,面对驱动层提供设备驱动加载卸载通知事件,以及背光控制接口。3. 对下,面对硬件层提供背光控制调节的回调接口4. 监听 frambuffer 事件, 实现清屏联动背光控制5. 监听系统休眠唤醒,实现休眠唤醒背光联动控制
2022-11-17 22:20:27
1798
原创 【随笔记】FRAM 铁电随机存储器(MB85RC04VPNF)
第一次接触这种 FRAM 铁电随机存储芯片,发现有几点有意思的知识点,顺带记录一下,数据读写的操作就没啥记录的了。
2022-11-08 21:18:12
1676
2
原创 【随笔记】ATECC608 加密芯片调试记录
编译库文件的版本只需要最低 cmake 2.6.4 版本,但是测试程序最低 cmake 3.10。建立新的配置文件,指定编译工具链的位置:xxx_linux_toolchain.cmake。根据芯片手册,ATECC608B 的 7bit 器件地址是:0x35。大多数加密芯片都是由原厂提供库文件,便于降低开发难度。官网下载:CryptoAuthLib。
2022-11-04 20:25:20
1012
1
原创 【分析笔记】Linux I2C-Tools 使用踩坑笔记
在调试 I2C 器件时,我一般习惯于使用 i2cdetect 工具来确认芯片是否有应答,通常有应答之后,就会开始着手移植或者编写对应的驱动程序,但是在调试 sgp41 传感器时却不灵了。
2022-10-10 20:44:37
4721
2
原创 【分析笔记】全志平台 TWI 上拉电压异常的问题
原本这么简单的芯片,没有必要做记录,后来发现其中有一颗单独挂在 TWI2 无法通信,而主要原因是最容易忽视的电源域的问题,因此记录一下这件事情。
2022-09-17 11:53:31
767
原创 【分析笔记】Linux gpio_wdt.c 看门狗设备驱动源码分析
驱动将喂狗时间分为硬件喂狗时间和软件喂狗时间,很好的解决了软硬件时间的耦合问题,对上提供一个统一的喂狗时间,不受硬件芯片的实际喂狗时间限制,应用软件设计时不需要考虑底层采用了什么硬件。
2022-09-17 10:09:50
1841
原创 【分析笔记】全志平台 gpio_wdt 驱动应用和 stack crash 解决
第一次遇到看门狗芯片是通过切换电平信号来喂狗,如 SGM706 芯片,之前也比较少会用到看门狗芯片。原本打算参考 sunxi-wdt.c 的框架,利用定时器自己写一个,无意中发现内核已经有 gpio_wdt.c 驱动程序,其原理也是通过内核定时器实现喂狗,可以直接拿来用。配置选项说明:linux-4.9\Documentation\devicetree\bindings\watchdog\gpio_wdt.txt。全志平台便捷方式配置,也可以使用通用的 dts 配置方式。内核版本:Linux 4.9。
2022-09-17 09:21:32
1059
原创 【分析笔记】全志平台 gpio-keys 驱动应用和 stack crash 解决
全志平台 gpio_keys 驱动应用和 Stack Crash 解决。
2022-09-09 22:03:47
1113
原创 【随笔记】Tina 系统的 ADB、声卡、网卡、串口多路共存
USB 声卡、USB 网卡、ADB 三者共存USB 声卡、USB 串口、ADB 三者共存
2022-05-24 20:06:32
1426
原创 【随笔记】linux usb gadget ncm wrong ndp sign 问题修复
一、模拟网卡简介在 Linux 通过 usb 模拟网卡时,有四种方式:1. 使用 usb gadget rndis2. 使用 usb gadget ecm3. 使用 usb gadget ncm4. 使用 usb gadget eemrndis:是微软公司制定的协议规范, 不过似乎规范不完整, 引起 rndis host 驱动作者的强烈反对。lichee\linux-4.9\drivers\net\usb\rndis_host.cecm:传输的是纯粹的以太网包,一次USB传输只
2022-05-24 20:02:59
1996
3
原创 【开源】libserial_protocol:适用于单片机的串口通信协议基础库
借助五一假期,写了一个适用于单片机平台下的串口通信协议基础库。特点如下:不涉及到具体硬件,libserial_protocol 纯软件协议,与具体硬件分离。 内存空间占用可控,libserial_protocol 支持动静态内存,内存空间可控。 接口简单容易复用,libserial_protocol 采用面向对象方式实现,提供大小数据量解码方式。源码仓库:gitee:libserial_protocol: 适用于单片机的串口通信协议基础库github:https://github...
2022-05-02 16:27:32
1974
原创 【SW】利用3D打印机打印 PCB 钢网的方法
近期在学习画 PCB,每次打样回来后,手工焊接费时费力,定制钢网未免太过浪费,想到自己有一台 FDM 3D 打印机,是不是可以通过 3D 打印机打印 "钢网" 呢?在网上也翻过相关的资料,发现有网友已经实现,不过过程较为繁琐,且还需要对细节进行修改。如果焊盘数量很多,岂不是要花更多时间在修修补补上?经过一下午的摸索,总结出一套行之有效的方法,只要按照步骤来,不需要修修补补就能完完整整建立钢网模型。(在此特别感谢我媳妇大人在 AI 软件使用上的指点)本文以PADS 为例,其它的软件只要能输出 P.
2022-05-02 13:55:45
3068
1
原创 【随笔记】Littlevgl 8.x 踩过的坑
在多线程并发使用的时候,总是在运行过程中莫名其妙的 crash,后面才意识到 LVGL 本身不支持并发,加了互斥锁解决了。在引入矢量字库时(freetype),又有启动时会概率性 crash 的问题,每次 crash 的地方还不一样,这个坑爬了好久,甚至都怀疑是不是 freetype 有问题,还好总算找到方法解决了,不过还不清楚具体原因,先记录。以下以 linux 平台下 C++ 语言的方式举例说明,理解方法即可。一、多线程并发使用多线程并发使用时,需要在以下两种情况加上互斥锁:1. .
2022-04-14 00:00:45
5008
1
原创 【学习笔记】一种特别有意思的 RTOS 任务切换方法
前段时间朋友向我推荐了一款非常精巧的 OS (cocoOS),无意中发现其内部实现的任务切换机制特别地有意思,竟然未涉及到 CPU 的寄存器,纯靠 C 语言的语法实现任务切换。这就意味着很容易地跨平台使用,除了需要提供时基以外,几乎不需要做任何改动即可投入使用,这着实让我惊奇不已。
2022-04-08 00:45:48
2453
原创 【分析笔记】LVGL v8.2.0 使用 freetype 概率性无显示的问题
使用目前最新的 Releases 版本 LVGL v8.2.0 ,移植好 freetype2 后测试,发现每次启动程序时会高概率出现屏幕显示全白色背景,无任何内容的问题。打开日志开关,出现问题时会有如下打印:lv_font_get_glyph_bitmap: Asserted at expression: font_p != NULL (NULL pointer) (in lv_font.c line #51)Lvgl 检测到了 font_p 参数为空指针,根据日志信息指引,出现
2022-03-22 12:15:39
4080
8
原创 【随笔记】NDK 编译开源库 SQLite3
一、下载源代码wget https://github.com/sqlite/sqlite/archive/refs/tags/version-3.38.0.tar.gztar -zxvf version-3.38.0.tar.gz二、编译配置脚本#!/bin/bashexport TOOLCHAIN=/opt/ndk/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64export CC="$TOOLCHAIN"/bin/arm
2022-03-09 17:01:34
2609
原创 【开源】libinimini:适用于单片机的极简 ini 解析库
介绍说明最近自己基于 XR872 在做一个小作品练习练习,具备可以配置的功能,选择了使用 ini 作为配置文件。我调研了网上常见的 ini 解析库,几乎都涉及到了 fopen()/fgets().. 以及 malloc()。说明这些开源库都仅适用于支持完整 C语言标准库的系统,并不适用于 RTOS 或裸跑的单片机。因为前者虽是 C 语言的标准文件操作函数,但在单片机中基本上使用的都是简化版的 fatfs 接口,要想引入单片机使用,意味着需要对该接口库进行修改。后者更是涉及到内存管理,ram 的占用会
2022-02-26 13:58:21
1559
1
原创 【随笔记】SiliconLabs Android Demo 编译
AndroidStudio:3.5.2AndroidPhone:XiaoMi5 (Android 8.0)AndroidDemo:3.1.4-44AndroidDemo 源码路径:SimplicityStudio\v5\developer\sdks\gecko_sdk_suite\v3.2\app\bluetooth\android_application一、修改为适合于 AndroidStdio 3.5.2 的 gradle 版本--- android_application\gra
2021-11-21 10:00:00
511
原创 【随笔记】SiliconLabs Android aar 库使用
一、导入库文件1. 拷贝以下两个文件到工程的 libs 目录下ble_mesh-android_api_high-release.aarble_mesh-android_api_low-release.aar2. 修改 app 中的 build.gradle 增加以下内容implementation 'com.google.code.gson:gson:2.8.5'implementation(name:'ble_mesh-android_api_high-release', ext:
2021-11-21 09:00:00
468
原创 【分析笔记】SiliconLabs EFR32BG22 Bluetooth Mesh SensorClient 源码分析
硬件环境: SLTB010A(BRD4184A Rev A02 / EFR32BG22C224F512IM40)软件环境: SimplicityStudio5/gecko_sdk_3.2.3分析工程: Bluetooth Mesh SensorClient恶补了 BluetoothMesh 相关知识,首次接触 SiliconLabs 芯片,搜全网,中文资料少的可怜,又一人狂啃了官方很多全英文文档,搞明白了烧录、编译、调试等基础知识,但是对软件开发方式还是云里雾里,然后着手分析源码才大致了解 Sili
2021-11-13 19:02:18
1904
2
openssl-1.1.1k_ndk19c.tar.gz
2021-07-31
nghttp2-1.44.0_ndk19c.tar.gz
2021-07-31
sigslot(解决浅拷贝问题, 增加信号拦截机制).rar
2020-05-10
openjdk-7u75-b13-linux-x64.tar.gz
2020-04-20
sigslot C++开源库-解决信号对象拷贝问题.zip
2020-04-13
DesignPattern(VS2019_观察者模式_工厂模式_抽象工厂模式)完整示例源代码.zip
2020-02-10
DesignPattern(VS2019_观察者模式_工厂模式).zip
2020-02-04
nRF52832 停止蓝牙广播补丁.rar
2020-01-08
【Linux】C-C++ 一种简单易用的高效定时器实现.rar
2020-01-05
纯粹的zbar示例程序(不依赖第三方库)以及OpenWRT的Makefile和测试二维码图片
2019-12-14
感染防御系统 SP1 【内部版】L、
2012-09-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人