自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(34)
  • 资源 (4)
  • 收藏
  • 关注

原创 RTSP客户端学习(一)——live555库的移植和验证

因为项目原因需要在海思Hi3531平台上实现RTSP客户端,之前没接触过流媒体,作为小白,就记录下学习过程吧。客户端和服务器端均采用live555,之前尝试过Darwin Stream Server作为服务器,可以播放样例视频文件,不能播放塞进去的H264文件。是Darwin不支持还是其他原因?未做深究1、  在桌面版linux系统中安装live555,这个很简单下载源码后解压,进入l

2013-09-10 18:26:05 7089 2

原创 RTSP客户端学习(一)——对live555库的移植和验证

因为项目原因需要在海思Hi3531平台上实现RTSP客户端,之前没接触过流媒体,作为小白,就记录下学习过程吧。客户端和服务器端均采用live555,之前尝试过Darwin Stream Server作为服务器,可以播放样例视频文件,不能播放塞进去的H264文件。是Darwin不支持还是其他原因?未做深究1、  在桌面版linux系统中安装live555,这个很简单下载源码后解压,进入l

2013-09-10 18:22:20 684

原创 海思Hi3520开发环境搭建

刚到手的Hi3520开发板,拿来第一件事当然是搭环境,本来调了那么多板子,这不是小菜一碟嘛,可就是挂NFS还浪费了快一个小时,郁闷的了,这倒也好,顺着Hi3520的脉络,就把这个环境搭建过程记录一下,权当记个笔记噻。。。买的是雅仪科技的Hi3520开发板,板子还是蛮好看滴,6800大洋。因为最多要驱动八块sata硬盘,所以板子采用的是计算机的ATX电源。拿过来之后立马接上串口,上电,擦,毫无反

2012-01-12 19:52:17 13665 2

原创 关于Zilog ZA9L0x烧写

前天拿到的Zilog Zatara(ZA9l0x)的开发平台,刚拿到的时候那个鸡冻啊,这外包装整个就一核武器钥匙箱包装嘛,导师给的任务是尽快把环境搭起来,评估一下这个平台,这个平台是上linux的,所以我想这个对于我来说应该是轻车熟路吧,但事实上还是有些波折,毕竟是大公司做的专用

2011-07-07 11:27:28 1744

原创 Hi3515——关于I2C和DS1339

<br />Hi3515的RTC模块貌似有BUG,文档上建议不要使用,所以只能外扩一个DS1339来作为实时时钟,但是找到海思给的linux源码,I2C和DS1339的驱动都没改,在make menuconfig里面改了一下,/dev目录下没反应,只能跟到bus_for_each_dev函数中,发现DS1339的驱动压根就么有挂到I2C的设备链表中,更纠结的是,连I2C的设备描述符都么有,悲剧鸟,难不成就像之前的串口一样又要自己动手。。。<br />仔细想了想,不对,我们A/D那块也是用I2C控制的,如果I

2011-05-06 17:05:00 4364 7

原创 关于Android平台下的H264客户端

之前开发了个Android平台下解码H264的客户端,现在回头来总结下吧:1、界面这个没什么好说的,任何平台下都很简单。。。2、解码器的移植找了一个从ffmpeg裁剪出来的H264解码库,然后移植到Android平台,这里要学习下JNI的知识。3、Java多线程了解java多线程的几种方式,我这里用的两个线程,一个从服务器收数据送到共享的缓冲区,另外一个从缓冲区取数据送到解码器解码并将图像输出。4、Android网络编程这里直接用的socket收发,还是蛮简单的,然后手机和服务器通信是通过wifi,我们只要

2011-04-09 13:01:00 3944 9

原创 Hi3515 UART2和UART3驱动加载

<br />这里主要想讲下海思Hi3515的UART2和UART3是如何被加载到内核中的,因为正在做一个项目需要使用四个串口,但海思提供的linux源码中只加载了两个串口的驱动,找了一圈,发现源码中没有现成的UART2和UART3的代码可以使用,只能自己动手改啦啊。。。<br />首先关于linux硬件模块的加载可以参考下面这篇博文:<br />http://hi.baidu.com/jackyu/blog/item/a89ba634e31418bcd1a2d3e5.html<br />好吧,我们进入正题,

