- 博客(63)
- 资源 (9)
- 收藏
- 关注
原创 C++ 名称查找(Name lookup)与参数依赖查找ADL(Argument-dependent lookup)
限定作用符限定名值指出现在::(限定作用符)右侧的名字,他可以是无限定作用域及,没有限定作用符在左侧的名字。
2023-08-15 02:58:43 582
原创 enable_shared_from_this 典型使用场景
从以上例子我们也可以得出结论:保活对象保活对象异步调用保活虽然c++在一些现代化版本(11+)已经提供了shared_ptr/unique_ptr智能指针极大的降低了C++er操作指针的心智负担。但是在一个异步调用时仍然存在问题;
2023-07-10 18:15:09 554
原创 安卓 JNI crash 日志分析 及问题定位 方法
目录标题例子抓取crash 日志日志分析例子void crash_test_func() { int* ptr = nullptr; // 行号173 *ptr = 99; // 行号174}// net 在 jni中调用void Net::initEngine(const char* data) { crash_test_func(); // 行号179}以上程序,对一个空指针解引用做赋值操作,会抛出一个S异常。抓取crash 日志对于SIGSEGV等错
2021-12-02 18:33:50 4363
原创 GIT LFS 原理杂谈
这里写目录标题例子不开LFS二级目录三级目录例子这里做些例子展示,方便理解。不开LFSgit init: 创建大文件fsutil file createnew isbin.bin 102400000: 提交文件git add isbin.bingit commit -m "初始化": --------------- 大小 98.5 MB ---------------: 修改文件echo a > isbin.bingit add isbin.bingit commit
2021-11-19 15:27:45 2933 5
原创 GIT仓库瘦身及GIT LFS迁移说明
目录标题背景GIT LFS (Large File Storage)迁移GIT LFS 服务端配置GIT LFS 客户端安装迁移本地历史仓库迁移一些补充说明清理前后仓库对比背景之前一些git项目上 CI/CD,发现jenkins git clone失败,设置depth及clone时间之类的无果。只能考虑仓库瘦身之类的策略。发现仓库有不少的二进制文件,且这些二进制文件变更还挺频繁,这种操作会导致git仓库成倍增长极速膨胀,git本身只适合管理文本文件。另外说一则有趣的往事,之前有个同事是图形编程,这个语
2021-11-17 20:26:18 4838
原创 半年随笔杂谈
目录标题前言工作上smart原则不要轻易重构现行代码向上管理生活上家人定期体检买保险前言失眠,想着很久没好好写过博客了,半年来也发生了许多事,也有些特别想说的,就记录下吧。工作上入职新公司也半年多了,也刚好前段转正了,除了专业技能上的提升,但更多想说的还是如何工作。感觉码农这种工种,包括我自己,感觉很多人不知道如何管理好自己的工作,如何将自己的产出进行好的包装呈现。smart原则在团队分配任务时,个人要应当积极主动选择任务。首先,机会永远是留给积极主动的人,这种主动承担任务也其实也是在领导
2021-10-09 02:16:49 257 1
原创 git仓库慎重重命名文件夹
git对于重命名后的这种历史呈现支持还是很差的。虽然对于单文件可以可以通过以下命令,将重命名前后的历史给连接起来,但是对于重命名文件夹后文件夹的提交历史就无能为力了。git log --follow /path_to_filegit log默认不带 follow也可能就是基于这样的考虑,git log往往是针对整体的提交历史记录而不是单文件。顺带一提,vscode的gitlens插件的file view 也可以支持跟踪重命名前后(不过只能选择only current branch),之前一直没
2021-09-16 15:00:53 768
原创 c++跨平台软件 vscode 各个平台下的debug教程
目录标题相关概念日志调试实操windows平台相关概念一般来说我们分析BUG,大概分为两种根据软件内部已有的插桩日志,记录关键节点信息、重要函数的输入输出,根据这些信息判断bug调试(Debug),让代码一步一步执行,跟踪程序的运行过程。比如,可以让程序停在某个地方,查看当前所有变量的值,或者内存中的数据,根据这些信息分析bug。日志日志这种方式,优点在于离线,但更多基于完备的日志信息,依赖代码内部的插桩日志的详尽程度,如果现存日志未捕获bug信息的日志的话,那么bug分析的形式就变成了如下
2021-08-31 14:26:55 1550
原创 windows平台 cmake release版本进行debug
目录标题背景需求问题解决cmake 设置背景项目中,通过ExternalProject_Add引入的一些第三方库。需求项目debug时,不需要第三方库的debug版本,只要主source debug,而第三方库release优化拉满。问题linux 平台下允许这种方式,release和debug 混用。windows平台exe与dll 存在限制,不能release与debug混用。但是我们软件对于一些导入第三方的库没有debug需求,而统一debug导致第三方库运行速度慢,反而影响整体软件的调
2021-08-23 15:36:17 1315
原创 CMAKE 里PRIVATE、PUBLIC、INTERFACE属性示例详解
闲扯cmake 里面target_include_directories,target_link_libraries这两个命令里面有三种属性PRIVATE、PUBLIC、INTERFACE。cmake PRIVATE、PUBLIC、INTERFACE的讲解网络上很多,但是总觉得太过偏概念了,看完并没有让人有深入细节的了解。于是动手做个示例,就有了本杂文。这三种属性,从根本上来讲属于cmake里面传播特性的三种等级。实例既然传播特性,那么我们肯定需要多个target来演示传播。testCMake
2021-08-17 20:18:13 13913 7
原创 正确使用git flow及commit message 规范指南
目录标题一级目录二级目录三级目录Git Flow主要分支masterdevelop支撑性分支featurereleasehotfix小结规范化提交commit message格式Commit Message HeaderCommit Message Body(可选)Commit Message Footer(可选)好处一级目录二级目录三级目录Git Flow就像代码需要代码规范一样,代码管理同样需要一个清晰的流程及规范。如何开始一个新特性的开发,而不影响阻塞其他特性开发?分支多了如何管理
2021-08-13 09:17:36 1527
原创 vscode 添加代码命名规范检查
目录前言clang三级目录前言前文简单提到clang-tidy提供命名规范检查,由于篇幅,没有详细讲解。正好最近有分了个旧项目代码规范整改的杂活,就补充描述下在vscode中如何使用clang-tidy进行静态检查。clang三级目录...
2021-08-04 22:13:07 5879 9
原创 vscode + clangd 开发 c\c++
目录标题背景发现clangd三级目录背景vscode c++开大家一般用 巨硬 自家出品的c++插件,如下网络大部分的vcscode c++ 环境搭建也都是讲这个插件的配置,用于提供悬浮提示,代码补全,错误提示,定义声明实现之间的项目跳转等等功能。我之前也是用这个插件开发,总体还好,至少比在我之前用的一些keil之类的IDE好用很多,但是和IDEA这种更现代化的IDEA有不小差距。先不说导航找实现找引用这种语义分析的基本功能有时候都没办法正确找到实现,错误和警告也只是有提示,没有quick f
2021-08-01 12:16:05 29026 14
原创 使用 VSCode 远程 图形化 GDB 调试 嵌入式linux
目录标题引言环境步骤vscode remote ssh 配置Linux编译机配置设备板端配置vscode launch设置调试引言之前说了,通过core dump找程序bug,但是有些时候排查问题的还是不够高效,命令行形式gdb还是太简陋了,在IDE debug代码打断点,查堆栈变量那些习以为常的东西,在gdb这里怎么用怎么不习惯,可视化操作不比敲命令行来的香吗?最近正好研究了下vscode remote ssh + gdbserver 调试。相对来说体验比较像IDE了,基本的单步,直接代码上打断点
2021-06-07 16:46:04 2168 4
原创 linux 程序crash 调试、原因分析及问题定位
linux 程序崩溃,如果能根据已有的插桩日志能排查出来自然好,但是往往日志未全覆盖,这时候排查起来还是比较麻烦的。一般来说有以下这几种方法获取崩溃现场数据。core dumpcore dump是linux原生自带的一个异常分析工具,当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中。注意程序编译 需要带 -g。开启core dumplinux 默认是关闭的。开启ulimit -c unlimited此时,运行程序发生sigsegv之类的异常时
2021-05-26 09:42:37 8778 2
原创 c++ 有返回值函数 ,但未返回值时的情况具体分析
具体业务代码遇到一个函数代码块无返回值导致bug的问题warning: control reaches end of non-void function [-Wreturn-type]测试代码//不存在存在内部调用int test1(int i){ if (i == 0 ) { return 0; }}int test3(int i){ return i;}//存在内部调用int test(int i){ if (i =
2021-05-25 11:31:52 3914
原创 加快gcc编译速度
前情之前一直在windows平台下使用ide开发,idea有热加载,而keil,ccs之类的单片机ide由于固件大小原因,编译速度都还凑合。等到新公司项目都是linux平台下用的交叉编译器开发,写的makefile也不咋地,一段时间玩下来,编译速度慢的简直不能忍受。网上一通搜索,基本上通过以下几点尝试优化PIMPL(放弃)使用pimpl(Pointer to Implementation),effective stl 很多书都有介绍,这玩意通过结构体或者类隐藏内部私有数据成员,使用前置声明和指
2021-05-22 11:29:19 5222 2
原创 vscode #ifdef编译开关关闭时不显示灰的问题
敲着敲着不知道手贱碰哪了,突然关的的编译开关不显示灰了。正常情况下开:关:现在突然,所有预编译控制块全是活动状态。网上说的,都是vscode #ifdef 区域变暗,跟我不是一个问题最后发现是手贱点了这个配置的问题。如果你不手贱不点编辑,默认是有一个值的,但是如果跟我一样纯手贱点了没细看选项就傻了,在settings.json会生成一个字段,并且默认值就被改成null,然后就没有非活动编译块暗色处理了,蛋疼。“C_Cpp.inactiveRegionOpacity”: null,
2021-04-25 09:30:54 7492 10
原创 OOP面向对象程序设计的理解
这里写目录标题软件设计六大原则基本概念如何设计高可用,高复用,易拓展的软件高可复用性一个简单的例子嵌入式软件如何实现硬件无关控制反转易用性类的易用性组件的易用性可拓展性业务可拓展性接口可拓展性不要过度设计软件设计六大原则基本概念最少依赖(迪米特)任何一个类只能使用本身的方法和属性及根据参数传递进来的值,每一个类尽量减少对其他类的依赖,减少类藕合,高内聚,利于提高代码复用。迪米特栗子单一职责一个类应只负责一个职责,各个职责变动不应影响其他职责,提高代码可读性(责任链完美诠释)接口隔离即接口
2021-04-20 09:44:38 338
原创 21年年后离职找工作的随笔杂谈
目录标题前言忙碌而又焦虑的面试阶段个人反思前言21年,向上司提了离职流程,从学校毕业也三年半了,并且在厦门这座城市也三年多了,厦门这座城市也是着实令人无奈,真不知道宜居在哪。。。。当前公司也工作三年了,只是工作上挑战性愈发不足,顺风顺水,每天敲代码都在做一些小调整的。哪怕是新产品的开发,对个人能力的考验实在有限,个人提升全靠自学。但这种模式还是不太满足吧,技术的深度更多需要项目中遇到的问题来考验。如果完全胜任且没有被安排更有挑战性的工作,要么自己找事情做,要么跳槽转岗。网上看到的别人的一句话
2021-03-12 10:08:20 2219 2
原创 嵌入式项目 lua 的一些简要说明
lua简介,易于与C\C++相互调用,执行效率高。嵌入式项目lua移植上难度不大,打包进项目,实现printf和fopen之类函数底层实现重定向即可但MCU选型上,对于lua的硬件占用还是需要注意下,对照参考选型以下是5.4.2最新版本未经过裁剪优化的基础要求。堆:32K,lua分配内存用的是realloc,部分芯片需要自行实现,可能有碎片问题,lua脚本里面程序栈:2KROM: 132K网上资料旧版本对于硬件的要求要似乎少很多,未做验证。github有elua这个专门为嵌入式设备优化的
2021-02-02 11:15:42 1324 1
原创 结构体偏移计算
很早以前遇到的一道面试题,最近突然有类似需要突然想起来。#define offset_of(type, memb) \ ((unsigned long)(&((type *)0)->memb))
2020-12-28 19:29:37 157
原创 嵌入式芯片加密防抄板技巧简析
目录标题背景外部IC加密简易MCU端加密MCU端加密优化版ID地址混淆代码混淆校验区混淆固件防修改芯片混淆总结背景随着嵌入式和物联网的快速发展,越来越多的嵌入式产品推向市场,如何保证产品程序的安全和知识产权不受侵害呢,目前主要有两种方式:MCU端加密和外加加密IC来进行相关的产品和知识产权保护。最近跟几个朋友讨论了以下相关加密的技巧,在这里分享一下。外部IC加密一般来说就是,在主控芯片和加密芯片都预存一个密码,STM32读取一个加密芯片生成的随机数,然后与8位密码做一个加密运算,把这个结果发给加密
2020-11-27 12:18:08 2712 1
原创 LVGL 优化帧率技巧
目录标题前文LVGL帧率限制代码优化等级前文LVGL——PC模拟器仿真模拟+VS2017f429 discovery开发版 LVGL移植(带操作系统)首先就个人用过的几个芯片而言,可能还是要F4系列这种性能以上,跑出来的效果才能让人满意,最常见的103芯片使用场景受限,总体不太好。在F429平台上尝试LVGL过程中,也总结出几种优化提高帧率的方法。这里我们还是直接用官方测试例程 benchmark做直观的帧率展示LVGL帧率限制首先,LVGL是有一个帧率刷新周期的宏定义,LVGL会通过LVG
2020-10-28 15:08:59 35557 20
原创 NXP KV30 擦写flash跑飞的问题解决
之前验证功能就擦除后写五六个字节的flash没发现什麼问题,但最近调试iap,一次写入512的字节的发现芯片会跑飞重启。后来发现是使能的SysTick这个中断的问题,项目没用操作系统内核,用systick做了个ms级延时,写flash写到十几二个个字节就进了一次中断导致跑飞,知道原因解决也简单,写flash的时候关中断就好。void FlashWrite(void *pBuffer, uint32_t WriteAddr, uint32_t ByteNumToWrite){ static ft
2020-10-24 19:13:34 865
原创 arm compiler v6 + M4内核 iap跳转失败的问题分析及解决
这里写目录标题一级目录二级目录三级目录背景AC5 迁移至AC6iap一级目录二级目录三级目录背景在用一块nxp的m4内核的低功耗芯片做项目,iap遇到一些问题。由于这块芯片寄存器较多,为了快速上手用了nxp自家的sdk库驱动外设,该sdk必须使用arm compiler v6。AC5 迁移至AC6arm compiler v6和arm compiler v5的区别与如何迁移不过多介绍,官方有具体说明,主要是一些关键字的修改及内联汇编的格式修改。内联汇编格式。如果在使用上FREERTO
2020-10-21 11:38:09 959 2
原创 f429 discovery开发版 LVGL移植(带操作系统)
文章标题准备STM32F429I-DISC1 开发版CUBEMX 工具移植CUBEMX生成基础代码LTDC驱动插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入准备之前的f103的开发版用分辨率240*320屏幕移植了LVGL,如果只有Gauge这种界面局部刷新的控件效果差强人意,但只要全
2020-10-14 16:46:18 7277 17
原创 LVGL——PC模拟器仿真模拟+VS2017
目录LVGL介绍移植说明资源下载环境搭建编译运行LVGL介绍官网 :https://lvgl.io/官方在线文档:https://docs.lvgl.io/latest/en/html/intro/index.htmllittleVGL是一个开源的嵌入式图形控件库,MIT协议, 图形美观,硬件无关,移植方便,可移植性强,占用资源少。硬件要求:16, 32 or 64 bit microcontroller or processor16 MHz clock speed is recommend
2020-09-26 15:00:23 8231 3
f429 freertos+ LVGL.rar
2020-10-14
lv_examples-master.zip
2020-09-26
lv_sim_visual_studio_sdl-master.zip
2020-09-26
lv_drivers-master.zip
2020-09-26
test_Project_mdk - 副本.rar
2020-08-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人