自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

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

2020-06-07 16:58:04 30 0

原创 一个线程死锁的例子

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

2019-10-29 00:19:19 219 0

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

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

2019-09-19 23:40:55 43 0

原创 一个Makefile示例

一个Makefile示例 作为一个普通的搬砖码农来说,敲 make 的次数多,写 makefile 的机会却比较少,但掌握它是十分有必要的,毕竟读和改 makefile 的时候还是很多的嘛,特别是对于一个经常使用 c/c++ 的码农来说。 网上有一份关于 makefile 很好的资料叫做 《跟我一...

2019-03-24 17:41:46 139 0

原创 STM32CubeMX 真的不要太好用

STM32CubeMX 真的不要太好用 由于工作内容的变动,我已经很久没有正经的玩过单片机了,近期又要用它做个小玩意了,还是选 stm32 吧,外设库开发不要太方便,哈哈哈 先去 stm32 社区逛了逛,发现了一个新字眼 STM32CubeMX,简单看了下,大概明白是个 ST 公司新推出的一个配置...

2019-03-16 16:53:46 23926 2

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

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

2019-02-23 17:31:10 199 0

原创 tar档的秘密

为什么我打包的不行 前段时间在一个项目上,系统的升级包是用 tar 命令打包出来的,即把需要升级的分区等文件通过 tar 打包后通过特制的 bootload 升级系统,既然如此,有时候我只需要更新一个不需要编译的文件,就想直接修改升级包的内容然后执行升级,然后我通过 tar 命令解压出来,修改完文...

2019-01-27 16:34:21 79 0

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

给我修改个初始化参数吧 有天公司硬件找到我,要我给他修改一个功放初始化参数,调试效果。 找到功放驱动源码,功放初始化参数是写在一个二维数组,地址和数据一一对应,在系统初始化过程,一个个写进功放。 在他看来需求很简单,改一个寄存器的初始化值然后编译输出一个临时软件给他验证。 可是,这套代码很庞大,编...

2018-12-31 17:11:10 451 0

原创 获取进程的内核转储

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

2018-07-21 16:33:57 275 0

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

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

2018-06-23 15:09:01 896 0

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

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

2018-05-06 18:31:40 1809 0

原创 当 gdb 遇上第三者

第一章 和谐的二人世界 小明是一个无忧无虑的嵌入式程序员,他精通 printf 大法,足以处理绝大多数的 bug,他非常的开心。 虽然和有着 IDE 集成开发环境下各种图形化的断点调试、变量观察等高效程序调试方法的程序员相比, 小明的程序调试方法比较原始,但作为一个 Linux 环境下的嵌...

2018-04-30 22:13:02 174 0

原创 程序调试之 gdb 大法

一、说说 gdb gdb 是一款 UNIX 系统下基于命令行的程序调试利器,它功能强大,但其命令行的方式想必是挡住了一大波程序员,默默的继续使用 printf。 但作为 Linux 下的程序员应当是要掌握这一强大的调试利器,至少了解下吧,解 bug 的时候肯定用的上。 而且掌握它之后再也不用...

2018-04-30 22:11:52 285 0

原创 搭建git服务器

一、唠叨两句 通常情况下搭建 git 服务器的机会还是比较少的,而搭建 git 服务器的唯一用途就是多人协作。github 即是一个典型的 git 服务器,但其免费托管的代码都是开源的,如果不想开源,则需要向 github 交保护费。 假设有一天你和你的小伙伴想搞个不开源的商业性项目,而且需要...

2018-04-14 21:52:30 209 0

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

一、FFmpeg 简介 FFmpeg 是一款开源的多媒体视频处理工具,它有非常强大的功能包括视频采集、视频格式转换、视频抓图、给视频加水印等。 许多视频播放处理软件多是基于 FFmpeg 开发,包括暴风影音、QQ影音、PotPlaye 等。 注:FFmpeg 是以命令行的方式运行的,所以我们...

2018-04-06 15:58:49 941 0

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

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

2018-03-19 21:00:27 1307 0

原创 美剧的正确下载姿势

一、简介 本文将介绍我利用 python 从传统的手动操作下载到批量自动化下载的进化史。 二、事情是这样的 前几天发现一部还不错的剧,《糟糕历史》,是的是我喜欢的记录片。 我在天天看美剧上找到了它的下载页面,天天看美剧上是提供的 ed2k 链接进行下载。 如果你有装迅雷那点击...

2018-03-17 18:54:25 780 0

原创 vim 操作记录

vim 操作记录 记录一些我的常用操作 移动跳转 1、上下左右移动:k、j、h、l 2、按单词移动:向前 w、向后 b 3、行首行尾移动:行首0或 ^ (行首第一个非空白字符)、行尾 $ 4、fc 光标向前移动至字符 c 处;Fc 同理但光标向后;再配合 ; 可重复操作 5、% ...