2011-04-01 14:52:00 4852 8

原创 Ubuntu9.04下搭建Android开发环境

ubuntu版本为9.04,安装JDK 1.5、Eclipse 3.6(helios-SR1)、ADT、Android SDK1、安装java ,在终端下输入命令:sudo apt-get install sun-java6-bin注:如果系统为64位,则须安装 ia32-libs :sudo apt-get install ia32-libs。在安装时将被询问是否接受 Java license,接受。2、安装jdk1.51)为了安装JDK1.5,需要添加如下内容到/etc/apt/sources.list

2011-01-19 11:42:00 909

转载 信号量的P操作和V操作

1962年,狄克斯特拉离开数学中心进入位于荷兰南部的艾恩德霍芬技术大学(Eindhoven Technical University)任数学教授。在这里,他参加了X8计算机的开发,设计与实现了具有多道程序运行能力的操作系统——THE Multiprogramming System。THE是艾恩德霍芬技术大学的荷兰文Tchnische Hoogeschool Eindhov –en的词头缩写。狄克斯特拉在THE这个系统中所提出的一系统方法和技术奠定了计算机现代操作系统的基础,尤其是关于多层体系结构

2010-12-27 15:09:00 6653 2

原创 四相八位步进电机

<br /><br /> <br />上图为八相位时序状态图,步进电机的时序状态转换为:1001--1000--1100--0100--0110--0010--0011--0001--1001,为反序循环,并且每四个状态驱动步进电机走"one dot line",即一个点高度的整行,我使用的打印机为富士通的FTP-628MCL101,一行为384个点,所以每四个状态位步进电机走1*384个点。<br />下面贴上我的步进电机控制部分的代码:<br /><br />for(j=0;j<steps;j++)//

2010-12-20 15:44:00 3124 3

原创 可爱的中断

终端的测试都已经进入尾声了,暴露出来一个大问题,以前的测试都是在比较纯净的网络中进行的,现在放入真实的后台进行,刷卡的成功率变的只有三分之一甚至更低,那个纠结啊,尝试了多种方法,在网络底层纠结了一点时间,最终把目标锁定在网络低级中断上,这个网络低级中断的处理程序干的事情还真是多啊,而且网线一插上网络这块肯定是不停进中断的,消耗了CPU太多资源,而刷卡器接收数据中断的时钟是由刷卡器芯片提供的,这样的话必然会造成时序上的错位,刷卡肯定会错了啊,看来理论上可以说的通了,还得从实践上来证明它,这个简单,我在MAC的

2010-12-15 16:24:00 561

原创 o a so lo la

<br />o: 编译的目标文件<br />a: 静态库,其实就是把若干o文件打了个包<br />so: 动态链接库(共享库)<br />lo: 使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息<br />la: 使用libtool编译出的库文件,其实是个文本文件,记录同名动态库和静态库的相关信息

2010-12-06 20:14:00 451

原创 U-boot启动代码start.s中用到的汇编指令详解

<br />LDR 指令<br />LDR 指令的格式为:<br />LDR{条件} 目的寄存器,<存储器地址><br />LDR 指令用于从存储器中将一个32 位的字数据传送到目的寄存器中。该指令通常用于从存储器<br />中读取32 位的字数据到通用寄存器,然后对数据进行处理。当程序计数器PC 作为目的寄存器时,<br />指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。<br />指令示例:<br />LDR R0,[R1] ;将存储器地址为R1 的字数据读入寄存器R0。<br

2010-12-02 14:59:00 1164

原创 U-boot源码分析之start.s

硬件平台为东南大学自主研发的ARM720T芯片SEP4020代码目录:cpu/sep4020/start.s#include #include /* * Jump vector table *///_start是GNU汇编器默认的入口标签,.global将_start声明为外部程序可访问的.globl _start//向量跳转表,每条占一个字节,地址范围为0x00000000-0x00000020//ldr和str指令是用来在存储器和寄存器传递数据的,两者方向相反//ldr为存储器到寄存器,str为寄存器到

