- 博客(22)
- 资源 (2)
- 收藏
- 关注
转载 i2c
关于i2c的响应问题:对于每一个接收设备(从设备,slaver),当它被寻址后,都要求在接收到每一个字节后产生一个响应。因此,the master device 必须产生一个额外的时钟脉冲(第九个脉冲)用以和这个响应位相关联。在这个脉冲期间,发出响应的从设备必须将SDA拉低并在时钟脉冲的高电平期间保持住。这表示该设备给出了一个ACK。如果它不拉低SDA线,就表示不响应(NACK)。
2013-03-20 09:42:54
943
转载 SPI相关
SPI模块功能框图典型的SPI控制器由如波特率发生器、主控逻辑、收发缓冲、控制部分等几大部分组成。通常SPI通过4个管脚与外部器件相连: l MISO:主收从发管脚,仅由从设备控制;单向数据线;l MOSI:主发从收管理,仅由主设备控制;单向数据线;l SCK:串口时钟,由主设备控制,仅由主设备控制;用于时钟
2012-12-05 11:13:04
1304
转载 uart CTS RTS
在RS232中本来CTS 与RTS 有明确的意义,但自从贺氏(HAYES ) 推出了聪明猫(SmartModem)后就有点混淆了。在RS232中RTS 与CTS 是用来半双工模式下的方向切换;HAYES Modem中的RTS ,CTS 是用来进 行硬件流控的。通常UART的RTC、CTS 的含义指后者,即用来做硬流控的。硬流控的RTS 、CTS :RTS (Require To Send,
2012-11-08 14:01:16
1993
转载 IIC通信注意事项
1、时钟一般情况下由主来控制,但是从设备接收一个字节并发送确认信号后,很可能由于忙于处理中断等其他实时处理,会强行将时钟拉低一段时间,所以主在控制时钟发送一个新的字节或发送STOP or START信号时,要检测时钟是否受控,如果不受控,就要产生错误告警,如果时钟一直被某一从设备拉低,则其他从设备访问也会出错,导致整个总线瘫痪。2、主给从发送数据时,每发送一个字节都要等待从设备的确认,即:发送
2012-10-31 11:50:15
4701
转载 边沿触发和电平触发的区别
电平触发,就是只有高电平的时候才做指定的事, 边沿触发,就是有高电平向低电平转换,或者翻过来转换,这个转换过程触发一个动作。 上升沿,顾名思义,就是低电平向高电平转换的瞬间,比如 _____ ____/ ,这个图中,/部分就是上升沿, ____
2012-10-31 11:34:21
4300
转载 编译控制
为了使用方便,可以把这两个函数接口定义为动态链接库或静态链接库。用动态链接库编译生成的可执行文件需调用.so文件方可正常运行,灵活但稍显麻烦;用静态链接库编译生成的可执行文件可直接运行,不用再调用如.so般的依赖库文件,简单但不灵活。静态链接库:1、编译生成目标文件gcc -c struct.c2、创建静态库ar cqs libstruct.
2012-10-17 09:59:54
699
转载 open和fopen的区别
open和fopen的区别:1.缓冲文件系统 缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”,装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存“缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操
2012-09-25 13:24:21
581
转载 kmalloc
#include void *kmalloc(size_t size, int flags); 给 kmalloc 的第一个参数是要分配的块的大小. 第 2 个参数, 分配标志, 非常有趣, 因为它以几个方式控制 kmalloc 的行为. 最一般使用的标志, GFP_KERNEL, 意思是这个分配((内部最终通过调用 __get_free_pages 来进行, 它是 GFP_ 前缀的来源
2012-02-15 10:39:40
881
转载 可执行文件的减肥
对于设计嵌入式Linux系统的研发人员来说,有一个问题是必须要考虑到的,那就是存储器的空间。我们知道嵌入式Linux系统所用的存储器不是软磁盘、硬盘、ZIP盘、CD-ROM、DVD这些众所周知的大容量常规存储器,它使用的是例如Rom,CompactFlash,M-System
2011-08-19 10:09:02
609
转载 关于系统调用劫持
如果一个木马要隐藏起来,不被系统管理员发现。截获系统调用似乎是必须的。大部分情况下,通过修改系统调用表来实现系统调用的劫持。下面是一个典型的截获系统调用的模块:模块一:#include #include #include #include
2011-08-19 09:58:56
884
转载 上拉下拉电阻
在网上看到一些对电阻的上拉和下拉不太明白的,输入端的上拉及下拉非常简单但也非常重要。上拉:通过一个电阻对电源相连。下拉:通过一个电阻到地。上下拉一般有两个用处:提高输出信号的驱动能力、确定输入信号的电平(防止干扰)。用过8051的都知道CPU的I/O上通常接有排阻(上拉到5V),这里主要是为了提高输出驱动能力的。因为8051的CPU不是标准的I/O口,输出为低电平时可以吸收均20mA的
2011-07-05 14:15:07
1342
原创 linux 内核及驱动模块调试
<br />内核调试<br />主要尝试过两种方法:打印或单步调试<br /> 1.打印: printk 分很多级别信息,功能类似于c语言的printf, 一般来说信息打印到/var/log/messages,可通过cat命令或tail命令查看 <br /> 大多数问题都可以通过printk来解决,缺点在于不够直感<br /> 2.调试工具: GDB ,KDB,KGDB <br /> 都需要编译DEBUG版本内核。<br /> KDB单
2011-05-24 16:13:00
1652
转载 实用技巧:Gdbserver远程调试的具体实现
<br />采用的是nfs目标板挂载本机目录的方法,当然首先,你得开通本机的nfs共享服务,具体步骤如下:<br /> 1、进入/etc目录,vim exports这个文件,在里面添加/home 192.168.0.*(rw,sync)保存后退出<br /> 注:/home 为要共享的文件夹的名称,192.168.0.*为本NFS服务器允许访问的客户端ip,若nfs不成功,后面参数rw ro 等标志对文件夹操作权限,sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内
2011-05-24 13:39:00
921
转载 内核源码书编译及简单驱动验证
这几天看了一些linux驱动的资料,对其结构和原理大致有了些了解,然后就开始动手实践了。首先是要重新编译内核,构建linux内核树。我完全是小白一个,网上搜了很多方案,尝试了好些次,终于成功。步骤如下:1.安装编译内核所需要的软件有:build-essential、autoconf、automake、cvs、subversion$apt-get install build-essential kernel-package libncurses5-dev libncurses5这个软件包在使用menuconf
2011-04-06 13:19:00
931
转载 linux驱动程序设计
<br /><br />PROGRAM FOR BLOCK DEVICE DRIVER OF DEVFS TYPE <br /><br />对linux的devfs类型的驱动程序的编写可以从以下几大内容理解和入手: <br />通过分析驱动程序源代码可以发现驱动程序一般可分三部分: <br />核心数据结构;核心数据和资源的初始化,注册以及注消,释放;底层设备操作函数; <br />还有DMA和Irq的初始化检查和 登记, <br />int request_irq(unsigned int irq ,vo
2011-04-01 14:20:00
1000
转载 sockfs 套接字文件系统
<br /> 套接字文件系统是一个用户不可见的, 高度简化的, 用于汇集网络套接字的内存文件系统,它没有块设备, 没有子目录, 没有文件缓冲,它借用虚拟文件系统的框架来使套接字与文件描述字具有相同的用户接口.当用户用socket(family,type,protocol)创建一个网络协议族为family, 类型为type,协议为protocol的套接字时, 系统就在套接字文件系统中为其创建了一个名称为其索引节点编号的套接字文件.<br /><br />有关代码<br />--------<br /
2011-04-01 14:16:00
2815
转载 如何编写Linux设备驱动程序
<br />有很多朋友关心驱动,但更菜的菜鸟居多:)总结了一下把I/O驱动改成个更简单的LED驱动吧<br />做的工作非常简单,就是让连在GPC0-GPC2上的LED顺序闪10下<br />目的就是演示一下驱动过程。<br />一先补充一下基础知识懂的朋友就不用看了<br /><br />嵌入式驱动的概念<br /><br />设备驱动程序是操作系统内核和机器硬件之间的接口,设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操
2011-04-01 13:48:00
669
转载 Linux 下使用gprof (性能调优工具)
<br />获取性能分析数据需要以下三个步骤: 编译并链接您的程序,启用性能分析功能。 执行您的代码生成性能分析数据。 使用 gprof 来分析并显示性能数据。 <br />在我们详细描述这三个步骤之前,我们将介绍一个足够规模的程序来引起对性能分析的兴趣。 一个简单的计算器<br />为了展示性能分析过程,我们将使用一个简单计算器程序作为案例。为了确保这个计算器占用足够的计算时间, 我们将使用在我们的真实世界程序中绝对不会用到的一元数来计算。这个程序的代码在本章的最后一节有详细说明。一元数 N 表示为 N
2011-04-01 13:43:00
1178
转载 嵌入式实时程序设计中C/C++代码的优化
1.Inline函数 在C++中,关键字Inline可以被加入到任何函数的声明中。这个关键字请求编译器用函数内部的代码替换所有对于指出的函数的调用。这样做在两个方面快于函数调用。这样做在两个方面快于函数调用:第一,省去了调用指令需要的执行时间;第二,省去了传递变元和传递过程需要的时间。但是使用这种方法在优化程序速度的同时,程序长度变大了,因此需要更多的ROM。使用这种优化在Inline函数频繁调用并且只包含几行代码的时候是最有效的。2.用指针代替数组 在许多种情况下,可以用指针运算代替数组索引,这样做常
2011-03-30 12:54:00
753
转载 关于ARM的C语言优化
C数据类型1. C语言的程序优化与编译器和硬件系统都有关系,设置某些编译器选项是最直接最简单的优化方式。在默认的情况下,armcc是全部优化功能有效的,而GNU编译器的默认状态下优化都是关闭的。ARM C编译器中定义的char类型是8位无符号的,有别于一般流行的编译器默认的char是8位有符号的。所以循环中用char变量和条件 i ≥ 0时,就会出现死循环。为此,可以用fsigned - char(for gcc)或者-zc(for armcc)把char改成signed。 其他的变量类型如下:
2011-03-30 12:46:00
701
转载 c语言代码的优化
<br />1、选择合适的算法和数据结构<br /> 应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍。将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序执行的效率。.选择一种合适的数据结构也很重要,比如你在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分紧密的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分的编译器,使
2011-03-30 12:39:00
657
转载 Linux2.6 内核的 Initrd 机制解析
简介: Linux 的 initrd 技术是一个非常普遍使用的机制,linux2.6 内核的 initrd 的文件格式由原来的文件系统镜像文件转变成了 cpio 格式,变化不仅反映在文件格式上, linux 内核对这两种格式的 initrd 的处理有着截然的不同。本文首先介绍了什么是 initrd 技术,然后分别介绍了 Linux2.4 内核和 2.6 内核的 initrd 的处理流程。最后通过对 Linux2.6 内核的 initrd 处理部分代码的分析,使读者可以对 initrd 技术有一个全面的认识。
2011-03-29 14:42:00
506
Synergy_1_10_2 Pro安装包.zip
2020-04-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人