自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 收藏
  • 关注

原创 静态代码检查的应用

上一集我们说到 git blame 命令的应用,它可以轻松的找出某行代码是出自谁手,如果经常被找出是自己提交的代码出了问题,那多少是会有些尴尬的,而且特别是比较低级的错误时。所以为了提高自身提交代码的质量,可以通过静态代码检查下来检查下我们的代码,提前发现些 bug 。通过 google 搜索我们可以找到很多静态代码检查工具,这里我选择了一款免费的静态代码检查工具cppcheck在 ubuntu 上安装也非常简单,实用如下命令即可:sudo apt install cppcheck使用方法也

2021-05-16 17:20:12 367

原创 git之谁埋的雷

最近在代码里面发现了一些 bug ,但不知是谁所写,不过现在代码使用 git 进行管理的,由于之前一直使用 svn ,头次在 git 管理的仓库里面遇到这样的事情,一时还不知道咋弄。换做以前是直接在 windows 下打开 svn 客户端,然后通过搜索该文件的日志,慢慢找到对应的点,看是谁提交的。由于现在 git 都是命令行操作,按老套路好像不太好操作。那有没有对应的命令能完成这个操作呢?答案是肯定的,而且非常简单,看完后直接流泪,怎么这么简单,以前一直被 SVN 的 GUI 的客户端坑害,都没去想

2021-05-16 16:24:43 297

原创 编程技巧分享之so的初始化