2010-12-02 14:45:00 877

原创 ARM7TDIMI中TDMI的意思

<br />ARM7TDMI 是ARM7 的基础上的改进版本,除了有ARM7 的32 位集成芯片的基本特色外,<br />它还有如下特点:<br /><br /> Thumb16 位压缩指令集。<br /> Debug 支持功能,使处理器能够暂停以响应一个debug 请求。<br /> Multiplier,增加了硬件乘法器,执行功能更强大,可以产生64 位的数据结果。<br /> ICE 硬件,embedded ICE 给出BREAKPOINT 和WATCHPOINT 支持。<br />这也是AR

2010-12-02 12:52:00 1837

原创 逆波兰表示法

<br />逆波兰记法中,操作符置于操作数的后面。例如表达“三加四”时,写作“3 4 +”,而不是“3 + 4”。如果有多个操作符,操作符置于第二个操作数的后面,所以常规中缀记法的“3 - 4 + 5”在逆波兰记法中写作“3 4 - 5 +”:先3减去4,再加上5。使用逆波兰记法的一个好处是不需要使用括号。例如中缀记法中“3 - 4 * 5”与“(3 - 4)*5”不相同,但后缀记法中前者写做“3 4 5 * -”,无歧义地表示“3 (4 5 *) −”;后者写做“3 4 - 5 *”。<br />逆波兰表

2010-11-11 12:20:00 1254

原创 signal函数的使用

<br /><br />signal系统函数调用提供了一种最简单的范例。然而,由于C原形声明的缘故使它看起来比实际复杂。signal函数将一个给定的函数和一个特定的信号联系。这里是FreeBSD中的定义(和一个typedef一起): <br />引用: <br />typedef void (*sig_t) (int); <br />sig_t   signal(int sig, sig_t func); <br /><br />第一个参数是目标信号。func参数是一个指针,指向某个处理该信号的函数。这个处

2010-11-04 18:47:00 565

转载 嵌入式存储器和文件系统(转)

    嵌入式系统与通用PC机不同,一般没有硬盘这样的存储设备而是使用Flash闪存芯片、小型闪存卡等专为嵌入式系统设计的存储装置,本文分析了嵌入式系统中常用的存储设备及其管理机制,介绍了常用的基于FLASH的文件系统类型。2. 基于Flash的文件系统     鉴于Flash存储介质的读写特点,传统的Linux文件系统己经不适合应用在嵌入式系统中,像Ext2fs文件系统是为像IDE那样的块设备设计的,这些设备的逻辑块是512字节、1024字节等大小,没有提供很好的扇区擦写支持,不支持损耗平衡,没有

2010-10-21 12:40:00 635

转载 可重入函数与不可重入函数(转)

<br /><br />    可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。<br />    也可以这样理解,重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括

2010-10-18 18:45:00 391

原创 十二星座的编程语言,不知道哪个Coding哥总结的哎,哈哈。。。

C——白羊座像Linus Tovards一样,虽然牛逼,但脾气不怎么好 C#——金牛座各方面都还不错,就是钱是个问题 Javascript——双子座很简单,很漂亮,很有趣,很不靠谱PHP——巨蟹座得一温柔体贴好用开源如PHP,夫复何求Java——狮子座知道您牛逼,自个儿得瑟去吧Perl——处女座号称像诗一样的语言,但是各种叽歪的符号会让你湿Python——天秤座一个字,漂亮 C++——天蝎座要不你搞定它,要不它搞定你 Matlab——射手座很活力,很广泛,很花心SQL——摩羯座虽然也很牛逼,但是也压抑的

2010-10-15 18:22:00 1146

原创 带智能卡控制器与不带智能卡控制器的区别

