Linux 应用开发
文章平均质量分 53
此类笔记主要分享 Linux 应用开发相关的知识
lovemengx
顺其自然,应当是竭尽所能之后的不强求。
展开
-
【随笔记】Tina 移植 Mosquitto v2.0.18 版本
移植 Mosquitto v2.0.18原创 2024-02-26 21:10:50 · 1080 阅读 · 0 评论 -
【随笔记】C++ 友元机制的有趣应用
一种友元的应用,可以组合业务类,实现子类的事件回调中直接调用业务类的某些业务模块。原创 2024-02-18 14:27:32 · 307 阅读 · 0 评论 -
【随笔记】C++ 周期任务调度的思想和实现
实现将并行任务串行执行的框架代码。原创 2024-02-18 13:11:26 · 902 阅读 · 0 评论 -
【随笔记】C++ condition_variable 陷阱
这种问题只有在系统时间发生变化的时候才会出现,例如搭配 NTP 更新功能,硬件还未同步时间时,一般在 1993 年,此时使用了 wait_for() 这类接口等待 10 秒,结果在 10 秒内被 ntp 同步更新了时间到 2023,那么时间生效的一瞬间,wait_for() 就会直接被唤醒,且返回的结果是超时唤醒。通过 std::condition_variable 来实现超时等待,会受到系统时间变化的影响,系统时间倒退修改就会导致延后唤醒,系统时间提前将会导致提前被唤醒,返回结果仍为超时。原创 2023-09-30 23:14:19 · 1085 阅读 · 0 评论 -
【随笔记】Linux/Win 平台调用外部命令并获取执行结果
有些命令输出结果并不是通过 ”标准输出“,而是通过 "错误输出",因此为了能获取到所有的执行结果,需要将 "错误输出" 重定向 "标准输出"。原创 2023-08-05 17:18:09 · 377 阅读 · 0 评论 -
【OpenWRT】增加第三方开源库 - 二维码开源库 zbar
序言 第一次开始写博客,在日常学习和工作当中 CSDN 给我帮助很大,因此我也在 CSDN 奉献自己的经验,借此回馈 CSDN 对我的帮助,希望自己的经验可以帮助需要的人,也方便自己后续复习之用,同时亦可以借此丰富自己和完善自己的知识体系。介绍 Zbar 是一个二维码和条形码的开源解码库,因为有一个项目没有屏幕但有摄像头,需要解决无线网络联网问题,自然而然的...原创 2019-12-14 15:30:04 · 2187 阅读 · 1 评论 -
【学习笔记】C/C++ 设计模式 - 观察者模式
前言 估计 2020 年写应用程序的机会比较多,之前一直在做嵌入式驱动程序和Android系统定制方面的工作,在应用程序方面积累的不是很多,因此迫切需要多学学应用编程这方面的知识。 之前在写小的应用程序的时候,总感觉会有更好的实现方式解耦,当时只是觉得要解决我所面临的瓶颈,可能需要找几个比较优秀的开源代码,多学习学习。因为一个偶然的机会接触设计模式之后,我嘞个去,...原创 2020-01-23 23:01:55 · 247 阅读 · 0 评论 -
【学习笔记】C/C++ 设计模式 - 工厂模式(下)
介绍说明这篇笔记承接《【学习笔记】C/C++ 设计模式 - 工厂模式(上)》文章,主要记录 “抽象工厂设计模式” 的学习笔记,上一次是以音频播放器来作为例子,主要是想体现出的是接口标准化的优势,但不适用于“抽象工厂设计模式” 的示例,因此这里改为台式电脑作为例子。上文说到工厂模式属于 “创建型设计模式” ,但其中的“创建” 的优势并不明显,那么 “抽象工厂模式” 对 “创建” 具有很...原创 2020-02-10 01:11:22 · 295 阅读 · 0 评论 -
【学习笔记】QT从入门到实战完整版(菜单栏、工具栏、浮动窗口、状态栏、中心部件)(3)
QMainWindowQMainWindow 是一个为用户提供主窗口程序的类,包含以下几种类型部件,是许多应用程序的基础。示例代码void MainWindow::test(){ // ----------------------------------- 菜单栏(只能有一个)----------------------------------- QMenuB...原创 2020-03-08 19:45:34 · 427 阅读 · 0 评论 -
【学习笔记】QT从入门到实战完整版(Lambda)(2)
LambdaLambda 表达式很有意思,相信很多人初次见到 Lambda 表达式都会不能理解有什么用,我也一样,看了视频教程之后,突然意识到,Lambda 真的是太好用了,它可以在某些情况下可以很大程度上简化代码。应用场景下面的代码给我的启发:实现通过信号槽的方式实现点击按钮时,触发修改按钮的名字为“停止”。connect 的最后一个参数其实是函数指针,当按钮触发了 clicked 信号时...原创 2020-03-08 16:30:35 · 345 阅读 · 0 评论 -
【学习笔记】C/C++ 设计模式 - 工厂模式(上)
介绍说明在年初七的时候,学习了工厂模式,今天在复习的时候发现漏了几个知识点,因此重写这篇文章,以循环渐进的描述方式来对比不同的使用技巧。工厂设计模式属于 “创建型设计模式”,在我理解,就是为一个相同类型的功能模块抽象出一组接口定义,统一采用各种方案实现的相同类型的功能模块。主要的业务逻辑不必关心该功能模块采用什么方案实现,只需关心如何使用抽象出来的接口即可。完美体现出这句名言:计算机科学领...原创 2020-02-04 20:12:31 · 279 阅读 · 0 评论 -
【学习笔记】QT从入门到实战完整版(按钮和信号槽)(1)
介绍说明学习 QT 的目的只是为了可以实现跨平台的具有GUI 的程序,以前用的 MFC,但是无法应用在嵌入式平台。后来在全志的 Tina 系统中有看到 QT ,因此特地去了解了QT,挺有意思的,UI也可以做到很漂亮,因此开始学习 QT 之旅。按照视频课程顺序,摘录比较重要的知识点以及心得,下图给出的代码并非完全照搬视频示例代码,而是根据自己的好奇所编写的测试代码。本着先学会用,再深入的原则,...原创 2020-03-01 23:25:46 · 1166 阅读 · 0 评论 -
【学习笔记】开源库之 - sigslot (在解决浅拷贝问题的基础上增加信号拦截功能)
前言说明在文中《【学习笔记】开源库之 - sigslot (提供该库存在对象拷贝崩溃问题的解决方案)》已经介绍过sigslot ,此文主要应用在实际的工作项目中时,发现会有拦截信号的需求,而原生的sigslot不支持拦截。因此增加sigslot拦截特性,便于适应这种需求。应用场景在很多需要联网的项目中,很多功能模块都必不可免的会产生依赖关系,如联网后需要进行网络时间同步、连接服务器等操作。而网络时间同步和连接服务器的操作需要网络畅通时才能进行,而连接服务器需要在网络时间同步成功后才能进...原创 2020-05-10 15:38:58 · 451 阅读 · 0 评论 -
【学习笔记】QT从入门到实战完整版(基础控件)(4)
添加资源将存有资源文件的文件夹放到工程目录中,如文件夹名称为 “Image”,里面有 Luffy.png 文件。在 Qt Creator 中右击工程选择【添加新文件】。在弹出的对话框中的文件和类选择【Qt】->【Qt Resource File】。在弹出的对话框中填好名称如 “res”,然后选择【下一步】->【完成】。此时会在工程中创建了一个名为 “res.qrc” 文件...原创 2020-04-06 17:22:35 · 559 阅读 · 0 评论 -
【学习笔记】C/C++ 设计模式 - 模板模式
介绍说明模板设计模式是一种非常简单的设计模式,其主要是利用了虚函数的特性实现。非常适合应用在一些算法、流程、业务逻辑是固定的形式,其中某些步骤的实现方式又无法确定下来的场景。举例说明以下为模拟某芯片基于串口通信的固件升级代码,可以提供一个 FirmwareUpgrade 的类用于使用者集成。考虑到跨平台,该类的串口操作接口声明为纯虚函数,由使用者自己根据所用平台实现,而不需要关注具体的...原创 2020-04-19 07:21:05 · 150 阅读 · 0 评论 -
【学习笔记】开源库之 - sigslot (提供该库存在对象拷贝崩溃问题的解决方案)
介绍说明学习 QT 的时候,觉得 QT 提供的信号槽机制非常有用,这种机制可以解决对象与对象之间通信中的耦合问题,原本想从网络上了解一下具体的实现思路用于项目中,意外的发现了用 C++ 实现的信号槽开源库 - “sigslot” 。它仅有一个sigslot.h 源文件,简单而又满足了我想将这种机制应用到项目中的想法。从官方网了解到,开发者可能是一位女程序员,她原本使用 MFC 开发,...原创 2020-04-13 01:12:42 · 1178 阅读 · 0 评论 -
【学习笔记】C++ 常量折叠原理和验证
以下的代码很有意思,在相同时刻,相同的内存地址,数据居然是不一样。#include <fstream>#include <iostream>int main(void){ const int const_val = 5; int *nomal_pot = (int*)&const_val; *nomal_pot = 9; printf("const_val: 0x%p -> %d\n", &const_val, const_val);原创 2021-06-30 20:06:06 · 470 阅读 · 0 评论 -
【编程思想】数据传输的通信接口以及通信协议的解耦设计
应用场景在工作上经常会遇到需要对接多个外设,如离线语音识别芯片、NFC刷卡器芯片等等,这些大部分都是通过UART、SPI等接口进行通信,且具有各自的数据包通信协议。除了通信接口和通信协议(即数据封包解包)有差异外,这些数据处理逻辑都一样,所以可以将数据处理逻辑统一,将通信差异部分抽离出来,分别根据不同的硬件实现。整体框架核心框架部分:IDataStream:数据通信接口定义,用于统一各种通信接口,如 Serial 串口读写操作,实现数据收发。IDataCodec:数据编解码接口定原创 2020-12-20 22:23:43 · 952 阅读 · 0 评论 -
【随笔记】Littlevgl 8.x 踩过的坑
在多线程并发使用的时候,总是在运行过程中莫名其妙的 crash,后面才意识到 LVGL 本身不支持并发,加了互斥锁解决了。在引入矢量字库时(freetype),又有启动时会概率性 crash 的问题,每次 crash 的地方还不一样,这个坑爬了好久,甚至都怀疑是不是 freetype 有问题,还好总算找到方法解决了,不过还不清楚具体原因,先记录。以下以 linux 平台下 C++ 语言的方式举例说明,理解方法即可。一、多线程并发使用多线程并发使用时,需要在以下两种情况加上互斥锁:1. .原创 2022-04-14 00:00:45 · 4376 阅读 · 1 评论 -
【分析笔记】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 · 3821 阅读 · 8 评论 -
【随笔记】ATECC608 加密芯片调试记录
编译库文件的版本只需要最低 cmake 2.6.4 版本,但是测试程序最低 cmake 3.10。建立新的配置文件,指定编译工具链的位置:xxx_linux_toolchain.cmake。根据芯片手册,ATECC608B 的 7bit 器件地址是:0x35。大多数加密芯片都是由原厂提供库文件,便于降低开发难度。官网下载:CryptoAuthLib。原创 2022-11-04 20:25:20 · 835 阅读 · 1 评论