博 文
摘要:
在学习linux内核代码及一些开源软件的源码(如:DirectFB),经常可以看到有关__attribute__的相关使用。本文较为详细的介绍了__attribute__相关语法及其使用。-----------------------------------------------------------------------------
华丽的分割线---------------------------------------------------------------------
GNU C的一大特色就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。
__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数。
__attribute__语法格式为:
__attribute__ ((attribute-list))
其位于声明的尾部“;”之前。
函数属性(Function
Attribute)
函数属性可以帮助开发者把一些特性添加到函数声明中,从而可以使编译器在错误检查
方面的功能更强大。__attribute__机
制也很容易同非GNU应用程序做到兼容之功
效。
GNU CC需要使用–Wall编译器来击活该功能,这是控制警告信息的一个很好的方式。下面介绍几个常见的属性参数。
__attribute__ format
该__attribute__属性可以给被声明的函数加上类似printf或者scanf的特征,它可以使编译器检查函数声明和函数实际调用参数之间的格式化字符串是否匹配。该功能十分有
用,尤其是处理一些很难发现的bug。
format的语法格式为:
format (archetype, string-index, first-to-check)
format属性告诉...
Linux高效操作 关于Bash shell十个技巧
http://www.enet.com.cn/server/ 2011年07月29日10:32 来
源:来自论坛 作者:TechTarget中国 字号:小
| 大
【文章摘要】速度是管理命令行的关键,而这十个技巧应该可以帮助你开始你的命令行管理。尽管接下来的十个技
巧大部分关于Bash shell,所有这些技巧都可以很容易地应用到其它现在shell上。
尽管Linux桌面在过去二十年中经历了巨大的改变(最显着的变化可能是Ubuntu
Unity界面),根据可以提供给有经验系统管理员的力量,命令行依然是非平行的。尽管接下来的十个技巧大部分关于Bash
shell,所有这些技巧都可以很容易地应用到其它现在shell上。
1.运用一条命令来创建并进入目录
创建接着进入一个新目录是一个非常普通的任务,似乎在shell中执行两种命令都该有捷径。虽然没有捷径,你可以将以下函数添加到你的。
bashrc文件:
mkcd()
{
mkdir $1
cd $1
}
接着运行源。bashrc来读取内存中的变化,并运用mkcd命令完成两个服务:
wjgilmore@ubuntu:~$ mkcd articles
wjgilmore@ubuntu:~/articles $
2.回到前一目录
当你需要从结构复杂的目录中转移并想要回到初始目录时,你可以将之前一路径传递到cd命令,但是鲜为人知的cd命令让这件事变得琐碎。该顺序
展示了该行为:
wjgilmore@ubuntu-laptop:~/Documents/techtarget_articles/ten_command_line...
32位嵌入式微处理器一览
作者:杨硕,华清远见嵌入式学院讲师。
由于嵌入式系统的专用型与定制性,与全球PC市场不同,没有一种微处理器或者微处理器公司可以主导嵌入式系统。本文分析了当前市场上主流的一些32位嵌入式微处理器的特点和应用场合,并对其未来发展做一些展望。这里只是按照体系结构分类,不涉及具体的处理器芯片。
一. ARM
ARM处理器是由英国的ARM公司设计的32位RISC处理器。
毫无疑问,ARM芯片是嵌入式微处理器中的佼佼者,是很多数字电子产品的核心。如今95%的手机里面的核心处理器使用的都是ARM芯片,而ARM在整个手持市场上占有90%以上的份额,这是一个惊人的比例。
ARM公司的商业模式:
ARM公司的成功除了其卓越的芯片设计技术以外,还源于其创新的商业模式:提供技术许可的知识产权,而不是制造和销售实际的半导体芯片。ARM将其芯片设计技术(内核、体系扩展、微处理器和系统芯片方案)授权给Intel,Samsung,TI,高通(Qualcomm),意法半导体等半导体制造商,这些厂商拿到ARM内核以后,再设计外围的各种控制器,和ARM核整合成一块SOC芯片,也就是我们看到的市面上的各种芯片,作为用户,我们也许不知道我们使用的是ARM芯片,但是我们可能天天都在感受着ARM芯片带给我们的智能体验。
图1-1 ARM的业务模型
ARM公司正是因为没有自己生产芯片,从而省去了IC制造的巨额成本,因此可以专注于处理器内核设计本身,ARM处理器内核不但性能卓越而且升级速度很快,以适应市场的变化。
由于所有的ARM芯片都采用一个通用的处理器架构,所以相同的软件可以在...
SDRAM工作原理及S3C2410 SDRAM控制器配置方法(2)
作者:刘洪涛,华清远见嵌入式学院讲师。
四、S3C2410 SDRAM控制器的配置方法
在系统使用SDRAM之前,需要对S3C2410X的存储器控制器进行初始化。其中对与SDRAM(Bank6)相关的寄存器进行了特殊的设置,以使SDRAM能够正常工作。由于C语言程序使用的数据空间和堆栈空间都定位在SDRAM上,因此,如果没有对SDRAM(Bank6)的正确初始化,系统就无法正确启动。下面介绍与SDRAM相关的寄存器设置。
1、BWSCON寄存器
BWSCON寄存器主要用来设置外接存储器的总线宽度和等待状态。在BWSCON中,除了Bank0,其他7个bank都各对应4个相关位的设置,分别为STn,WSn和DWn。这里只需要对DWn进行设置,例如SDRAM(Bank6)采用32位总线宽度,因此,DW6=10,其他2位采用缺省值。BWSCON寄存器在Bank6上的位定义如表4-1所示。
表4-1 BWSCON寄存器在Bank6上的位定义
BWSCON
位
描述
初始化状态
ST6
27
这个位决定SRAM在Bank6上是否采用UB/LB 0:不采用UB/LB(引脚对应nWBE[3:0 ) 1:采用UB/LB(引脚对应 nBE[3:0])
0
WS6
26
这个位决定Bank6的WAIT状态 0:WAIT禁止 1:WAIT使能
0
DW6
25~24
这2位决定Bank6的数据总线宽度 00...
SDRAM工作原理及S3C2410 SDRAM控制器配置方法(1)
作者:刘洪涛,华清远见嵌入式学院讲师。
SDRAM的工作原理、控制时序、及相关控制器的配置方法一直是嵌入式系统学习、开发过程中的一个难点。掌握SDRAM的知识对硬件设计、编写系统启动代码、提高系统存取效率、电源管理都有一定的意义。本文想通过:
1.SDRAM的工作原理。 2.HY57V561620 SDRAM介绍。 3.S3C2410和HY57V561620的接线方法。 4.S3C2410 SDRAM控制器的配置方法。 5.SDRAM控制时序分析
这5个方面来帮助初学者了解SDRAM。文章分为2篇,第1篇讲解前3个知识点,第2篇讲解后2个。
一、SDRAM的工作原理
SDRAM之所以成为DRARM就是因为它要不断进行刷新(Refresh)才能保留住数据,因此它是DRAM最重要的操作。
那么要隔多长时间重复一次刷新呢?目前公认的标准是,存储体中电容的数据有效保存期上限是64ms(毫秒,1/1000秒),也就是说每一行刷新的循环周期是64ms。这样刷新速度就是:行数量/64ms。我们在看内存规格时,经常会看到4096 Refresh Cycles/64ms或8192 Refresh Cycles/64ms的标识,这里的4096与8192就代表这个芯片中每个Bank的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096行时为15.625μs(微秒,1/1000毫秒),8192行时就为7.8125μs。HY57V561620为8192 refresh cycles / 64m...
对应的引脚定义:
引脚
引脚名字
描述
CLK
时钟
该系统时钟输入。所有其他投入注册到SDRAM的对时钟上升沿
CKE
时钟使能
控制内部时钟信号,当停用,将是一个在SDRAM各州之间的权力下,暂停或自刷新
CS(低电平有效)
芯片选择
启用或禁用除时钟,CKE非常,UDQM所有投入和LDQM
BA0, BA1
BANK地址
选择银行时被激活的RAS活动银行要选择读/写在CAS活动
A0 ~ A12
地址
行地址:RA0?RA12,列地址:CA0?CA8自动预充电标志:A10中
RAS, CAS, WE(低电平有效)
行地址选通,列地址选通,写启用
UDQM, LDQM
数据输入/输出面膜
控制输出缓冲器在写模式在读模式和面具输入数据
DQ0 ~ DQ15
数据输入/输出
输入复用数据/输出引脚
VDD/VSS
电源/地
电源的内部电路和输入缓冲器
VDDQ/VSSQ
数据输出电源/接地
电源输出缓冲器
NC
无连接
无连接
存储器容量、位宽及其地址线根数三者之间的关系:
1、存储器
Ⅰ Flash ROM: SST39VF1601
数据位宽为16位(16根数据线);20根地址线;2M(1M*16bit)。
Ⅱ SDRAM: HY57V641620HG
数据位宽为16位(16根数据线);12根地址线(行地址选择线有12根,列地址选择线有8根(12根的低8根)),2根bank选择线,总共有22根有效地址线;8M(4bank*1M*16bit)。
2、CPU编址:以字节(8bit)为单位
存...
放在另外一个论坛了,这个来个连接:
http://www.cesdn.org/forum.php?mod=viewthread&tid=4480&extra=
做嵌入式已经有很多年了,一直都在学习技术,解决技术上的问题,开头几年还觉得有进步,但是后几年就觉得在原地踏步,在技术上上不去,在管理上也做不了什么.最近一直在考虑为什么会是这个局面,总结一下应该是以下几点:
1.积极性不够,也就是说态度不够端正,没有积极去应对现实;
2.技术上不成体系,学习的都是零散的知识点.
态度问题要从内心激发来启动,不好在这里多说了;知识体系问题可以把我自己的想法说说.
嵌入式知识体系主要包括以下:
1.硬件基础知识,包括最小的硬件系统,通用I/O,ADC,DAC等;
2.基本通信接口,比如UART,USB,SPI,I2C等;
3.Device Driver,就是各种外围设备的驱动了,基本的如LCD,KEYPAD,LED等;(这部分相信大部分的人都比较熟悉)
4.BootLoader,如何引导程序进入操作系统?
5.RTOS,这块我觉得应该有一个基本的了解就可以了,知道RTOS能提供什么样的服务;
6.Makefile/Scatter file,这个对于了解,开发大一点的系统很有用;
7.Debug方法,工具.
8.中间件或者说抽象层,比如HAL(Hardware Abstraction Layer),熟悉这部分可以让你设计出更好的兼容性系统,会考虑更多系统的问题,而不只是单纯的使某一个设备跑起来.
学习时可以先有重点的学某一个方面的知识,以上每个点都不是独立的,都是与其他知识点结合在一起的,在学习过程中也一定要有体系的概念,站在系统的角度看问题.很希望大家跟我一起交流,谢谢!QQ:153730
我刚刚参加了一个很棒的活动“让iPhone飞!5天内必送出15部iPhone 4,35个iPod Shuffle!” 时间:02月03日
http://x.baixing.com/?g=1_55965481
看Linux的资料,觉得很不爽的就是各个概念很多,什么东西都取一个名字,然后抽象的又取个名字,特别是加上中文翻译作者经常又翻译出不同的意思、不同的版本来,看的实在是有点晕,其实最后弄明白了也就是那些东西。
IPC Inter-Process Communication 进程间通信。
一开始我还以为有个专门的进程间通信的机制呢,原来这只是一个统一称呼而已,真实的通信用的机制是:semaphore,message queue,pipe,mutex,share memory等。
详细的我放在下面这个连接里:
http://www.cesdn.org/home-space-uid-46-do-blog-quickforward-1-id-263.html