<br />  <br />做终端时用了两块片子,一块带智能卡控制器,另一块没有,折腾了一周,终于这两种情况下PSAM卡模块的代码折腾了出来,说说自己的感想吧。。。<br />发送过程7816上写的很清楚啦,网上也一堆,先发个五字节的命令头,然后再发送Data Field或Le Field,没啥好说的,呵呵。。。<br />先说说不带控制器的吧,这个得自己配时序啦,把ETU要配对哎,然后时序肯定得用硬件定时器喽,这个模块对时序还是有点要求滴,其实也不难,根据芯片主频把ETU算出来就好啦,当然算出来的ETU不

2010-10-14 21:33:00 739

原创 所有模块都通啦,记录下

将近一个月的努力,基本功能终于全部调通了啊,回头看看,收获还是蛮大的。软硬件问题都暴露出来不少,但所幸的是都一一解决了,下面的任务就是使代码更加强壮,不要在银行那边掉链子。。。记录下遇到的问题:屏显,按键,时钟:小问题啦,改了下驱动就OK啦串口:底层驱动有问题啊,超过16个字节的时候直接截断了,调了俺好一会哦备注下:串口用之前跑一下80M的startPSAM卡:这个折腾了我四五天,那个纠结啊,以前对其一无所知,而且涉及到时序,悲剧啊。。。之前的片子没有智能卡控制器,现在的片子有啦,于是把代码改了,调到后来有

2010-09-27 16:43:00 591

原创 ctags+vim

<br />1、ctags -R *<br />2、vim -t tag(tag为变量名或函数名)<br />3、ctrl+]  跳转<br />4、ctrl+t  返回

2010-09-10 14:01:00 361

原创 Qt如何国际化

<br />1.将需要国际化的字符串作为tr()函数的参数写入源程序中。<br />tr(const char *sourceText)函数会返回翻译字符串,如果没有合适的翻译则返回sourceText本身。<br />2.建立.ts文件.qm文件。<br />lupdate *.prj<br />这条命令会自动搜索源程序中需要翻译的字符串生成ts文件。<br />linguist<br />启动Qt语言家对搜索到的字符串进行翻译。<br />lrelease *.prj<br />将翻译好的.ts文件发布

2010-09-10 13:47:00 638

原创 磁条卡刷卡原理

<br />磁卡上的数据记录是按照IS07811的标准规定,有三个磁道。一磁道的数据记录密度为210bpi,最多可记录79个字母和数字,每个字符由7位编码.一磁道是只读磁道。二磁道的数据记录密度为75bpi,最多可记录40个数字,每个字符有5位编码,二磁道也是只读磁道。三磁道的数据记录密度是210bpi,最多可以记录107个数字,每一个字符由5位编码,三磁道是读写磁道。在银行系统的运用中。所有的银行磁条卡都运用二磁道。根据各个银行规定可以选择运用三磁道.一磁道暂不使用。<br /> <br />以二磁道为例

2010-09-10 13:43:00 8105

原创 7816的报文结构——APDU

<br /><br />命令APDU 包括头和主体(这可以在上面的图中看到)。头包括CLA,INS,P1 和P2 域。同T0 协议<br />一样,CLA 和INS 说明了应用的分类和指令。P1 和P2 用来详细说明具体指令,并由每一条[CLA,INS]<br />指令给出具体定义。APDU 的主体的长度可以改变,它可以作为命令的一部分传送数据到卡的APDU<br />处理器上,也可以用于传达一个从卡到阅读器的响应。Lc 域说明了作为指令一部分的传送到卡上的字<br />节数。也就是数据域的长度。数据域包括

2010-09-06 20:02:00 5456

转载 (转帖)既是老师又是师兄的临别赠言

他在评阅我们毕设论文时候就经常为计算机学生现状感到痛心疾首,在最后一次论文的 <br />修订中收到老师最长的一封邮件,洋洋洒洒三千字有余。一口气读完,感慨颇多,特别是 <br />读到96级和03级对比之处惊讶之余,心中生出感动的情绪来。在这个时候得到老师宝贵 <br />的“批评”,我想我是幸运的,因为之后的路更长。 <br />  <br />在此,我再次谢谢老师,谢谢这段时间在实验室遇到的其它老师和学长,各种教诲和帮 <br />助铭记于心。经过老师同意后转贴于此,希望使更多人获益。 <br /> 

