- 博客(31)
- 资源 (2)
- 收藏
- 关注
转载 安卓驱动、HAL、JNI与java
最近看了安卓驱动层到应用层的实现,总结一下所学,新手学习,不足之处请指正(以LED为例):网址:http://blog.csdn.net/liruicom/article/details/8517948由驱动层到应用层的流程Linux驱动->HAL->JNI->APK首先是驱动层:1)创建cdev与实现file_operations 。2)module_init与module_
2015-11-24 22:33:28 685
转载 C语言的那些小秘密之异常处理
版权声明:本文为博主原创文章,未经博主允许不得转载。很多读者在此之前可能根本没有使用或者听说过C语言的异常处理,印象中都是C++或者java才有的东西,C语言怎么会有异常处理呢?当然估计在大学出于一般的性的学习考试之类的话老师几乎是不会提及C语言的异常处理的,那么到底什么是异常处理?C语言中又该如何来实现异常处理呢?那么我们今天就讲解一种典型的实现C语言异常处理的方法,以setjmp(
2015-11-24 22:22:50 458
转载 Linux V4L2驱动架构解析与开发导引
Andrew按:众所周知,linux中可以采用灵活的多层次的驱动架构来对接口进行统一与抽象,最低层次的驱动总是直接面向硬件的,而最高层次的驱动在linux中被划分为“面向字符设备、面向块设备、面向网络接口”三大类来进行处理,前两类驱动在文件系统中形成类似文件的“虚拟文件”,又称为“节点node”,这些节点拥有不同的名称代表不同的设备,在目录/dev下进行统一管理,系统调用函数如open、close
2015-11-24 22:14:03 2944
转载 V4L2驱动程序架构
1 V4L2简介video4linux2(V4L2)是Linux内核中关于视频设备的内核驱动,它为Linux中视频设备访问提供了通用接口,在Linux系统中,V4L2驱动的Video设备节点路径通常/dev/video/中的videoXV4L2驱动对用户空间提供字符设备,主设备号为81,对于视频设备,其次设备号为0-63。除此之外,次设备号为64-127的Radio设备,次设备
2015-11-24 22:11:55 1407
转载 聊聊arm下的函数栈
引言 这篇文章简要说说函数是怎么传入参数的,我们都知道,当一个函数调用使用少量参数(ARM上是少于等于4个)时,参数是通过寄存器进行传值(ARM上是通过r0,r1,r2,r3),而当参数多于4个时,会将多出的参数压入栈中进行传递(其实在函数调用过程中也会把r0,r1,r2,r3传递的参数压入栈),具体是什么实现的呢,我们看看。 函数栈 首先我们需要了解一下lin
2015-11-24 19:44:35 1501
转载 PDP Context 激活流程(UE发起)
一个UE 发起的PDP 上下文激活过程,目的是向SGSN申请某种数据业务,如浏览网页、在线视频浏览等业务。如果之前UE没有建立RRC 连接,则首先需建立RRC 连接,再通过初始直传建立传输NAS 消息的信令连接,最后建立RAB。如果PDP 上下文激活过程是由网络主动发起,则信令流程中将包含寻呼过程。在接入层内与主叫过程很类似,其它区别主要体现在NAS消息上,在此不再详述。终端GPRS附着成
2015-11-24 16:55:09 3519
转载 深入理解C语言的define和内联函数
深入理解C语言的define和内联函数时间 2014-05-17 22:43:00 Bill's Blog原文 http://ibillxia.github.io/blog/2014/05/17/insight-into-define-and-inline-function-in-c/主题 C语言概述在 Robert C.Searcord 的 T
2015-11-24 10:39:41 767
转载 C语言中的内联函数(inline)与宏定义(#define)详细解析
先简明扼要,说下关键:1、内联函数在可读性方面与函数是相同的,而在编译时是将函数直接嵌入调用程序的主体,省去了调用/返回指令,这样在运行时速度更快。2、内联函数可以调试,而宏定义是不可以调试的。内联函数与宏本质上是两个不同的概念如果程序编写者对于既要求快速,又要求可读的情况下,则应该将函数冠以inline。下面详细介绍一下探讨一下内联函数与宏定义。一、内联函数是什么?内
2015-11-24 10:22:48 952
转载 inline函数和宏函数的区别
转自:http://blogt.chinaunix.net/space.php?uid=25213672&do=blog&id=125451#define TABLE_COMP(x) ((x)>0?(x):0) 就定义了一个宏。 为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地
2015-11-24 10:16:35 584
转载 宏、函数、宏函数的区别
http://hi.baidu.com/pobenliu/blog/item/3e458208279486a32fddd43f.html宏、函数、宏函数的区别先说宏和函数的区别:1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型.2. 宏的参数替换是不经计算而直接处理的,而函数调用是
2015-11-24 10:13:26 433
转载 函数式宏定义与普通函数
在C及C++语言中允许用一个标识符来表示一个字符串,称为宏,该字符串可以是常数、表达式、格式串等。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。若字符串是表达式,我们称之为函数式宏定义,那函数式宏定义与普通函数有什么区别呢?我们以下面两行代码为例,展开描述:
2015-11-24 10:11:49 867
转载 C语言宏定义和宏定义函数
要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义。那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍。 我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义: #define MAX( a, b)
2015-11-24 10:04:51 547
转载 编写优质嵌入式C程序
版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[+]简介C语言特性1处处都是陷阱11 无心之过12 数组下标13 容易被忽略的break关键字14 意想不到的八进制15指针加减运算16关键字sizeof17增量运算符和减量运算符18逻辑与和逻辑或的陷阱19结构体的填充2不可轻视的优先级3隐式转换编译器1不能简单的认为是个工具2不能依赖
2015-11-21 12:37:24 2308
转载 10个足以让你成为更优秀的程序员的C语言资源
一些人觉得编程无聊,一些人觉得它很好玩。但每个程序员都必须紧跟编程语言的潮流。大多数程序员都是从C开始学习编程的,因为C是用来写操作系统、应用程序最常用的语言。C编程笔记这些是华盛顿实验学院C编程入门课的部分笔记。它们是以《C程序设计语言》的补充笔记(从1995年春开始)为基础修改的,而这本书的作者就是大名鼎鼎的Brian Kernighan和Dennis Ritchie了,人们亲
2015-11-20 19:18:08 1092
转载 C语言错误处理策略
今天写程序时,发现自己平时不爱做异常处理。(C语言的异常处理比起java的来总觉得好费劲啊~) 上网google了一下看见了一位大牛的解释,好厉害,膜拜一下 1. 返回值方式:用函数的返回值标志函数是否执行成功。比如成功返回1,失败返回0。这种方式的好处是简单方便,而且不影响效率,保持了c语言的高效率。但是仍然有问题,一个问题是代码可读性的问题,如果每个函数都有这样的返
2015-11-20 16:27:45 1332
转载 C语言程序员必读的5本书
本文由 伯乐在线 - programmer_lin 翻译。未经许可,禁止转载!英文出处:fromdev。欢迎加入翻译组。你正计划着通过看书来学习C语言吗?“书籍是人类最忠诚的朋友“。海明威一定知道书籍对一个人一生的重要性。书籍是知识的丰富来源。你可以从书中学到各种知识。书籍可以毫无歧视地向读者传达作者的本意。C语言是由 Dennis Ritchie在1969年到1973年在贝尔实验室研
2015-11-20 16:22:10 11287
转载 低级程序员和高级程序员的区别
低级程序员认为自己与高级程序员的区别, 主要是高级程序员任何功能都能编码实现, 编码速度快, 代码无 bug. 正如一惯的那样, 低级程序员之所以低级, 正是因为他们勉强能看到(或者根本看不到)事物的表象而看不到本质. 所以, 低级程序员总结出的一切东西, 你都可以大胆的忽略.所以, 我们来听听高级程序认为自己与低级程序员的区别是什么. 高级程序员之所以高级, 在于他们认识到代码 bug
2015-11-20 12:20:07 3949
转载 低级程序员和高级程序员的区别
低级程序员认为自己与高级程序员的区别, 主要是高级程序员任何功能都能编码实现, 编码速度快, 代码无 bug. 正如一惯的那样, 低级程序员之所以低级, 正是因为他们勉强能看到(或者根本看不到)事物的表象而看不到本质. 所以, 低级程序员总结出的一切东西, 你都可以大胆的忽略.所以, 我们来听听高级程序认为自己与低级程序员的区别是什么. 高级程序员之所以高级, 在于他们认识到代码 bug
2015-11-20 12:19:18 805
转载 C语言中的回调
ResourceFrom:http://lemote.blog.163.com/blog/static/1748395072013111631216547/软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执 行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用
2015-11-19 23:04:10 445
转载 C语言----for语句,break和continue的应用与区别
C语言----for语句,break和continue的应用与区别 (2012-06-12 16:32:28)转载▼1。问题2。for语句3。break和continue的应用与区别 1。问题; 上章博文的问题点,主要是看B的变量变化情况。这里就不在说明; 2。for语句 格式: f
2015-11-19 23:01:23 1262
转载 C语言中的回调
软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步
2015-11-19 15:31:28 3909
转载 如何编写易于移植的C++ 程序
如何编写易于移植的C++ 程序由于操作系统的差异,同一种操作系统本身版本的差异,目前C++标准库提供的功能仍然有限以及C++编译器产品不是完全兼容等问题,使得我们在移植大型应用程序的时候往往会出现很多难以解决的问题,如何合理的避免他们提高C++程序的移植性,本文作者从源代码的组织安排等方面提出了一些实用的建议。 当我们编写服务器端的软件产品时,我们往往需要为同一个软件产品推出多种不同平
2015-11-17 11:03:28 448
转载 嵌入式程序员应该知道的16个问题
http://www.bubuko.com/infodetail-649505.htmlhttp://www.51testing.com/html/04/n-815204.htmlhttp://blog.csdn.net/sy_lixiang/article/details/21174817http://blog.csdn.net/weiqifa0/article/detail
2015-11-16 21:55:33 437
转载 怎样判断ucos ii ostaskcreate任务的 堆栈是否溢出
1.1. 任务堆栈一但溢出,意味着系统的崩溃,在有MMU或者MPU的系统中,对堆栈溢出的检测十分简单,因为这是MMU和MPU必备的功能之一。(uCOS-II/uCOS-III中均有针对没有MMU和MPU的处理器对堆栈溢出检测的策略)1.2. 堆栈的大小取决于该任务的需求。设定堆栈大小时,你就需要考虑:所有可能被堆栈调用的函数及其函数的嵌套层数,相关局部变量的大小,中断服务程序所需要的空间。另外
2015-11-16 21:52:37 1692
转载 ARM的异常处理过程分析
ARM的异常处理过程分析 2012-05-23 22:29:35分类: LINUX近来翻了翻uC/OS-II官网给出来的ARM7-ARM9移植手册(AN-104),分析了在ARM中移植的问题,想想从来没有认真的学习过ARM的汇编,趁着这个机会复习复习吧。其实底层的东西才是创造力的心脏。其中的移植代码中存在的很多问题比如中断的关闭和开启,任务级别的
2015-11-16 19:56:11 834
转载 ARM的Abort异常
data abort exception: data abort是arm异常的一种。当程序试图读或者写一个不合法的内存地址时发生(没有权限访问或者不存在的地址), 可以通过以下方式计算不合法的内存地址: R14(LR)-8得到导致data abort异常的指令,从指令的寄存器中得到需要操作的地址。 一般而言,导致这种异常的指令为STR,LDR(涉及
2015-11-16 19:53:08 2215
转载 W中的Event 1A到Event 1J以及Event 2A到2F的含义?
频内测量内容:1)频内测量小区信息列表2)频内测量数值(CPICH、Ec/No、CPICH RSCP、RSSI/pathloss)3)频内测量报告数值4)报告小区状态5)测量有效性(有效的UE状态)可选6)报告准则(频内测量报告准则、周期性测量报告准则、不报告)频内测量报告的触发事件:1A:CELL 进入报告范围。1B:CELL 离开报告范围。1C:有CEL
2015-11-14 18:20:15 1032
转载 *.h文件头部常用 #ifndef _STDIO_H_,#if __cplusplus
头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的:#ifndef #define ....
2015-11-14 18:15:52 1230
转载 ARM汇编语言从1+2+......+100
Thumb 汇编指令实验的参考程序代码清单;文件名:test.s;功能:计算1+2+3+…+N 的值N EQU 50 定义N的值为50 AREA testcode,CODE,READONLY 区域名为testcode,代码,只读ENTRY
2015-11-08 21:19:19 15291
转载 i.mx257的gpio简要理解
飞思卡尔的芯片与三星的芯片有很大的不同, 从GPIO 的配置上就能看到飞思卡尔有多操蛋.在本节中我们使用GPIO3-23 来点亮板子上的 ERR-LED. 1. 配置 IOMUX 来选择GPIO模式(IOMUXC), GPIO3-23为普通io口2. 设置GPIO为输出(GDR)3. 写DR寄存器Software Mux Control Registers (SW_MUX_CT
2015-11-08 20:51:22 965
转载 ARM的B,BL跳转指令
B跳转指令:它是个相对跳转指令,其机器码格式如下:[31:28]位是条件码;[27:24]位为“1010”(0xeaffffff)时,表示B跳转指令,为“1011”时,表示BL跳转指令;[23:0]表示偏移地址。使用B或BL跳转时,下一条指令的地址是这样计算的:将指令中24位带符号的补码立即数扩展为32(扩展其符号位);将此32位数左移两位;将得到的值加到pc寄存器中,即得
2015-11-08 20:28:26 6370
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人