引言
|
标签:杂谈 |
|
标签:杂谈 |
|
标签:it |
|
第一篇 在PCB设计中,布线是完成产品设计的重要步骤,可以说前面的准备工作都是为它而做的,在整个PCB中,以布线的设计过程限定最高,技巧最细、工作量最大。PCB布线有单面布线、双面布线及多层布线。布线的方式也有两种:自动布线及交互式布线,在自动布线之前,可以用交互式预先对要求比较严格的线进行布线,输入端与输出端的边线应避免相邻平行,以免产生反射干扰。必要时应加地线隔离,两相邻层的布线要互相垂直,平行容易产生寄生耦合。 |
|
标签:it |
指针函数和函数指针有什么区别
1,这两个概念都是简称,指针函数是指带指针的函数,即本质是一个函数。我们知道函数都又返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。其定义格式如下所示:
返回类型标识符
*返回名称(形式参数表)
{ 函数体 }
返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。例如下面一个返回指针函数的例子:
#include
函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢?
如果我们有一个int test(int
a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。
定义一个指向函数的指针用如下的形式,以上面的test()为例:
int (*fp)(int a);//这里就定义了一个指向函数的指针
函数指针不能绝对不能指向不同类型,或者是带不同形参的函数,在定义函数指针的时候我们很容易犯如下的错误。
int *fp(int a);//这里是错误的,因为按照结合性和优先级来看就是先和()结合,然后变成了一个返回整形指针的函数了,而不是函数指针,这一点尤其需要注意!
下面我们来看一个具体的例子:
#include
#include
using
int
|
标签:杂谈 |
C语言中有一种长度不确定的参数,形如:'…',它主要用在参数个数不确定的函数中,我们最容易想到的例子是printf函数。
原型:
int printf( const char *format [, argument]... );
使用例:
printf('Enjoy yourself everyday!\n');
printf('The value is %d!\n',
|
标签:杂谈 |
1.引言在开发基于AT91RM9200处理器的嵌入式系统时,以何种方式启动系统是一个首先要考虑的基本问题。庆幸的是,AT91RM9200处理器提供了各种各样的启动方式,总体上可分为从外部的DATAFLASH、二线EEPROM或8位并行存储器引导启动和从内部的BOOTROM引导启动两种情况。当从外部存储器启动时,存储器中的启动代码又是从那里来的呢?有3种手段,可以直接通过编程器将启动代码写入外部存储器,也可以通过JTAG接口从主机下载到目标系统的闪存芯片,还可以由AT91RM9200处理器的内部BOOTROM启动系统与主机建立通信并下载所需代码再写入闪存芯片。那么当从内部的BOOTROM启动时,所需的启动代码又是如何得到的呢?很简单,芯片厂商在生产芯片时就嵌入了这段代码。内嵌的启动代码被存储在AT91RM9200处理器的片内ROM中,片内ROM的起始物理地址是0x0010_0000,片内SRAM的起始物理地址为0x0020_0000。我们都知道ARM处理器启动时会产生复位异常,程序计数器PC指向复位异常向量地址0x0000_0000,也就是说启动时首先执行的是位于地址0x0000_0000处的指令。因此从0x0000_0000到0x0010_0000的1M的内部存储区域(内部存储区0)在上电启动