- 博客(46)
- 资源 (2)
- 收藏
- 关注
转载 vlc 详细使用方法
Usage: vlc [options] [stream] ...You can specify multiple streams on the commandline. They will be enqueued in the playlist.The first item specified will be played first.Options-styles: --opt
2011-11-30 17:14:38 111748 6
转载 C++ 学习50条忠告
1.把C++当成一门新的语言学习(和C没啥关系!真的); 2.看《Thinking In C++》,不要看《C++变成死相》(C++编程思想,翻译的非常差); 3.看《The C++ Programming Language》(这本东西有影印板的)和《Inside The C++ Object Model》 ,不要因为他们很难而 我们自己是初学者所以就不看; 4
2011-11-29 19:04:17 1011 1
原创 Linux下检测以太网链路状态代码
该方法用到了ioctl操作ETHTOOL,需要root权限, 否则会失败! // PARAM: devname -- just the device name such as eth0, eth1 etc.// RETURN: -1 -- error , details can check errno// 1 -- interface link up//
2011-11-25 11:07:54 5096
转载 QT Webkit的插件Plugin设计实现
Qt Webkit中浏览器插件Plugin设计实现是我们要介绍的内容,我们都知道浏览器中有一套由Netscape浏览器传承下来的插件接口,包括webkit,firefox都是支持的,但是那个开发起来比较困难,并且是平台相关的,借助于Qt的跨平台的特性,可以方便地为Qt开发出一套跨平台的插件。 QtWebkit中插件可以有两种,一种Mime必须是application/x-q
2011-11-24 18:10:13 7593 1
原创 Linux下的段错误调试
如果你对core dump和gdb很熟悉的话, 就直接跳过这篇文章好了。 先来看下如下代码段:#include void foo(char *p){ char s[] = {"foo"}; printf("%s...\n", s); *p = s[0]; return; }int main(){
2011-11-24 16:45:46 2248
原创 C嵌入式软件的编码错误爬行榜
排名说明:该排名是针对n次走读结果的统计该排名的走读产品为C编写的嵌入式软件 第九名:编码规范类变量命名不一致运算符和表达式不易理解过度使用编码技巧减低了可读性直接使用数字常量而非宏定义书写不一致等等 第八名:接口类函数参数类型或个数不一致模块间常量或宏重复定义且不一致头文件和库不一致,不同版本 第七名:参数变量类使用未初始化变量重新
2011-11-24 15:01:36 1076
转载 实时嵌入式软件开发的25个常见错误(四)
#8 第一个正确答案不是唯一的答案没有经验的程序员特别容易认为他们得到第一个正确答案是唯一的答案。开发嵌入式系统软件经常会让人感到灰心。花了数天才搞明白怎样设置寄存器以让硬件按照自己的意愿工作。在某个时候,噢!它终于能跑了。一旦跑起来了,程序员就会删去所有调试代码,然后将这些代码作为好代码合入模块中。永远不要再修改这些代码了,因为花了这么长时间调试,没有人愿意去破坏它。很不幸的是,第一次的
2011-11-24 11:03:29 1628
转载 实时嵌入式软件开发的25个常见错误(三)
#16 使用消息传送作为主要的进程间通信方式当软件按照功能模块划分进行开发的时候,首先想到的是以消息作为输入、输出。尽管这种方式在非实时环境(例如:分布式网络)应用的很好,但在实时系统应用中,却存在一些问题。在实时系统中,使用消息传输会引发三种主要的问题:1.消息传送需要同步,这是实时调度不可预知的主要原因。如果功能模块同步终止执行,将导致系统的时序分析变得困难,即便不是不可能。2
2011-11-24 10:58:48 2647
转载 实时嵌入式软件开发的25个常见错误(二)
#24 基于单一架构的归纳嵌入式软件的设计者可能需要开发能运用在不同的处理器上的软件。在此情况下,编程人员通常会先在其中的一种开发平台开始编软件,但是会在晚些时候为包装代码而做大量的准备工作。不幸的是,这样做通常弊大于利。这种设计试图过份的归纳出不同架构下的相同点,而不是不同点,但是设计者并不能预见到这些不同点。一种比较好的设计策略是在多个架构下同步设计和开发代码,归纳出那些不同架构
2011-11-24 10:51:33 1824
转载 实时嵌入式软件开发的25个常见错误(一)
英文原文由David B. Stewart撰写, 这篇论文对实时嵌入式软件开发的易犯错误做了深入分析,对我们的开发非常有指导意义。 David B. StewartSoftware Engineering for Real-Time Systems LaboratoryDepartment of Electrical and Computer Engineering and In
2011-11-23 11:04:56 2140
原创 消灭编译警告(Warning)
如何看待编译警告 当编译程序发现程序中某个地方有疑问,可能有问题时就会给出一个警告信息。警告信息可能意味着程序中隐含的大错误,也可能确实没有问题。对于警告的正确处理方式应该是:尽可能地消除之。对于编译程序给出的每个警告都应该仔细分析,看看是否真的有问题。只有那些确实无问题的警告才能放下不管。说明:由于编译的警告各种各样,根本不可以一一罗列出来,下面只是列举出比较典型的一些警告,还有一些
2011-11-23 10:29:11 65665
原创 或许在你的意料之外(一)
1. 下面代码的输出是YES or NOchar c;c = 0xF0;if (c == 0xF0) printf("YES\n");else printf("NO\n"); 解析:(以32位系统为例)首先, 编译器将0xF0视为int的, c 与0xF0比较的时候, c会作类型提升,char->int,提升后的结果是0xFFFFFFF0
2011-11-22 17:17:42 934
原创 HTML5 统一 RIA江湖?
江湖上传言,HTML第5代传人要血洗Flash门, Flash门派很有可能在江湖上消失。 Flash门派是中原(RIA:Rich Internet Application)的大门派,如果Flash门派都被灭了, 那么中原的其它门派,比如SliverLight, Laszlo, Bindow, 还有后起之秀JavaFX,它们也都不能幸免。 HTML门派的第5代传人武功盖世,相对
2011-11-22 11:28:09 1322
原创 Dbus简介
Linux下基本的通信方式有如下8种:1. 管道pipe: 进程需要共同祖先2. 命名管道named pipe, 也就是fifo: 文件系统中有对应文件名3. mapped memory:把一个共享的文件映射到自己的进程地址空间4. 消息队列:信息量大,格式灵活5. 共享内存:速度最快6. 信号量:同步手段7. socket:最灵活8. signal:比较复杂,携
2011-11-21 11:26:18 1974
原创 Linux实现函数和全局变量的#ifdef功能
大家都知道,我们可以用#ifdef来检测这个宏存在与否,分别在不同的处理,比如:int main(){#ifdef __FOOprintf("Defined!\n");#elseprintf("Not defined");#endifreturn 0;}如果__FOO在前面定义了,那么就输出Defined!,否则就输出Not defined.但如果是函数
2011-11-18 15:26:22 4181
原创 16进制打印函数
把数据内容dump出来, 按照如下的内容格式:00000000 00 00 00 00 82 47 00 00 9c 00 00 00 83 05 00 00 |.....G..........|00000010 df a1 00 00 a0 00 00 00 79 0a 00 00 30 f8 00 00 |........y...0...|00000020 a0 00
2011-11-18 13:47:34 4043
转载 html5 和 flash的性能比较
新闻来源:solidot近日,一项评测向人们证明了:HTML5在性能上仍远远落后于Flashplayer。测试使用了Droid X, Nexus One, Desire HD, Atrix, PlayBook, Galaxy Tab, Xoom 等设备,分别测试了位图,矢量图,数值运算,视频播放等项目。位图: 所有设备上Flash的位图性能都优于HTML5,平均而言Flash的速度是HTM
2011-11-17 18:56:00 1155
原创 MPEG2/TS 获取Video PID
从PMT表中获取Video PID的函数代码 GetPmtPid函数的实现见:http://blog.csdn.net/myaccella/article/details/6982596#define MAKE_PID(p) (((p[0]#define MAKE_WORD(h, l) (((h) Little endian 的结构定义typedef struct {
2011-11-17 18:00:09 3734
原创 MPEG2/TS获取PCR PID方法
一个简单的从指定MPEG2/TS文件中获取PCR PID的函数, PMT的头结构中有PCR PID,我们首先得到PMT PID,然后分析PMT包,就可以得到PCR PID了。GetPmtPid函数的实现见:http://blog.csdn.net/myaccella/article/details/6982596MAKE_PID:#define MAKE_PID(p) (((p[0
2011-11-17 17:10:52 8719
原创 MPEG2/TS 获取PMT PID
一个简单的从指定MPEG2/TS文件中获取PMT PID的函数, 注意代码中的注释。 #define MAKE_PID(p) (((p[0]ushort GetPmtPid(const char* filename){#define TSPACKET_SIZE 188 ushort pid; uchar buf[TSPACKET_SIZE]; uch
2011-11-17 16:39:30 4655 1
原创 MPEG2/TS 包结构简述
TS 包由以下3部分组成:包头: 4字节, 同步,识别,检错和加密用自适配域:可选包数据:最大184字节(不存在自适配域)4字节184字节包头自适配域包数据 4字节包头结构:1字节1比特1比特1比特13比特
2011-11-17 16:01:00 4792
原创 插件式架构设计演义
最近对几种流行的多媒体架构发生了兴趣,从Linux的gstreamer, 到Android下的opencore, 以及KreaTV的streamer,发现它们都走了同一条路,就是插件式架构。插件式架构最大的特点就是分离了核心框架与扩展部件, 其优点不言而喻。高扩展性:这一点无需多说。高开放性:插件接口公开后,第3方就可以方便的参与进来,独立开发插件。低耦合性:核心框架和扩展部件只要
2011-11-17 11:11:05 1402
原创 Linux下用管道实现进程全双工通信的代码
直接看代码, 里面已经有注释了。 主程序:int main(){ char buf[256]; int fdin[2]; int fdout[2]; int pid; int size; // 创建全双工管道 pipe(fdin); pipe(fdout); pid = fork(); if (pid
2011-11-17 10:49:34 5261 1
原创 怎样获取MPEG2/TS流的PTS值
5个字节总共5*8 = 40bits = 4 + 3 + 1 + 15 + 1 + 15 + 1'0011' 4 bslbf PTS [32..30] 3 bslbfmarker_bit 1 bslbfPTS [29..15] 15 bslbfmarker_bit 1 bslbfPTS [14..0] 15 bslb
2011-11-16 16:36:52 4654 1
原创 插件式架构设计演义 - 序
花开花落,花落花开,少年子弟江湖老,转眼步入流媒体领域已有些年头了。初入该领域的时候,由于需求比较单一, 流媒体的封装只要求PS的,编解码格式为MPEG2/MPEGA,输入源为RTSP/RTP或者UDP Multicast, 核心的Parser(Framing)/Demuxer/Decoder代码又由芯片厂商以2进制的形式提供,基本工作也就是在上层实现一个媒体播放的控制状态机实现以及数据缓
2011-11-16 11:37:16 857
转载 追MM与23种设计模式(五)
20、STATE 跟MM交往时,一定要注意她的状态哦,在不同的状态时她的行为会有不同,比如你约她今天晚上去看电影,对你没兴趣的 MM就会说“有事情啦”,对你不讨厌但还没喜欢上的MM就会说“好啊,不过可以带上我同事么?”,已经喜欢上你的MM 就会说“几点钟?看完电 影再去泡吧怎么样?”,当然你看电影过程中表现良好的话,也可以把MM的状态从不讨厌不喜欢变成喜欢哦。
2011-11-16 11:34:47 492
转载 追MM与23种设计模式(四)
15、INTERPRETER 俺有一个《泡MM真经》,上面有各种泡MM的攻略,比如说去吃西餐的步骤、去看电影的方法等等,跟MM约会时,只 要做一个Interpreter,照着上面的脚本执行就可以了。 解释器模式:给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来 解释这个语言中的句子。解释器模式将描述怎样在
2011-11-16 11:29:11 538
转载 追MM与23种设计模式(三) .
10、FAÇADE 我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也 不会。幸好相机有Façade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整, 这样MM也可以用这个相机给我拍张照片了。 门面模式:外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一
2011-11-16 11:23:35 493
转载 追MM与23种设计模式(二)
5、SINGLETON 俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只要说道“老公”,都是指的同一个 人, 那就是我(刚才做了个梦啦,哪有这么好的事) 单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。 单例模式只应在有真正的 “单一实例”的需求时才可使用。
2011-11-16 11:16:10 612
转载 追MM与23种设计模式(一)
1、FACTORY 追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基, 只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory. 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。 缺点 是当产品
2011-11-16 11:00:10 518
原创 浅谈C/C++中的浮点值
先从一个例子出发: #include void main(){ float f = 0.01; char s[32+1]; int i; unsigned int c = *((unsigned int*)&f); for(i=0;i s[31-i]=(char)(c&1)+'0'; c>>=1
2011-11-15 18:30:02 741 1
原创 说说DirectFB的WM
DirectFB 的 WM有两种, Default和 Unique: Default:1. Window Stack 管理,Stack插入,删除、调整Z-Order等。2. Focus管理, 把消息送给Focus窗口3. 快捷操作,关闭,移动,放大等。 Unique:1. 包含Default所有功能2. 装饰,除了标题名称没有外,其它比如圆角化,icon, 边框
2011-11-15 10:56:57 880
转载 编程经验谈
老早以前摘录的一篇文章,觉得对普通的软件开发者还是有点借鉴作用的。 原文作者:金蝶 袁红岗不知不觉做软件已经做了十年,有成功的喜悦,也有失败的痛苦,但总不敢称自己是高手,因为和我心目中真正的高手们比起来,还差的太远。世界上并没有成为高手的捷径,但一些基本原则是可以遵循的。扎实的基础。数据结构、离散数学、编译原理,这些是所有计算机科学的基础,如果不掌握他们,很难写出高水平的程序。
2011-11-15 10:42:48 650
原创 说说Linux线程的栈空间
刚接触C编程时, 比较喜欢用局部变量, 因为局部变量是在栈上分配的,会自动释放, 不会造成内存泄漏, 碎片什么的,觉得比malloc/new 出来的堆内存好使多了,大家可能说malloc/new可以分配动态内存,其实linux/win32的大多数平台提供了一个类似的函数alloca也可以来动态的分配栈内存。 栈变量正用得不亦乐乎的时候,悲剧发生了, 程序运行中老是出现莫名其妙的
2011-11-15 10:35:46 4040 1
转载 Broadcom webkit(基于directfb)编译过程
原帖出处:http://hi.baidu.com/kurbylee/blog/item/82b9c6f6d17eeb3e720eec81.htmlBroadcom webkit(based DFB)编译过程1》平台准备 1.1 确认开发包已经解压到/home/broadcom目录,此时该目录下文件结构应至少包含如下几项:[liwei@localhost ]$ ls
2011-11-14 16:36:00 2650
原创 Linux网络配置代码
Linux下 配置网络接口比较简单, IP地址,掩码,缺省网管用ioctl,DNS直接操作/etc/resolv.conf文件就可以了。 void interface_configure(const char* address, const char* netmask, const char* gateway,
2011-11-14 14:49:04 1448 1
原创 简单设计KISS(Keep it simple and stupid)
A perfect design is an enemy of a good design.简单设计不是最好的解决方案, 却是最适合我们的。另外,简单设计带来的简洁性,易维护性,可扩展性必定能让我们受益匪浅。记住这句至理名言吧:越简单越不容易出错。 下面的简化手法可能对你的设计有用:尽可能使用固定大小数组 简单, 高效。 动态分配节约的内存空间也不一定有用,
2011-11-14 10:56:13 2363
原创 说说编译时断言(静态断言)
Robert C.Seacord的《C安全编码标准》的第3章第3条规则:DcL03-C.使用静态断言测试常量表达式的值那么什么是静态断言呢?静态断言就是编译时断言,它是针对动态断言(运行时断言)而言的,静态断言的用处就是能检查出编译时的错误,避免把错误带入到运行时。那么静态断言怎么实现呢? 方法比较简单,利用C/C++的数组声明中的数组下标必须是正值这个规则就可以了。#defi
2011-11-14 10:53:48 2591
原创 C的存储区
1.概述 在C中一般分为这几个存储区:1) 代码段区域(code segment):放置程序代码的区域,没有什么好多说的;2) 常量区域:放置程序中的常量,如以const作为前缀定义的,代码中形如"abcdef"的字符串,该区域内存在程序结束时释放;3) 初始化的全局/静态区域:全局变量和静态变量的存储是放在一块的,该区域在程序结束释放;4) 未初始化的
2011-11-11 11:07:52 986
原创 爱心编程
唉, 现在真是爱心泛滥的年代啊, 怎么连编程也跟爱心挂上钩了?呵呵, 说真的,在编程的时候不妨也付出点爱心啦,因为你的爱,可以让它们更坚强!下面,我们来看看采取点什么爱心行动:杜绝内存操作越界内存越界是程序的主要杀手之一,不管是读越界还是写越界,都是致命性的。而且,很多内存越界造成的错误是随机的,很难查!所以在编程时的时候一定要小心,对传入参数,边界值一定要严格检查。
2011-11-11 11:06:02 3435
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人