假设我们需要提供一个 so 给其他人用,并这个 so 需要执行初始化动作,你会怎么来设计?方法1:简单粗暴这种方法应该是最容易想到到的,直接简单粗暴,提供接口,让调用者来处理,示例如下:/****** method1.c ******/ void method1_init(void){ printf("calling method1_init...\r\n");}void method1_dosomething(void){ printf("calling method1_

2020-06-07 16:58:04 909

原创 一个线程死锁的例子

今天我们看一个线程死锁的例子。之前接触过的死锁 bug 都存在两个锁的情况,前段时间遇到一个由于写法问题导致一个锁的时候也出现了死锁的情况。代码流程大致如下:pthread_mutex_t mutex = -1;void* thread_fun(void *arg){ pthread_t pid = pthread_self(); if(-1 == mutex) { pth...

2019-10-29 00:19:19 1116

原创 如何在main函数之前搞事情

很久没出来搞事情了,今天我们来在 main 函数之前搞搞事情。写汇编的大神看到可能要笑了,我一直都在 main 函数前搞事情啊,要不是我搞好运行时环境,设置好栈,看你怎么运行哦。那写 c 不同啦,想要在 main 前搞事情,那得借助 gcc 的黑魔法 __attribute__。话不多说,直接上码:#include <stdio.h>#include <stdint.h...

2019-09-19 23:40:55 232

原创 一个Makefile示例

一个Makefile示例作为一个普通的搬砖码农来说,敲 make 的次数多,写 makefile 的机会却比较少,但掌握它是十分有必要的,毕竟读和改 makefile 的时候还是很多的嘛,特别是对于一个经常使用 c/c++ 的码农来说。网上有一份关于 makefile 很好的资料叫做 《跟我一起写Makefile》,每每遇到不懂的地方我都会在里面找答案,非常的不错,需要的请到如下网盘路径下载:...

2019-03-24 17:41:46 296 1

原创 STM32CubeMX 真的不要太好用

STM32CubeMX 真的不要太好用由于工作内容的变动,我已经很久没有正经的玩过单片机了,近期又要用它做个小玩意了,还是选 stm32 吧,外设库开发不要太方便,哈哈哈先去 stm32 社区逛了逛,发现了一个新字眼 STM32CubeMX,简单看了下,大概明白是个 ST 公司新推出的一个配置工具,直接由图形界面简单配置下,生成初始化代码,并对外设做了进一步的抽象,让开发人员更只专注应用的开发...

2019-03-16 16:53:46 65959 16

原创 如何优雅的生成一个 diff patch

某天如果你要把一条 git 或 svn 记录的修改发送给其他人时我们要怎么做呢?在 git 下你可以这么做:git format-patch 【commit sha1 id】 -1这样会生成单条记录的 patch 文件,当然也可以生成多条或者两条 commit 记录之间的修改。例如我们在开源项目 nuklear 上执行如下命令生成一条记录的 patchgit format-patch ...

2019-02-23 17:31:10 817

原创 tar档的秘密

为什么我打包的不行前段时间在一个项目上,系统的升级包是用 tar 命令打包出来的,即把需要升级的分区等文件通过 tar 打包后通过特制的 bootload 升级系统,既然如此,有时候我只需要更新一个不需要编译的文件,就想直接修改升级包的内容然后执行升级,然后我通过 tar 命令解压出来,修改完文件再打包回去,结果升级不了,提示升级错误,让我有点困惑。好在能看到升级程序的源码,通过查看源码后发现...

2019-01-27 16:34:21 276

原创 二进制修改程序改初始化数据

给我修改个初始化参数吧有天公司硬件找到我,要我给他修改一个功放初始化参数,调试效果。找到功放驱动源码,功放初始化参数是写在一个二维数组,地址和数据一一对应,在系统初始化过程,一个个写进功放。在他看来需求很简单,改一个寄存器的初始化值然后编译输出一个临时软件给他验证。可是,这套代码很庞大,编译非常耗时,而且还要考虑版本匹配等问题,好吧,得动点歪主意了。认识 nm 命令只是改个数字,直接二...

2018-12-31 17:11:10 1471

原创 获取进程的内核转储

获取进程的内核转储(coredump)内核转储(coredump)保存了进程某一时刻的运行状态,它在进程发生问题时产生,此时只要有程序的可执行文件和 coredump 即可对其进行调试,了解产生 coredump 那一刻进程的状态,从而发现问题点。某些情况下我们也可以主动来获取 coredump,比如进程发生死锁卡住的情况,这时我们可以使用 kill 命令来触发 coredump 的生成,...

2018-07-21 16:33:57 617

原创 利用手机触摸屏控制 Ubuntu 鼠标指针

一、前言这个东西我做出来已经过去很久了,一直躺在我的电脑里面,今天把它拿出来分享,少了刚开始做出来时的那份激情突然不知道怎么来写。废话少说,先上最终的效果视频:https://v.youku.com/v_show/id_XMzY4MTgxMjk1Mg==.html?spm=a2h3j.8428770.3416059.1然而这有什么用呢。。。。哈哈哈。。。理解掌握它可以丰富系统的...

2018-06-23 15:09:01 1825

原创 用代码改变旧手机的命运

一、改变旧手机的命运就在前几天我终于。。。换新手机啦,哈哈~看着用了两年的旧手机其实也是可以正常使用的,就这样丢抽屉吃灰了吗?不不不,生命不息,折腾不止。。。可以用它来做类似监控摄像头的东西啊!对,那就先来做一个自动拍照并上传至 web 服务器的功能吧,这样我就可以通过浏览器远程来查看它拍摄的照片,也有点远程监控的意思对不,还记得我有一个远在美帝的服务器了吗,正好耍耍 ...

2018-05-06 18:31:40 2662

原创 当 gdb 遇上第三者

第一章 和谐的二人世界小明是一个无忧无虑的嵌入式程序员,他精通 printf 大法,足以处理绝大多数的 bug,他非常的开心。虽然和有着 IDE 集成开发环境下各种图形化的断点调试、变量观察等高效程序调试方法的程序员相比,小明的程序调试方法比较原始,但作为一个 Linux 环境下的嵌入式程序员,小明并没有太多的选择,命令行才是王道。终于有一天小明想尝试一下早已耳闻的程序调试利器 ...

2018-04-30 22:13:02 357

原创 程序调试之 gdb 大法

一、说说 gdbgdb 是一款 UNIX 系统下基于命令行的程序调试利器,它功能强大,但其命令行的方式想必是挡住了一大波程序员,默默的继续使用 printf。但作为 Linux 下的程序员应当是要掌握这一强大的调试利器,至少了解下吧,解 bug 的时候肯定用的上。而且掌握它之后再也不用羡慕那些使用 IDE 开发自带图形化调试页面的同学啦,酷炫的命令行式的操作是不是会更有吸引力。好了...

2018-04-30 22:11:52 671

原创 搭建git服务器

一、唠叨两句通常情况下搭建 git 服务器的机会还是比较少的,而搭建 git 服务器的唯一用途就是多人协作。github 即是一个典型的 git 服务器,但其免费托管的代码都是开源的,如果不想开源,则需要向 github 交保护费。假设有一天你和你的小伙伴想搞个不开源的商业性项目,而且需要用到版本控制,这时我们便需要自建 git 服务器啦。那在这之前我们得有一个和小伙伴之间都能访问的服务器...

2018-04-14 21:52:30 354

原创 【做个笔记】简单的音视频处理操作之 ffmpeg 使用

一、FFmpeg 简介FFmpeg 是一款开源的多媒体视频处理工具,它有非常强大的功能包括视频采集、视频格式转换、视频抓图、给视频加水印等。许多视频播放处理软件多是基于 FFmpeg 开发,包括暴风影音、QQ影音、PotPlaye 等。注:FFmpeg 是以命令行的方式运行的,所以我们要在终端操作它。二、音视频基础知识1、封装:封装即我们常说的文件格式 mp4、avi、mk...

2018-04-06 15:58:49 1572

原创 git 初学者之为什么 push 时还要我输入密码

一、问题描述作为 git 初学者的我已经体验到了每次向 github push 时都要输入密码带来的烦恼,但没关系我会 google 啊,很快我找了到使用 SSH key 的方法来避免这个问题,并找到了一篇在 windows 平台上配置 github SSH key 的教程如下链接:windows下GitHub的SSH key配置很快我做好了一切,但我测试 push 时发现还是需要我输...

2018-03-19 21:00:27 1797

原创 美剧的正确下载姿势

一、简介本文将介绍我利用 python 从传统的手动操作下载到批量自动化下载的进化史。二、事情是这样的前几天发现一部还不错的剧,《糟糕历史》,是的是我喜欢的记录片。我在天天看美剧上找到了它的下载页面,天天看美剧上是提供的 ed2k 链接进行下载。如果你有装迅雷那点击对应地址会提示启动迅雷进行下载,而我作为一个不太合格的老司机是没有装迅雷的。我通常喜欢使用百度网盘的离...

2018-03-17 18:54:25 2244

原创 vim 操作记录

vim 操作记录记录一些我的常用操作移动跳转1、上下左右移动:k、j、h、l2、按单词移动:向前 w、向后 b3、行首行尾移动:行首0或 ^ (行首第一个非空白字符)、行尾 $4、fc 光标向前移动至字符 c 处;Fc 同理但光标向后;再配合 ; 可重复操作5、% 移动到匹配的括号6、nG 移动到文件第 n 行7、H 屏幕顶端、M 屏幕中间、L 屏幕底端...

2018-03-13 22:00:43 502

原创 vim 配置记录

工欲善其事必先利其器,不经配置的 vim 在实际使用过程中会有诸多不便之处,但只要稍加配置即十分称手。一、.vimrc 文件与 .vim 目录那 .vimrc 即是 vim 的配置文件了,它位于 $HOME 目录,即 ~ 目录下。vim 每次启动时多会去读取它,同时修改它并不能立即生效,需要重启生效。如果你发现它没有的话可以手动的创建它。我的 vim 配置文件备份到了 vim_conf...

2018-03-08 14:29:51 262

原创 适配DirectFB到qt4.8.5

适配DirectFB到qt4.8.51、编译qt4.8.5这部在qt官网上其实已经有较详细的说明,了解更多,请点击链接进入。首先是配置选项,如下是我的配置选项:./configure \-prefix /home/share/nuc972/nuc-bsp/applications/qt4 \-release \-opensource \-qconfig di

2017-08-26 18:21:29 2275 5

原创 DirectFB学习之使用devmem驱动

DirectFB学习之使用devmem驱动为什么要使用devmem驱动相比使用fb驱动来说使用devmem驱动要显的更麻烦,但是它给我们带来更大的灵活性,更适用于嵌入式系统。使用devmem驱动可以方便向dfb注册多个层,在一个系统中除了framebuff看作一个层外,如果系统还可以有多个OSD,那每个OSD则被视为一个层,即可以很方便的把系统中的OSD等层利用起来。这

2017-08-26 14:47:02 1408

原创 DirectFB学习之添加gfx驱动

DirectFB学习之添加gfx驱动前面介绍了如何移植dfb到nuc972平台,但未对硬件2D部分的gfx驱动做较详细的说明,这里先简单介绍下如何为dfb写gfx驱动。(本文描述的nuc972平台的dfb的gfx驱动可以在github上获取)一、了解gfx驱动接口1.1 gfx接口的声明由前面文章《DirectFB学习之面对对象设计》我们应该可以理解一个具体的gfx

2017-08-25 00:11:56 2499

原创 nuc972平台qt+dfb+2d简单性能对比测试

经过一段时间的DirectFB的学习之后,终于在nuc972平台上将qt+dfb+2d硬件加速跑通了,这边做了一个简单的性能对比测试,测试单纯跑qt和跑qt+dfb+2d的效果对比试验。测试内容为让一个窗口绕着屏幕跑圈圈,qt代码如下:/* tdialog.h */#ifndef TDIALOG_H_#define TDIALOG_H_

2017-05-25 23:45:34 6579

原创 DirectFB学习之适配FreeType支持

nuc972开发板购买地址,感谢支持 DirectFB学习之适配FreeType支持 在DirectFB学习之移植到nuc972平台中最后我们有两个警告没有决解,一个FreeType的支持,一个是png图片的支持,今天我们就来把FreeType加进去。 按照之前的选择软件版本的原则,我选择了FreeType的2.4.6版本,编译方法也是相同的套路,用如下命令:./configure --pref

2017-04-18 23:59:10 1293

原创 DirectFB学习之修改FrameBuffer驱动支持双缓冲

DirectFB学习之修改FrameBuffer驱动支持双缓冲 折腾了一段时间基于nuc972平台的2D硬件加速驱动终于在DirectFB上跑起来了,但是我发现只要我想在独占模式下创建Primary Sufrace并指定为Video memory时会失败,即使我在正常模式下创建成功了,绘图也并不会对Primary Sufrace进行硬件加速,提示失败的原因是Primary Sufrace的内存是来

2017-04-17 22:24:01 4144 2

原创 DirectFB学习之移植到nuc972平台

DirectFB学习之移植到nuc972平台1、DirectFB版本选择DirectFB选择要合理,也没必要追求最新版本,除非特殊需求。我选择DirectFB版本的时候是根据我平台的交叉编译器的版本发布日期,找来这个日期相近发布发DirectFB版本来编译的,DirectFB可以到github上下载(点击进入下载)。我试下了1.4.0和1.4.5版本,相同的配置1.4.0编译不通过,而

2017-04-12 00:48:05 4817 2

原创 DirectFB学习之图形加速驱动的匹配

DirectFB学习之图形加速驱动的匹配 通过前面对DirectFB中用类似面向对象的设计方法分析后,同理可知我们的gfxdrivers也是一个个的so被加载进来的,那问题来,当gfxdrivers下存在多个gfx驱动的时它是匹配哪一个呢? 我们先找到初始化gfxdrivers的地方,它在文件src/core/gfxcard.c中,如下:static DFBResultdfb_graphic

2017-04-08 21:45:46 1051

原创 DirectFB学习之面向对象设计

DirectFB学习之面向对象设计        前些日子读了《大话设计模式》一书受益匪浅,其中第五章举例的电脑容易修而收音机不容易修的例子让我印象深刻,它展开的一个设计模式——依赖倒转原则说明了抽象不应该依赖细节,细节应该依赖于抽象,即针对接口编程,不要对实现编程,这有利用程序的模块化和解耦合。如同在PC上不同的CPU、内存厂商多按照相同的接口来设计,从而非常容易的实现CPU或内存的更换操作,对于

2017-04-08 18:26:53 742

原创 交叉编译openssl arm平台

这里编译参考了网上介绍的一些方法,如下:我这里的平台的是nuc972,它是个arm9的平台,因平台较老我选了一个版本稍老的openssl来编译,这里选择的是OpenSSL_1_0_1c它的各个版本可以到github上下载,如下地址: https://github.com/openssl/openssl export cross=arm-linux-./Configure linux-armv4 s

2017-03-26 19:12:17 3240

转载 使用 getopt() 进行命令行处理

原文地址:http://www.ibm.com/developerworks/cn/aix/library/au-unix-getopt.html引言在早期的 UNIX® 中,其命令行环境(当时的唯一用户界面)包含着数十种小的文本处理工具。这些工具非常小,通常可很好地完成一项工作。这些工具通过较长的命令管道链接在一起,前面的程序将其输出传递给下一个程序以作为输入,整个过

2017-02-15 23:41:44 392

转载 ini文件解析c库(iniparser)

原文地址: http://blog.csdn.net/orz415678659/article/details/9533259一.交叉编译ini解析库1.官方网站http://ndevilla.free.fr/iniparser下载iniparser-3.1.tar.gz2.解压[cpp] view plain copy

2017-01-12 09:33:27 4604

转载 在 linux 下使用 CMake 构建应用程序

原文地址: http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/index.htmlCMake 简介CMake 是一个跨平台的自动化建构系统,它使用一个名为 CMakeLists.txt 的文件来描述构建过程,可以产生标准的构建文件,如 Unix 的 Makefile 或Windows Visual C++

2016-12-08 00:13:36 401

转载 MAC和PHY的区别

原文地址:http://www.cnblogs.com/feitian629/archive/2013/01/25/2876857.html一块以太网网卡包括OSI(开方系统互联)模型的两个层。物理层和数据链路层。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路等,并向数据链路层设备提供标准接口。数据链路层则提供寻址机构、数据帧的构建、数据差错检

2016-12-07 00:01:49 456

原创 在Linux中如何利用backtrace信息解决问题

在Linux中如何利用backtrace解决问题一、导读在程序调试过程中如果遇到程序崩溃死机的情况下我们通常多是通过出问题时的栈信息来找到出错的地方,这一点我们在调试一些高级编程语言程序的时候会深有体会,它们通常在出问题时会主动把出问题时的调用栈信息打印出来,比如我们在eclipse中调试java程序时。当这些换到Linux上的C/C++环境时情况将变的稍微复杂一些,通常在

2016-12-05 00:27:44 32511 12

原创 u-boot器件驱动模型(Device&Drivers)之uclass

一、剧情回顾 在上一篇链接器的秘密里面我们讲到我们用一些特殊的宏让链接器帮我们把一些初始化好的结构体列好队并安排在程序的某一个段里面,这里我例举出了三个和我们主题相关段的分布情况,它们大概如下图所示:(我们可以通过搜索宏ll_entry_declare来找到它们)那么问题来了,那它们三个是什么关系呢?它们在程序里面是怎么被用到的呢? 二、剧透 剧透环节希望你们喜欢,uclass对驱动进行了归类处理

2016-12-04 22:55:23 4295 2

转载 深入分析 Linux 内核链表

原文地址: https://www.ibm.com/developerworks/cn/linux/kernel/l-chain/一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表

2016-11-24 20:23:13 395

转载 Linux内核中双向链表的经典实现

原文地址: http://www.cnblogs.com/skywang12345/p/3562146.htmlLinux内核中双向链表的经典实现 概要前面一章"介绍双向链表并给出了C/C++/Java三种实现",本章继续对双向链表进行探讨,介绍的内容是Linux内核中双向链表的经典实现和用法。其中,也会涉及到Linux内核中非常常用的两个经典宏定义of

2016-11-24 20:03:08 2416

原创 u-boot器件驱动模型(Device&Drivers)之链接器的秘密

写在前面       哈哈,写东西前总喜欢先扯蛋,赶时间的直接无视这段吧。前段时间照着x_project成功的将手上的一块基于nuc972的板子成功移植上了最新的u-boot,相关细节可以参考我的这篇博客。       那篇博客的最后我给自己设立了几个后续要完善的功能,是选择继续模仿着搬砖呢,还是先把一些东西看明白些呢,显然我开始写这篇文章的时候是选择了后者,哈哈。“慢下来

2016-11-22 23:56:31 4290 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除