2018-03-13 22:00:43 134 0

原创 vim 配置记录

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

2018-03-08 14:29:51 113 0

原创 适配DirectFB到qt4.8.5

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

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

原创 DirectFB学习之使用devmem驱动

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

2017-08-26 14:47:02 917 0

原创 DirectFB学习之添加gfx驱动

DirectFB学习之添加gfx驱动 前面介绍了如何移植dfb到nuc972平台,但未对硬件2D部分的gfx驱动做较详细的说明,这里先简单介绍下如何为dfb写gfx驱动。 (本文描述的nuc972平台的dfb的gfx驱动可以在github上获取) 一、了解gfx驱动接口 1.1 g...

2017-08-25 00:11:56 1399 0

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

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

2017-05-25 23:45:34 5089 0

原创 DirectFB学习之适配FreeType支持

nuc972开发板购买地址,感谢支持 DirectFB学习之适配FreeType支持 在DirectFB学习之移植到nuc972平台中最后我们有两个警告没有决解,一个FreeType的支持,一个是png图片的支持,今天我们就来把FreeType加进去。 按照之前的选择软件版本的原则,我选择了Fr...

2017-04-18 23:59:10 933 0

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

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

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

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

DirectFB学习之移植到nuc972平台 1、DirectFB版本选择 DirectFB选择要合理,也没必要追求最新版本,除非特殊需求。我选择DirectFB版本的时候是根据我平台的交叉编译器的版本发布日期,找来这个日期相近发布发DirectFB版本来编译的,DirectFB可以到githu...

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

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

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

2017-04-08 21:45:46 670 0

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

DirectFB学习之面向对象设计        前些日子读了《大话设计模式》一书受益匪浅,其中第五章举例的电脑容易修而收音机不容易修的例子让我印象深刻,它展开的一个设计模式——依赖倒转原则说明了抽象不应该依赖细节,细节应该依赖于抽象,即针对接口编程,不要对实现编程,这有利用程序的模块化和解耦合。...

2017-04-08 18:26:53 439 0

原创 交叉编译openssl arm平台

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

2017-03-26 19:12:17 2497 0

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

原文地址:http://www.ibm.com/developerworks/cn/aix/library/au-unix-getopt.html 引言 在早期的 UNIX® 中,其命令行环境(当时的唯一用户界面)包含着数十种小的文本处理工具。这些工具非常小,通常可很好地完...

2017-02-15 23:41:44 292 0

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

原文地址: http://blog.csdn.net/orz415678659/article/details/9533259 一.交叉编译ini解析库 1.官方网站http://ndevilla.free.fr/iniparser 下载iniparser-3.1.tar.gz 2....

2017-01-12 09:33:27 3771 0

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

原文地址: http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/index.html CMake 简介 CMake 是一个跨平台的自动化建构系统,它使用一个名为 CMakeLists.txt 的文件来描述构建过...

2016-12-08 00:13:36 317 0

转载 MAC和PHY的区别

原文地址:http://www.cnblogs.com/feitian629/archive/2013/01/25/2876857.html 一块以太网网卡包括OSI(开方系统互联)模型的两个层。物理层和数据链路层。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准...

2016-12-07 00:01:49 350 0

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

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

2016-12-05 00:27:44 21442 7

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

一、剧情回顾 在上一篇链接器的秘密里面我们讲到我们用一些特殊的宏让链接器帮我们把一些初始化好的结构体列好队并安排在程序的某一个段里面,这里我例举出了三个和我们主题相关段的分布情况,它们大概如下图所示:(我们可以通过搜索宏ll_entry_declare来找到它们)那么问题来了,那它们三个是什么关系...

2016-12-04 22:55:23 2046 1

转载 深入分析 Linux 内核链表

原文地址: https://www.ibm.com/developerworks/cn/linux/kernel/l-chain/ 一、 链表数据结构简介 链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式...

2016-11-24 20:23:13 317 0

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

原文地址: http://www.cnblogs.com/skywang12345/p/3562146.html Linux内核中双向链表的经典实现   概要 前面一章"介绍双向链表并给出了C/C++/Java三种实现",本章继续对双向链表进...

2016-11-24 20:03:08 2270 0

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

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

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

原创 u-boot在nuc972平台上的移植过程(启动篇)

写在前面这个想法最初是来自于一个叫x_project的项目,关于它的介绍和主页可参见下面两个链接,x_project介绍: http://www.wowotech.net/forum/viewtopic.php?id=2 x_project主页: http://www.wowotech.net/...

2016-11-19 16:46:19 5411 0

转载 尾调用优化(Tail Call Optimization)

原文地址: http://www.cnblogs.com/xfshen/p/6001581.html 尾调用优化(Tail Call Optimization) 尾调用是指函数的最后一条语句是函数调用,比如下面的代码: function doSomething()...

2016-11-17 23:48:12 1760 0

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