自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sunny04的专栏

生命不息,折腾不止。

  • 博客(84)
  • 资源 (3)
  • 收藏
  • 关注

原创 gdb 和 addr2line 调试 crash(包含如何调试so里面的crash)

嵌入式编程中会遇到各种crash的问题。 对于这样的问题,有两种调试方法: addr2line  和 gdb。 第一章   先讲解下gcc 编译加不加 -g 对程序的影响, 还有strip。 //1.1.cpp #include using namespace std;bool IsUnique(){        int k = 0, m = 0;

2014-12-12 21:01:40 10474 4

原创 linux 目标文件(*.o) bss,data,text,rodata,堆,栈

bss段:BSS段(bsssegment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文BlockStarted by Symbol的简称。BSS段属于静态内存分配。data段:数据段(datasegment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。text段:代码段(codesegment/textsegmen

2014-10-30 21:02:34 9667 5

转载 理解APCS-- ARM过程调用标准

因为需要在QNX Momentics中混合C语言和ARM汇编进行开发,于是初步了解了一下APCS。和大家分享一下我自己的学习过程,然后通过一个形象一点的类比讲述我自己的理解。 刚开始的时候我是不知道有APCS这回事,所以第一次从C语言中调用ARM汇编函数的时候返回就出错了。也正因为出错才去网上查找资料,知道了有APCS这回事。简单来讲,APCS是ARM汇编中调用过程中的一种约定,过程调

2014-10-25 21:17:13 2042

原创 linux进程间/线程间通讯(《unix网络编程-进程间通讯》读书笔记)

Linux进程间通信1.管道管道的主要局限性正体现在它的特点上:    只支持单向数据流;    只能用于具有亲缘关系的进程之间;    没有名字;    管道的缓冲区是有限的(管道制存在于内存中,在管道创建时,为缓冲区分配一个页面大小);    管道所传送的是无格式字节流,这就要求管道的读出方和写入方必须事先约定好数据的格式,比如多少字节算作一个消息(或命令、

2014-01-10 15:12:47 1624 2

原创 OpenCV2.4.4 移植到arm平台过程详解,及 __extern_inline 错误的解决方案

在做porting 移植移植Opencv之前, 需要提前了解下CMAKE cross compiling的工作原理。 因为现在opencv 自从2.0版本后采用 cmake编译, 而以前的版本用的是autotools。 编译的方式发送了变化, 所以看下cmake 还是很有必要的。 这里可以参考下: http://www.vtk.org/Wiki/CMake_Cross_Compiling

2013-08-01 18:28:05 1983

原创 动态库编译环境 CPLUS_INCLUDE_PATH 引发的bug追踪定位过程

动态库编译环境CPLUS_INCLUDE_PATH 引发的bug追踪定位过程问题背景:最近做项目,同一份动态库代码,A同学编译出来可以正常加载运行; B同学编译也能成功,但加载的时候提示 动态库有未定义符号 XXXX。 A同学编译出来的so里面,没有这个符号。问题定位过程:1. 用nm 查看未定义符号XXXX : nm a.so| grep XXXX 查看该符号是不是 未定义的。2. 查看这个未定义的符号来自哪里。 看看nm的参数有没有办法把源文件打印出来。nm [o...

2021-01-30 21:15:46 392

原创 scp 动态库导致core的原因分析

scp 动态库导致core的原因分析:项目背景:我们写的业务代码,编译出来是so文件,用exe进行dlopen加载so动态库。 在服务器上面,我们会使用 scp 把新编译的so拷贝到服务器上面。 这样导致的问题是core的位置不固定,杂乱无章。原因分析:(from 和 to 都是我们编译的动态库,有正在运行的程序引用它):cp from to // to文件是已经存在的。 被覆盖文件 to的inode依旧不变(属性也不变),内容变为from的scp 172.172.xx.xx:/from

2021-01-28 20:37:34 508

原创 双buffer可用性设计-路由并发读写

2020-11-02 17:49:32 279

原创 centos系统-线程栈空间

1.  一个进程有自己独立的进程空间,存在于虚地址,在32位机上都是0-4G2.  创建了多线程,各个线程要求有自己独立的栈,这些独立的栈是怎么分布的呢?   单线程程序只不过是多线程的一种特殊形式,每创建一个线程时,为每一线程在进程内的栈空间上化分出一片区域,作为该线程的栈空间.并且在线程的描述结构里面应当有保存某些寄存器如esp,ebp之类的数据结构的定义.进程的子线程们有各自的私有栈,可以共...

2018-06-02 15:32:11 815

转载 Linux进程栈和线程栈

总结:    1、进程主线程的栈大小是在进程执行的时刻才能指定的,即不是在编译的时候决定的,也不是在链接的时候决定的     2、进程主线程的栈大小是随机确定的至少比线程栈要大,但是不到线程栈大小的2倍 (ulimit -s 查询到的是线程的栈大小,)    3、线程栈大小是固定的,也就是ulimit -a 显示的值   4.  线程的栈大小, 不是从进程主线程栈大

2017-04-17 15:11:42 968

转载 电商技术解密之商品详情页

转自: https://mp.weixin.qq.com/s/jQNCjAk3EfaW8E48QY7EIg今天来跟大家聊聊商详,商详是展示商品详情信息的一个页面,整个购物流程比较重要的一个部分,承载着网站的绝大部分流量。为了提高转化率构成商详的元素非常丰富,有大量的图片、部分商品还有视频介绍、有相对静态的商详模板,有实时变化的价格、促销、库存。如何让用户快速流畅的打开商详?如何尽量减少用户

2016-12-09 17:48:18 1737

原创 find mtime参数+号,-号,不带符号的用法

find . -mtime +0 -type f -name "oms*" | xargs rm -f 删除24小时以前 oms格式的文件     #按文件更改时间来查找文件,-n指n天以内,+n指n天以前。大家在使用find命令中的mtime参数时候,会看到官方的解释如下:-mtime nFile's data was last modified n*24 h

2016-05-24 10:52:58 16184 2

转载 nginx负载均衡策略及方向代理原理

nginx的负载均衡策略可以划分为两大类:内置策略和扩展策略。内置策略包含加权轮询和ip hash,在默认情况下这两种策略会编译进nginx内核,只需在nginx配置中指明参数即可。扩展策略有很多,如fair、通用hash、consistent hash等,默认不编译进nginx内核。首先来介绍下Nginx的反向代理。代理服务器一般分为正向代理(通常直接称为代理服务器)和反向代

2016-01-14 17:53:03 787

转载 shell脚本中单引号和双引号的区别

转自: http://blog.csdn.net/luo6620378xu/article/details/9081417shell脚本中的单引号和双引号一样都是字符串的界定符,而不是字符的界定符。单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外,但是字符串中不能出现单引号。(注意是所有,只是单引号本身不能够出现在其中)。    双引号用于保持引号内所有字符的字面

2016-01-13 11:13:44 803

原创 redis - 空格引起的bug

项目需要,使用redis把数据存储到内存。加快数据访问。 封装了redis的 set 和 get 的接口,代码如下://修正这个bug的代码如下:int CRedisApi::Get(const std::string& strKey, std::string& strValue){ std::string cmd = "get " + m_GetKey(strKey); r

2016-01-08 17:17:48 6390

原创 linux 和 window 的EOF

学习linux 和 window 的EOF,记录如下。1. 文件read在window下创建一个文件,输入如下: 文件名: window.log 123456789 123 在linux下也创建一个文件,输入如下: 文件名: linux.log 123456789 123在16进制下查看比较两个文件,截图如下: window.log linux.log 可见,window.

2015-12-09 17:30:12 1230

原创 python遇到的问题

1. import 可以导入同一级目录下的py文件, 例如 test1.py和 main.py 是同一个目录下的两个文件。#test1.pydef test():    print "this is test"#main.pyimport test1test1.test()     #需要在函数名前面加上文件名这样调用是正确的。或者这样调用#test

2015-11-28 14:42:37 457

原创 linux通配符,grep和 egrep区别

前些天写字符串匹配的脚本,如下:  1 #!/bin/sh  2   3 echo"path: /home/appadmin/workspace"  4 echo"usage: "$0" [h|cpp|both|all] string_symbol"  5 echo"space use: grep ' 'str"  6   7 if [ $1 = 'h'];  8

2015-11-28 12:11:09 14337 1

原创 bash学习

1. 文件开始添加:   #!/bin/bash   : 表明这个脚本需要使用bash shell来运行2. $X : 这种格式来应用变量, 有当变量值包含空格时需要加上引号3. 等号(=)两边不能有空格。 错误例子: X = hello4. shell将每一行命令视为命令及其参数的集合,以空格分隔。foo=bar就被视为一条命令; foo = bar 的问题就在于shell将空格分开

2015-08-07 09:42:56 550

原创 linux 性能分析工具

1. iostat-d -k 1 10      -- 查看IO吞吐量2. iostat-d -x -k 1 10    --查看IO设备使用率( %util ),响应时间(await)3. cat /proc/net/sockstat  查看socket状态4. iptraf – 查看实时网络状态5. tcpdump – 查看详细网络流量数据包6. net

2015-08-05 11:24:33 574

原创 单buffer,双buffer和三buffer的区别

2015-08-04 15:26:38 2188

原创 I/O设备如何读取数据

现在I/O设备与主存之间,移动数据(包括读入和写出)都需要使用DMA技术。  DMA: 直接存储器访问DMA单元能够模拟处理器,从而获得对系统总线的控制权,就像处理器一样。 为实现这一点,DMA需要在系统总线上面和存储器进行双向的传送数据。 DMA技术的工作流程如下:当处理器想读或者写一块数据到I/O设备时,它给DMA模块发送下面的命令:1. 有一个

2015-07-31 18:16:43 2939

原创 进程切换

1. 执行模式大多数处理器至少支持两种执行模式: 用户模式和特权模式(也叫内核模式)。 例如读取或改变诸如程序状态字之类的控制寄存器的指令,原始I/O的指令和内存管理相关的指令。 用户程序运行在用户模式下。 使用两种模式的原因是可以保护操作系统和重要的操作系统数据表(如进程控制块等)不受用户程序的干涉。1.1 什么情况下,执行模式会切换到特权模式?当用户调用一个操作系统的服务(系统AP

2015-07-31 15:33:52 1409

转载 浅谈无缓存I/O操作和标准I/O文件操作区别 (转载)

转自: http://blog.csdn.net/cowbane/article/details/6630298  首先,先稍微了解系统调用的概念:    系统调用,英文名system call,每个操作系统都在内核里有一些内建的函数库,这些函数可以用来完成一些系统系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和

2015-07-31 13:54:32 609

原创 封装printf函数,让log可以打印文件名和行号

///////////////////////////////////////////////////////////////////////////////// Printf\033[0m 關閉所有屬性\033[1m 設置高亮度\033[4m 下劃線\033[5m 閃爍\033[7m 反顯\033[8m 消隱\033[30m -- \033[37m 設置前景色

2015-07-30 09:53:42 3586

转载 Linux下查看分区/文件夹大小

Linux下查看分区/文件夹大小linux下:一套电脑可以有多个硬盘,每个硬盘只能有总个数不能超过4个的分区(包括主分区和扩展分区)扩展分区可以划分为多个逻辑分区。df命令可以显示目前所有文件系统的可用空间及使用情形.参数-h 表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。例如:[yayug@yayu ~]$ df

2015-07-24 17:39:23 2248

原创 openCV整理的资料

OpenCV这一名称包含了Open和 Computer Vision两者的意思, 是有intel资助的开源项目。  (会用到线性代数的知识)computer vision:计算机视觉OpenCV作为开放的数字图像处理和计算机视觉软件平台,有以下特点:    ① 开放C源码。     ② 基于Intel处理器指令集开发的优化代码。     ③ 统一的结构和功能定义。

2015-07-24 11:11:11 534

原创 C++四个新的类型转换操作符

C++通过引进四个新的类型转换操作符克服了C风格类型转换的缺点,这四个操作符是:—const_cast( expression)dynamic_cast( expression)static_cast( expression)reinterpret_cast( expression) 在大多数情况下,对于这些操作符你只需要知道原来你习惯于这样写:(type) expres

2015-07-20 11:17:08 809

转载 转:线程池原理及创建(C++实现)

本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。 为什么需要线程池 目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务器

2015-07-18 23:07:32 524

转载 五大算法思想

五大算法思想分治算法一、基本概念   在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……    任

2015-07-09 13:53:19 8119 1

原创 thread线程栈size及局部变量最大可分配size

进程是操作系统的最小资源管理单元, 线程是操作系统最小的执行单元。 一个进程可以有多个线程, 也就是说多个线程分享进程的资源,包括栈区,堆区,代码区,数据区等。sundh@linhaoIPTV:~$ ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedsc

2015-07-08 17:20:16 7829 1

原创 int float double 最大值,最小值及内存分布

拿32bit X86机器测试: /* coder: ACboy date: 2010-3-1 */ #include #include using namespace std; int main() { cout << "in

2015-07-07 20:07:16 20042

原创 如何排序大文件?

在某些应用中,因为内存资源有限制,而要排序的文件很大(比如10G的文件,只有10M的内存)主要的思想是:1 分割文件,使分割的文件能全部加载到内存。2 分别排序每一个分割的文件3 合并文件 : 每次顺序查找当前内存中的最小行 如下是一个简单的window上的实现://单行最大长度lEN_LINE - 1#define LEN_LINE 80in

2015-07-07 11:10:19 1075

转载 GPU:并行计算利器

摘自: http://blog.jobbole.com/87849/1 GPU是什么如图1所示,这台PC机与普通PC机不同的是这里插了7张显卡,左下角是显卡,在中间的就是GPU芯片。显卡的处理器称为图形处理器(GPU),它是显卡的“心脏”,与CPU类似,只不过GPU是专为执行复杂的数学和几何计算而设计的。GPU计算能力非常强悍,举个例子:现在主流的i7处理器的浮点计算能力是

2015-07-02 10:31:12 789

转载 Unix/Linux的 mmap()内存映射

mmap()UNIX网络编程第二卷进程间通信对mmap函数进行了说明。该函数主要用途有三个:1、将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能;2、将特殊文件进行匿名内存映射,可以为关联进程提供共享内存空间;3、为无关联的进程提供共享内存空间,一般也是将一个普通文件映射到内存中。函数:void *mmap(

2015-06-09 15:07:52 1599

原创 github创建工程

1. 在github网站上面创建一个 repository 。 参考网站: https://help.github.com/articles/create-a-repo/2. 安装Git客户端(Linux)#yum install git git-gui3、 生成密钥对,这样项目可以push到 GitHub上#ssh-keygen -t rsa -C "[email protected]"

2015-06-02 12:03:12 642

原创 早期工作项目总结

2008年毕业参加工作,在FOXCONN参与了 手机嵌入式APP开发工作,今天总结下:硬件: 手机嵌入式平台: window mobile 6.1图形绘制引擎: Edgelib场景:  短信及拨号界面开发开发的UI界面如下:                       图1-1

2015-05-27 16:55:54 577

转载 设计模式读书笔记-----访问者模式

生老病死乃常态,是我们每个人都逃脱不了的,所以进医院就是一件再平常不过的事情了。在医院看病,你首先的挂号,然后找到主治医生,医生呢?先给你稍微检查下,然后就是各种处方单(什么验血、CD、B超等等,太坑了。。。。),再然后就给你一个处方单要你去拿药。拿药我们可以分为两步走,第一步,我们要去交钱,划价人员会根据你的处方单上面的药进行划价,交钱。第二步,去药房拿药,药房工作者同样根据你的处方单给你相对应

2015-05-20 23:23:20 463

转载 设计模式读书笔记-----中介者模式

在我们的生活中处处充斥着“中介者”,比如你租房、买房、出国留学、找工作、旅游等等可能都需要那些中介者的帮助,同时我们也深受其害,高昂的中介费,虚假信息。在地球上最大的中介者就是联合国了,它主要用来维护国际和平与安全、解决国际间经济、社会、文化和人道主义性质的问题。国与国之间的关系异常复杂,会因为各种各样的利益关系来结成盟友或者敌人,熟话说没有永远的朋友,也没有永远的敌人,只有永远的利益!所以国与国

2015-05-20 10:15:05 394

转载 设计模式读书笔记-----桥接模式

转自: http://www.cnblogs.com/chenssy/p/3317866.html在开始学java的时候老师讲到继承的时候,总是喜欢用一个例子来讲解,那就是画图,这里有一个画笔,可以画正方形、长方形、圆形(这个大家都知道怎么做吧,我就不解释了)。但是现在我们需要给这些形状进行上色,这里有三种颜色:白色、灰色、黑色。这里我们可以画出3*3=9中图形:白色正方形、白色长方形、白

2015-05-19 22:09:11 493

教导如何使用搜索引擎

教导如何使用搜索引擎,里面有详细的介绍。 学会了可以帮助人节省很多时间。

2011-01-12

介绍学习C++的各个层次书籍

详细介绍了该如何学习C++的书籍,把C++最重要的读物按照由浅到深的层次排列。

2011-01-12

JIL Widget System API Specification - Handset API v1 2 2.pdf

这个API文档是关于JIL Widget的,由中国移动提供。这些诶API接口可以创建基于Web的应用程序。

2010-07-25

空空如也

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

TA关注的人

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