自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Azure的博客

无知和弱小并不是生存最大的障碍,傲慢才是

  • 博客(19)
  • 收藏
  • 关注

原创 NDK编译器由gcc改为clang造成的STL兼容性问题

最近做NDK项目时,遇到了个很让人恼火的问题,调用动态库时,一旦API参数使用了STL容器,就无法链接。报错类似 undefined reference to ‘Func(std::__1::vector&)’ 反复检查API文档与自己的程序,并未发现参数不一致的情况。检查库的依赖关系,也一切正常。最后使用 arm-linux-androideabi-nm -D -C...

2018-03-23 18:59:32 5928

原创 进程工作目录设置不当导致的设备持续被占用的问题

最近一项目涉及了对外置存储设备的读写,操作完成后应解除其挂载,但此时解除挂载失败。一般来说这种情况是某进程未正确释放其文件描述符导致的,可使用lsof指令检查文件系统正在被哪些进程使用。 果然,lsof显示该设备依然被一个曾对其进行读写的进程占用。Linux系统中,进程正在使用的文件描述符在/proc/[pid]/fd目录下以链接的形式记录,但检查发现此处并没有那个被占用的设备。 反复检查程序

2018-01-20 17:03:09 433

原创 联发科MT33xx GNSS模块固件升级流程