2010-08-18 20:33:00 1798 1

原创 Nucleus启动过程

<br />一. INT_reset<br />    初始化处理器的硬件寄存器;<br />    设置处理器的片上译码器的寄存器,为FLASH,RAM,I/O等分配存储空间。 <br />二. 执行Int_Initialize<br />    设置必要的处理器/系统控制寄存器;<br />    初始化中断向量表;<br />    设置系统堆栈指针;<br />    设置定时器中断;<br />    计算定时器的优先级和堆栈;<br />    计算出可用的存储器的首地址;<br />    跳

2010-08-16 19:34:00 692

转载 delete与delete[]

<br />C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用new[] 分配的一组对象的内存空间的时候用delete[]。 <br />关于new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。 <br />对于(1),上面提供的程序已经证明了delete[]和delete是等同的。但是对于(2),情况就发生了变化。请看下面的程序:<br />#include <iostream>;<br />u

2010-08-05 18:48:00 417

原创 析构函数

析构函数 析构函数与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。以C++语言为例,析构函数名也应与类名相同,只是在函数名前面加一个波浪符~,例如~SetXy( ),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数,它也不进行

2010-07-08 19:36:00 599

原创 复位应答ATR的基本结构和数据元

<br />根据定义,复位应答是一系列字节的值这些字节是由卡作为对复位命令的响<br />应发送给接口设备的 ,在I/O电路上,每个字节在一个异步字符中传输<br />每个成功的复位操作都会导致I/O上的一个初始字符TS,TS后面按照下面的次<br />序跟有最多32个字符。<br /><br /> <br />初始字符定义了所有后继字符的解码协议。<br />格式字符声明了第一组接口字符和所有历史字符。<br />接口字符由格式字符声明的位图技术来指明。<br />历史字符由编码在格式字符中的一个数字来指

2010-06-03 19:22:00 5058

原创 半双工串行数据传输的小技巧

<br /><br /> <br />由图可知,LCD与MCU之间数据是半双工串行数据传输,而且采用的是软件模拟时钟总线的方法。<br />通常我们在屏上显示数据时都是采用读改写的方法,这里我们可以有一个小技巧:<br />定义一个LCD_Page*LCD_Col大小的数组作为LCD缓存,数据中的每个元素对应的是屏上相应位置的那个字节。我们在往屏上写数据的同时也往LCD缓存中相应位置写入数据,这样就可以直接修改缓存中的数据,再将其写入LCD,如此一来可以省去从屏上读数据的这个过程,方便不少,具体的实现函数如

2010-05-31 21:29:00 1106

原创 字符显示原理

一、字符与字模驱动程序当中,字符库的数据采用了与一般的单色点阵LCD的数据组成方式,即字模当中的一个位代表LCD显示中的一个像素点,取点方式为从左到右,自上到下的顺序。字模采用了以byte为单位的位流结构,即当一行取点不为8的整数倍时,补齐数据至8位,无用位填零。数据位补齐的原则与取模的方向有关:比如一个字符实际占用的点阵大小为6*12,若取模方向为从左到右,自上到下,则字符用8*

2010-04-16 19:55:00 2232

原创 路的开始。。。

Today。。。2010.01.20。。。研究生生活的第一个寒假即将到来。。。我真正的踏入了我的嵌入式开发生涯。。。发文纪念,祝福自己,我会好好努力。。。

2010-01-20 13:02:00 465

海思Hi3515编解码处理器用户指南

海思Hi3515编解码处理器用户手册,网上这款片子的资料比较少。。。

2011-05-24

U-boot源代码分析

很好的U-boot源码分析资料,非常详细,受益匪浅

2010-12-01

linux进程间通信——信号机制

对linux信号机制的详细阐述,包括signal,sigaction等函数的用法,并配以实例,通俗易懂,适合初学者阅读。。。

2010-11-04

VIM学习手册(经典)

经典手册,VIM学习枕边书,入门到精通的不二法门

2009-10-13

空空如也

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

TA关注的人

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