自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

可乐虎博客

【字字皆辛苦,句句均斟酌】

  • 博客(143)
  • 问答 (1)
  • 收藏
  • 关注

转载 Arm nandflash&norflash启动原理

部分ARM9的CPU内部都集成有一个SRAM,SRAM是英文Static RAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。这样他不需要初始化就能够直接使用。这与我们在外部扩展的大容量的SDRAM是不一样的,外部大容量的SDRAM是需要初始化后才能使用的,这点大家务必要搞清楚。这点在我做过移植的处理器:s3c2410(arm920t),s3c2440(arm92

2015-09-17 23:51:53 1700 1

转载 C语言计算日期间隔天数的经典算法解析

#include #include int day_diff(int year_start, int month_start, int day_start   , int year_end, int month_end, int day_end){ int y2, m2, d2; int y1, m1, d1;  m1 = (month_start + 9) % 1

2015-09-15 19:11:26 7021 1

转载 linux内核链表使用

Linux内核链表的核心思想是:在用户自定义的结构A中声明list_head类型的成员p,这样每个结构类型为A的变量a中,都拥有同样的成员p,如下:struct A{int property;struct list_head p;}其中,list_head结构类型定义如下:struct list_head {struct list_head *next,*prev;

2015-08-28 16:40:30 1053

转载 C/C++编译器与链接器工作原理

这里并没不是讨论大学课程中所学的《编译原理》,只是写一些我自己对C++编译器及链接器的工作原理的理解和看法吧,以我的水平,还达不到讲解编译原理(这个很复杂,大学时几乎没学明白)。要明白的几个概念:   1、编译:编译器对源文件进行编译,就是把源文件中的文本形式存在的源代码翻译成机器语言形式的目标文件的过程,在这个过程中,编译器会进行一系列的语法检查。如果编译通过,就会把对应的CPP转换成O

2015-08-23 09:10:05 1149

转载 汇编调用c函数为什么要设置栈

一.栈的整体作用 (1)保存现场/上下文 (2)传递参数:汇编代码调用c函数时,需传递参数 (3)保存临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量。 二.为什么汇编代码调用c函数需要设置栈 之前看了很多关于uboot的分析,其中就有说要为C语言的运行,准备好栈。而自己在Uboot的start.S汇编代码中,关于系统初始化,也看到有栈指针初始化这个动作。但是

2015-08-01 11:01:07 1639

转载 ubuntu下Jlink的安装、配置及使用

--PC环境:Ubuntu12.10 32bit--开发板:友善之臂mini2440--Jlink版本:J-Link ARM V8PS:本文主要参考资料:1、Ubuntu 10.04下J-Link配置及使用:http://bbs.chinaunix.net/thread-3641789-1-1.html2、JLink_Linux_V422.tgz中的README文档。安装过

2015-07-21 21:42:46 6635

转载 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2015-07-21 21:33:33 605

原创 解决shell脚本中 echo 怎么写入换行到文件

测试环境:ubuntu12.04 LTS版本echo >> file.txt即可,这种方法对于脚本开头是bash和sh效果都一样,而echo -e >> file.txt这种只适合与bash对于sh,会输入-e到文件然后再换行。而echo -e "\n" >> file.txt对于bash会连续换2行,对于sh,会输入-e和一个新空行到文件。

2015-07-13 00:19:37 80415 2

原创 ubuntu 用shell脚本实现将当前目录下所有目录中的某一类文件拷贝到同一目录下

当前目录下有一些文件和目录,其中每个目录里都有若干.txt文件,现在要求在当前目录创建一个新目录all,且将那些目录所有.txt文件都拷贝到目录all。在ubuntu12.04的shell脚本实现如下:#!/bin/sh# 提示信息echo "start:"# 定义变量dst=allpst=.txt# 复制文件到目标文件夹if [ -d

2015-07-07 22:24:34 5200 2

原创 sprintf、atoi、strlen、strcat、memset、sizeof的一些用法总结

一、sprintf的用法// 将字符串存入arr数组    sprintf(arr, "%s", "abc"); // 将整数转换为字符串存入arr数组sprintf(arr, "%d", 123); 二、atoi的用法// 将字符串转换为整数a = atoi("1243");三、strlen的用法1、strlen 字符串的结

2015-06-20 20:55:31 1387 2

原创 详解CPU与Norflash电路连接图以及工作原理

CPU地址线与16位nandflash地址线连接时错开一个位的原因:CPU发出的一个地址对应一个字节数据,而16位nandflash一个地址对应二个字节数据,CPU明白自己想读取哪一个字节数据,它就发送相应地址给nandflash,而nandflash是16位,故nandflash总是每次返回2个字节的数据,这时由CPU片上的nandflash控制器将CPU要的那个数据传给CPU。

2015-06-11 22:03:21 12242

转载 学习linux驱动经典书籍

Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书为《linux_device_driver 3rd Edition》,这是一本很经典的书,无奈Linux的东东还是过于庞大,这本侧重于实战的书籍也只能停留在基本的接口介绍上,更深入的东东只能靠我们自己摸索了。但万事总有一个开头,没有对Linux驱动整体框架的把握是很难做一个优秀的驱动开发者的。除了这本Jonathan Corbet,

2015-06-08 12:27:26 1153

转载 Linux mmap函数简介

Linux mmap函数简介 转载▼Linux提供了内存映射函数mmap, 它把文件内容映射到一段内存上(准确说是虚拟内存上), 通过对这段内存的读取和修改, 实现对文件的读取和修改, 先来看一下mmap的函数声明:头文件:原型: void *mmap(void *addr, size_t length, int prot, int flags, i

2015-06-05 00:14:55 858

原创 norflash和nandflash电路

一、norflash电路二、nandflash电路

2015-06-03 22:26:48 3154

原创 简介nandflash、norflash、ram、sram、dram、rom、eeprom、flash的区别

1、nandflash    Nandflash是IO设备,数据、地址、控制线都是共用的,需要软件区控制读取时序,所以不能像nor flash、内存一样随机访问,不能EIP(片上运行),因此不能直接作为boot。    S3C2440把Bootloader烧到nand flash上启动,因为在S3C2440里有一个内置的SRAM,叫做stepping stone(垫脚石,很形象

2015-06-02 23:49:59 4601

转载 norflash与nandflash芯片内执行(XIP)

为什么程序不能直接在nandflash上执行?出于这个疑惑带来了这篇博文,是我在网上找了很多资料后总结的,假如有误,希望马上指出来,免得我误人子弟。谢谢!首先认识下nandflash和norflash: NOR Flash 和 NAND Flash是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR Flash 技术,彻底

2015-06-02 23:45:27 1855

原创 Linux内核版本发布时间整理

有了这个Linux内核版本发布时间表(0.00到3.19,当然没有包含全部的版本),大家就可以看看自己用的版本是何时发布的了!或许有同学会大吃一惊,哇(⊙0⊙)我用的版本10年前就有了啊!发展史我也没写全,有时间和必要的话再写吧!版本号时间发展史0.001991.2-4两个进程分别显示AAABBB

2015-05-30 23:39:49 9155 2

转载 理解套接字和端口

1  套接字编程基础套接字,英文为socket,是一种双向的通信端口。位于网络中的主机通过连接的套接字提供的接口进行数据传输。本节将主要介绍使用套接字进行编程的一些基本概念。1.1  套接字与端口套接字是一种使用标准UNIX文件描述符(file descriptor)与其他程序通信的方式。套接字可以看作是处于不同主机之间的两个程序的通信连接端点。一方面程序将要传输的信息写入

2015-05-30 19:34:58 5741

转载 ip地址与整数之间的转换

方法1:IP地址转换为整数:IP地址每段可以堪称是8位无符号整数即0~255,把每段拆分成一个二进制形式,组合起来,然后把这个二进制数变啊层一个无符号32位整数。整数转换为IP地址:把这个整数转换成一个无符号32位二进制数。从左到右,每八位进行一下分割,得到4段8位的二进制数,把这些二进制数转换成整数然后加上“.”就可以了。IP地址转换成二进制的代码:#include

2015-05-30 17:55:56 2583

原创 理解电脑上的串口对应的端口号(com口)

每次看到台式电脑上的com1、com2都会迷惑不解,只知道它们是串口的端口号。其实,串口至少分为RS232串口、RS422串口、RS485串口(还有没有其它我就不知道了),其中RS232串口即为com口。而COM口( cluster communication port )即串行通讯端口,也就是我们所说的串口的端口。那么电脑上的com1、com2有什么区别呢?1、com1和co

2015-05-30 17:15:40 28349 1

原创 关于二维数组和指针

在C语言中有如下结论:一、在表达式中数组名都是其首元素的地址   但有两种情况除外:(1)当数组名作为sizeof操作符的操作数时,sizeof返回的是整个数组长度,而不是指向数组的指针长度(2)当数组名作为&操作符的操作数时,所产生的是一个指向数组的指针,而不是一个指向指针常量的指针   二、在任何变量的前面加&,就是取这个变量的地址。三、举例:若有二

2015-05-29 00:23:53 1526

原创 详解将驱动程序编译进linux内核

1、进入目录linux-kernel-samsung-dev\drivers\char2、新建目标目录01.led,将驱动相关文件复制到此目录   注:需确保复制的驱动文件是能正常运行的驱动3、在目录01.led里编写Kconfig文件menu "xxx"config XXX_LED        tristate "xxx_ggg210_led"     

2015-05-26 00:02:51 3037

原创 关于根文件系统的整理

根文件系统首先是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,但是相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载(mount)的第一个文件系统,内核代码的映像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,initt

2015-05-25 23:34:07 940

原创 详解linux平台芯片烧写流程

详解将持续更新!这里的烧写是针对板子里的nandflash中已经有uboot的情况。目的在于熟悉烧写流程及原理!连接好开发板,重新启动,进入u-boot交互界面,执行如下操作:一、配置网络 # pri# setenv ipaddr 192.168.64.11   (注:ipaddr 为开发板IP)# setenv serverip 192.168.64.12        (注:serverip 为Windows主机IP)# setenv gatewayip

2015-05-22 00:32:13 3859

原创 linux最简单的驱动编写及测试流程

本文采用nfs挂载网络文件系统的方式,手动创建设备节点,动态加载驱动模块,对理解驱动编写流程有很大好处!一、初级驱动执行流程:1、写好Makefile文件,里面包含将应用程序编译成app文件,将驱动程序编译成mydrv.ko文件的脚本2、在ubuntu里执行sudo make3、确保mydrv.ko和app被拷贝到nfs挂载的根文件系统的/modules目录

2015-05-21 00:20:50 3106

原创 linux /proc/devices文件与/dev目录区别

关于标题内容的几点解释:1、proc目录是一个虚拟文件系统,可以为linux用户空间和内核空间提供交互它只存在于内存中,而不占实际的flash或硬盘空间2、/proc/devices/里的设备是加载驱动程序时生成的3、/dev/下的设备是通过创建设备节点生成的,用户通过此设备节点来访问内核里的驱动

2015-05-20 23:53:21 4787 1

原创 LCD驱动移植配置总结

总结下移植LCD驱动时的参数配置情况:根据LCD数据手册和处理器数据手册LCD控制器部分,得到如下参数:一、基本参数(4个)1、宽度即水平像素点个数(eg:800)2、高度即垂直像素点个数(eg:480)3、描述单个像素点需要的位数(eg:32)4、刷新频率(eg:60)二、时序参数(6个)1、行同步信号前回扫时间2、行同步信号后回扫时间3、行同步信号脉

2015-05-19 21:53:13 2168

转载 内联函数和宏定义的区别

用内联取代宏:1.内联函数在运行时可调试,而宏定义不可以;2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 3.内联函数可以访问类的成员变量,宏定义则不能; 4.在类中声明同时定义的成员函数,自动转化为内联函数。文章(一)内联函数与宏定义  在C中,常用预处理语句#define来代替一个函数定义。例如:    #d

2015-05-18 21:41:58 600

原创 四线电阻触摸屏采样滤波算法C语言代码

四线电阻触摸屏的采样滤波算法,实践证明很好用的!

2015-05-16 01:01:56 3896

原创 求三个数值的中间值的宏定义

怎么用一个宏来求三个数值的中间值呢?请看:

2015-05-15 22:20:19 2380

原创 关于 可重入 函数的详解

一、什么是可重入函数?答:可重入函数就是多个线程访问同一个函数时,彼此之间互不影响,均能得到期望的结果二、如何使函数可重入?答:保证函数所有的输入都来自于函数的形参,所有的输出都为从函数返回值或输出参数得到,        函数内部不得使用全局变量或者静态局部变量三、不可重入函数举例    int g_flag = 0;int fun(int x){

2015-05-13 23:34:11 1056

转载 阅读内核源码 VIM+Ctags

人说,磨刀不误砍材工。可是学习linux内核已经一年啦,一直都在逃避使用VIM&ctags&cscope之类的阅读 源码。一方面,搞不明白他们之间是怎么一回事,就觉得糊里糊涂的。在网上也看了一些文章,可还是晕晕乎乎。另一方面,有LXR的方便,于是就给自己一次次 的逃避找到了借口。最近,网络总是出问题,才深深体会到仅仅依靠网络还是不行的。于是乎,终于下定决心要好好挖掘一下VIM的潜力。以前就看到过这

2015-05-07 22:59:49 1779

原创 四线电阻触摸屏校准

关于触摸屏校准算法的分析介绍一种比较简单的四线电阻触摸屏校准算法:一、准备工作1、设LCD分辨率为LCDX,LCDY(比如:800X480)2、LCD坐标为逻辑坐标用L表示,触摸屏坐标为物理坐标(AD值)用P表示3、触摸按下点逻辑坐标(Lx,Ly)为最终所求坐标4、原理为利用触摸按下点的物理坐标求出按下点的逻辑坐标,即将触摸屏坐标转换为LCD坐标 二、实现过程:

2015-05-03 18:50:55 8210

转载 理解串口流控

A想要发送数据给B,那么用硬件的RTS/CTS作为硬件流控制机制的话,那么:A如果想要发送数据给B的话,A会使得RTS(Request To Send)引脚有效,表明其想要“请求发送”数据给作为接收设备的B,而A接着就会去检测对应的来自B的CTS引脚,直到CTS有效(此时意味着B已经做好了相关的准备工作了,然后设置了CTS(Clear To Send) ,表明自己准备好接受数据了),才会真正开

2015-04-29 15:16:50 1177

转载 串口硬件流量控制说明

流量控制 对 串口而言,意味着 可以停止发送 然后重新开始,而不丢失任何数据用专用的控制线来发送 “停止”和“开始”信号RTS   Request To Send   我可以接受数据,请求发送数据给我CTS   Clear     To Send     允许我发送数据给你?当一端 准备接受数据时, 它将RTS 升为 高电平(意思是 Request To Send to me).

2015-04-29 14:38:26 5990

转载 do...while(0)的妙用

在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。    但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1. do...while(0)消除goto语句。通常,如果在

2015-04-17 07:37:03 466

转载 理解“统一编址与独立编址”,“I/O端口与I/O内存”

从CPU连出来一把线:数据总线、地址总线、控制总线,这把线上挂着N个接口,有相同的,有不同的,名字叫做存储器接口、中断控制接口、DMA接口、并行接口、串行接口、AD接口……一个设备要想接入,就用自己的接口和总线上的某个匹配接口对接……于是总线上出现了各种设备:内存、硬盘,鼠标、键盘,显示器……        对于CPU而言,如果它要发数据到某个设备,其实是发到对应的接口,接口电路里有多个寄

2015-04-15 00:09:52 3522

转载 独立编址与统一编址

在不同的系统中,I/O端口的地址编排有两种形式:存储器统一编址和I/O独立编址。 存储器统一编址(存储器映像编址):在这种编址方式中,I/O端口和内存单元统一编址,即把I/O端口当作内存单元对待,从整个内存空间中划出一个子空间给I/O端口,每一个I/O端口分配一个地址码,用访问存储器的指令对I/O端口进行操作。 存储器统一编址的优点是:I/O端口的数目几

2015-04-14 23:43:23 1566

转载 C/C++ 内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区

这可以帮助你深入了解程序的运行机制,由于自己还是一个初学者,因此大部分内容都只是转载。http://blog.sina.com.cn/s/blog_7edcf63b0100yhk9.htmlhttp://www.cnblogs.com/CBDoctor/archive/2011/12/24/2300624.html 一. 在c中分为这几个存储区1.栈 ——由编译器自动分配释放

2014-12-04 22:08:53 3494

原创 μC/OS-II事件标志组的入门级使用方法

试想如下情况,有A、B、C三个事件,当A、B都满足某一条件(或执行某一动作)后C才能得到运行(持续运行或运行一次后继续等待A、B条件再次满足后再运行)。如果需要实现这样的功能,就可以用事件标志组来实现了!具体看实例://定义一个事件标志OS_FLAG_GRP *Sem_Flg = 0;//LED0任务void led0_task(void *pdata){    

2014-11-30 23:45:50 2260

空空如也

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

TA关注的人

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