最近的一个项目中,有通过嵌入式设备对使用联发科MT33xx GNSS模块升级固件的需求。供应商只提供了一个PC端升级工具,并表示出于保密考虑,不会提供升级流程相关文档。但将已出售的嵌入式设备中的GNSS模块一一取出,使用PC升级显然是不现实的,必须使用嵌入式设备直接对其内置的模块进行固件升级。 幸而在Google上搜到了一个使用同款芯片的GNSS解决方案供应商的文档(Telit_Jupiter_M

2017-12-21 10:28:03 2237

原创 为Source Insight添加TODO、FIXME等注释标签的高亮

在程序中加入TODO、FIXME等特殊的注释标签有助于提高代码编写效率,特别是多人协作的情况下。一般用法如下: TODO: + 说明: 如果代码中有该标识,说明在标识处有功能代码待编写,待实现的功能在说明中会简略说明。 FIXME: + 说明: 如果代码中有该标识,说明标识处代码需要修正,甚至代码是错误的,不能工作,需要修复,如何修正会在说明中简略说明。 XXX:

2017-09-29 20:13:33 4753

原创 基于pthread的C++阻塞队列模板类的实现

在多线程处理数据时,常用生产者/消费者模型,而在这两者之间存在着一个仓库,通常使用阻塞队列实现。 阻塞队列即消费者发现队列为空时,阻塞在读取操作之前;生产者写入队列时,通知消费者解除阻塞状态,处理新的数据。这样即保证了操作的实时性,又避免了频繁轮询造成的不必要CPU消耗。 java中自带阻塞队列的实现,c++中则没有。在此使用pthread库的互斥量和条件变量实现一个简单的阻塞队列,并用模板进行

2017-09-01 17:55:50 1183

原创 Unix网络编程学习日记(五):基于epoll与管道的socket客户端

这又是一个不成熟的想法。为了尽可能减少对多线程、进程的依赖,减少内存占用,将之前的客户端程序中“发送”和“接收”线程合二为一,尝试使用非阻塞模式socket配合I/O复用实现socket客户端。不过,查阅资料后发现I/O复用更适合用于服务器程序而不是客户端。 其中很重要的一个原因是,使用I/O复用模型时需要对流进行监控,动态调用流对应的处理程序。对于一个简单的客户端程序,动态接收服务器发来的消息很

2017-09-01 14:50:20 596

原创 Linux进程与线程的比较

进程与线程的关系在Linux 2.6以后,系统使用了一种新的pthread线程库NPTL(Native POSIX Threading Library),但其实系统底层依旧使用轻量级进程(LWP)来实现线程这一机制,所以线程与进程的关系颇为繁杂。 首先要明确的是,某一进程中的所有线程共用同一“进程id”(pid)。但为了管理不同线程对系统资源的使用,这里引入了一个“线程组编号”(tgid)的概念。

2017-08-25 10:29:57 420

原创 Unix网络编程学习日记(四):基于select的单线程半双工socket客户端的实现

select()和pselect()允许程序监控多个文件描述符,等待一个或多个文件描述符变为I/O操作的“就绪”状态。一个“就绪”状态的文件描述符被认为可以接受内核提供的IO操作,比如不被阻塞地“read()”。 有趣的是,Unix的标准输入/输出也是一类文件描述符,可以和socket描述符同时被监听。所以,可以用select监听socket和stdin,保证实时接收网络数据的同时又不阻塞住键盘输

2017-08-15 09:02:30 421

原创 Unix网络编程学习日记(三):多进程全双工socket客户端的实现

多进程实现全双工socket客户端

2017-08-08 19:58:49 724

原创 Unix网络编程学习日记(二):多线程全双工socket客户端的实现

简单的多线程socket客户端的实现

2017-08-08 19:40:00 943

原创 Unix网络编程学习日记(一):半双工非阻塞socket客户端的实现

socket编程I/O模型简述,和一个简单的socket客户端的实现

2017-08-08 19:31:13 576

原创 使用Makefile终端参数实现跨平台编译控制

最近做的项目经常需要在x86和arm两个平台上测试,需要使用两套编译器,一套系统自带,一套来自于交叉编译环境。这时就需要为两个平台分别编写Makefile,但颇为不便。查阅资料后得知可以使用make configure调整编译选项,又显牛刀杀鸡。 一种较为简便的方式是在使用make指令时,添加额外参数以改变脚本中某变量的值,配合Makefile中的条件语句ifeq来控制编译过程。CFLAGS+=-

2017-08-07 20:24:25 1404

原创 在Linux下编译OpenCV_Contrib

在Linux下编译OpenCV_Contrib最近做人脸识别项目的时候,发现在OpenCV3包中包含了人脸检测算法所需的CascadeClassifier,但不含识别算法所需的FaceRecognizer。使用官网例程时,编译器会提示缺少opencv2/contrib/contrib.hpp。 查询资料后得知, 人脸识别等算法模块由于不够稳定,在OpenCV3版本中,被放在了OpenCV_Cont

2017-03-03 14:26:05 3423

原创 如何重新开启小米平板的USB计算机连接功能

今天使用小米平板连接电脑的时候不小心关闭了MTP,导致电脑无法识别平板。想重新打开时,找遍了系统设置选项竟然没有这个开关。查询论坛的解决方案大多推荐双清,代价实在太大。其实MTP的设置界面是安卓本身自带的,MIUI不知作何考虑隐藏了这个界面,所以是有办法将它调出的。这个下载安装QuickShortcutMaker这个应用,并将平板连接上电脑。在“渐进式搜索”->“活动“界面中搜索“USB”

2016-07-20 16:20:06 13472 3

原创 《Effective C++》笔记

从C转向C++条款1:尽量用const和inline而不用#define少用define定义某个常量。在调试时编译器永远不会看到被define的那个数据,影响调试效率。应将“#define PI 3.14”改为“const double PI = 3.14”,性能相差无几,在类型安全上更可靠。但是注意,若要定义一个指针型常量,需要写两个const,比如const char * const auth

2016-06-26 00:12:30 492

原创 Mactype与VirtualBox的兼容性问题

最近将win下的虚拟机从Vmware Player换成了VirtualBox,发现启动虚拟机时报错: exit code -1073741819 (0xc0000005) 读log后没有找到解决问题的关键,后来在知乎查到是与Mactype发生冲突。https://www.zhihu.com/question/27159349 解决方法很简单,在MacType用户向导中将VirtualBox的相

2016-04-18 22:51:26 1672

原创 openwrt中计划任务的设置

由于寝室零点断网,凌晨两点断电,故设置计划任务以定时关机。 crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。操作符号在一个区域里填写多个数值的方法:逗号 (‘,’) 分开的值,例如:“1,3,4,7,8”连词符 (‘-‘) 制定值的范围,例如:“1-6”,意思等同于“1,2,3,4,5,6”星号 (‘*’) 代表任何可能的值。例如,在“小时域” 里的星

2016-03-04 23:38:57 5998 1

转载 Ubuntu下Qt嵌入式开发平台的搭建

Ubuntu系统下Qt嵌入式开发环境的搭建

2016-03-04 23:12:37 1854

原创 斐讯K1路由器刷入openwrt及通过netkeeper连接校园网

一、刷入breed与openwrt1.下载好所需软件:TFTP32/TFTP64,用于刷入breed前为路由器上传文件 http://tftpd32.jounin.net/WinScp,用于在刷入openwrt后上传文件和执行命令行 http://winscp.net/eng/docs/lang:chsbreed,类似安卓的第三方recovery http://www.right.com

2016-03-04 22:18:56 23481 6

空空如也

空空如也

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

TA关注的人

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