- 博客(21)
- 收藏
- 关注
转载 二叉树前序,中序,后序遍历相互求法
今天来总结下二叉树前序、中序、后序遍历相互求法,即如果知道两个的遍历,如何求第三种遍历方法,比较笨的方法是画出来二叉树,然后根据各种遍历不同的特性来求,也可以编程求出,下面我们分别说明。首先,我们看看前序、中序、后序遍历的特性: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历: 1.中序遍历左子树
2014-10-29 11:10:03
434
原创 linux字符设备基本框架的搭建
在学习linux设备驱动的时候,我发现其中需要用到的函数比较多,而我经常是记不住其中各种函数的参数,就在这里整理一下,加深一下理解。 首先就从基础的开始,就是模块许可声明,加载函数和卸载函数的缺省模式: MODULE_LICENSE("GPL"); int init_module(void);
2013-09-18 17:02:49
763
原创 linux设备驱动编写所需的各种头文件(备忘)
在linux设备驱动编写过程中所需要的头文件老是记不住,每次查书的话又感觉特麻烦,所以就在这里总结一下,方便以后写代码。 #include // 最基本的模块支持动态添加和卸载模块 #include // 驱动要写入内核,与内核相关的头文件 #include
2013-09-17 10:21:58
1159
转载 linux设备驱动中的并发控制总结
并发(concurrency)指的是多个执行单元同时、并行被执行。而并发的执行单元对共享资源(硬件资源和软件上的全局、静态变量)的访问则容易导致竞态(race conditions)。 SMP是一种紧耦合、共享存储的系统模型,它的特点是多个CPU使用共同的系统总线,因此可访问共同的外设和存储器。 进程与抢占它的进程访问共享资源的情况类似于SMP的多个CPU. 中断可 打断正
2013-09-14 14:00:13
550
转载 c语言指针详解
一.指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。1. 指针的类型 从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中
2013-09-12 19:24:12
582
原创 linux内核模块开发之字符设备驱动
Linux device driver 的概念 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能: 1、对设备初始化和释放; 2、把数据从内核传送
2013-09-09 20:23:55
764
原创 c语言中堆和栈的区别
什么是堆栈? 在计算机领域,堆栈是一个不容忽视的概念,但是很多人甚至是计算机专业的人也没有明确堆栈其实是两种数据结构。 要点: 堆:顺序随意 栈:先进后出 堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存
2013-08-30 16:30:00
510
转载 ARM汇编指令总结
ARM汇编指令ARM处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令6大指令。一、跳转指令跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转。Ⅰ.使用专门的跳转指令;Ⅱ.直接向程序计数器PC写入跳转地址值,通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任
2013-08-30 11:34:31
500
转载 嵌入式开发之NorFlash 和NandFlash
Author:tiger-johnTime:2013-07-11(重新修改)mail:jibo.tiger@gmail.comBlog:http://blog.youkuaiyun.com/tigerjb/article/details/9322035转载请注明出处![摘要]:作为一个嵌入式工程师,要对NorFlash 和NandFlash要有最起码的认知。本文通过从启动方式、
2013-08-26 20:24:54
569
转载 c语言中volatile关键字的作用
一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:
2013-08-26 19:40:06
483
原创 那些年 我们遇到的ARM面试题(不定时更新)
刚学习ARM,每次章节结束老师都会挑选出比较好的面试题来,在此总结一下,好东西大家分享嘛。以后老师还讲的话就接着更新。 1 AMBA代表什么? 答:翻译过来的名称是“先进的微处理器总线架构”,是ARM公司基于ARM处理器的一种总线架构;由AMBA又延伸出两套总线,分别为AHB和APB; AHB:先进的高
2013-08-23 20:02:15
3012
原创 arm处理器模式和arm处理器状态的区别
ARM处理器状态 ARM微处理器的工作状态一般有两种,并可在两种状态之间切换: 第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令; 第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。 在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且,处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。但ARM微处理器在开始执行代
2013-08-21 20:32:30
3043
原创 scanf用法总结
scanf函数精髓:严格格式匹配。常见的格式字符及说明:格式字符说明%d从键盘输入十进制整数%o从键盘输入八进制整数%x从键盘输入十六进制整数%c从键盘输入一个字符%s从键盘输入一个字符串
2013-08-21 17:58:23
814
原创 标准I/O详解
我们已经多次用到了文件,例如源文件、目标文件、可执行文件、库文件等,现在学习如何用C标准库对文件进行读写操作,对文件的读写也属于I/O操作的一种,本节介绍的大部分函数在头文件stdio.h中声明,称为标准I/O库函数。 fopen/fclose 在操作文件之前要用fopen打开文件,操作完毕要用fclose关闭文件。打开文件就是在操作系统中分配一些资源用于保存该文件的状态信息
2013-08-18 16:25:23
1336
原创 c语言结构体详解
结构(struct) 结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。 结构中可以使用不同的数据类型。 1. 结构说明和结构变量定义 在Turbo C中, 结构也是一种数据类型, 可以使用结构变量, 因此, 象其它 类型的变量一样, 在使用结构变量时要先对其定义。 定义结构变量的一般格式为:
2013-08-18 13:57:49
948
转载 如何避免子进程成为僵尸程序
在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD 信号处理函数调用waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,无法正常结束,此时即使是root身份kill-9也不能杀死僵尸进程。补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为"孤儿进程",过继给1号进程init,init始
2013-08-17 14:13:24
1074
原创 用TCP实现tftp的下载上传功能
刚学了TCP,现在对其进行应用总结一下,用它来实现一下linux里面tftp的上传下载功能,而且还能看到想要下载目录里面的内容,这一点上你tftp要方便多了。如果大家看到里面有哪些不足的话请指点指点小弟: 客户端代码:#include #include #include #include #include /* See NOTES */#inc
2013-08-17 11:45:59
913
原创 用UDP协议实现最简单的“聊天室”功能
小弟新人一枚,刚刚学习了网络编程的基础,就试着用UDP协议实现一个简单的“聊天室”,在写代码过程中也是各种出错,还好最终是实现了各种最基本的功能,在此记录一下当时写代码时的各种问题,希望跟我一样的新人能够避免某些常见问题,同时也希望能够得到大神的指点,看看代码还有哪里可以更加精简,更加效率。 首先我先来介绍一下实现这个聊天室的服务器端和客户端的大概流程,一会会把流程图传上来。
2013-08-17 11:32:46
12662
3
转载 linux多线程编程 同步与互斥
——本文一个例子展开,介绍Linux下面线程的操作、多线程的同步和互斥。前言线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步、互斥,这些东西将在本文中介绍。我在某QQ群里见到这样一道面试题:是否熟悉POSIX多线程编程技术?如熟悉,编写程序完成如下功能:1)有一int型全局变量g_Flag初始值为0;2
2013-08-11 14:36:33
572
原创 wait和waitpid的区别
1、一个进程正常结束:(1)return(2)exit(3)_exit和_Exit(4)进程的最后一个线程使用return(5)进程的最后一个线程使用phread_exit2、一个异常进程结束:(1)abort(2)signal(3)cancellation request ,最后一个线程被取消3、当一个进程结束时,它的父进程需要知道它是如何结束的,于是需要
2013-08-11 10:50:10
947
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人