C中指针的一些用法 不断地更新

  1. 拷贝函数的用法

    Uint 16 * SourceAddr Uint 16 *SourceEndAddr Uint16 *DestAddr

    以上3个是函数定义的形式参数

    Memcopy 函数的定义

    Void Memcopy(Uint16 * SourceAddr ,Uint16 *SourceEndAddr Uint16 *DestAddr)

    {

    While (SourceAddr< SourceEndAddr)

    {

    *DestAddr=* SourceAddr

     

    }

    Return;

}

 

调用此函数 定义三个变量 这三个变量可以是一个数组的首地址,或者是一个数据段的地址 。

例如 extern Uint16 ramfuncsLoadStart;

Extern Uint16 ramfuncsLoadEnd;

Extern Uint16 ramfuncsRunStart;

 

最后通过memcopy()函数实现复制

Memcopy(&ramfuncsLoadStart,& ramfuncsLoadEnd,& ramfuncsRunStart);

 

(2)DSP28335 通过XINTF外部扩展接口访问片外AD AD7658 并行方式

 

通过XINTF ZONE 6 ZONE6 的地址范围是0x10 0000 ~0x1F FFFF 共1M x 16 bit 的空间

所以定义了 在DC_Types.h 中

#define PORT_AD            (signed int *) 0x100009

强制把一个整型常数转换成为一个指向 有符号数 的指针变量

0x10 0009 在XINTFZONE6 的地址范围内

如果我读取PORT_AD 里面的之日 XZCS6 会自动由高变为低 完成片选

    

tmp_a = ((* PORT_AD) << 4) + 16;

上语句中 ( * PORT_AD) 就是直接读取的值。

  1. PIE向量表初始化的时候 用到了指向函数的指针。

函数类型指针 的定义 格式

函数指向的数据类型 (*指针变量名)();

例如 int(*P)();

上式定义了指针p , p指向的函数返回 整形数据 。

注意:

(*P)中的括号不能缺少,标识P先是与*结合 表示是指针变量。然后再与后面的()结合

表示此指针指向函数 。

定义一个指向 中断函数类型的指针

Typedef interrupt void (*PINT) (void)

下面定于一个结构体 成员名 是指向中断函数的指针变量

Struct PIE_VECT_TABLE

{

PINT PIE1_RESERVED ;

PINT PIE2_RESERVED;

PINT PIE3_RESERVED;

}

  1. 指针变量的赋初值

    例如 int *d=&a

    Int *e=&c

     

     

强制类型转换

void * 就是无类型指针类型,他所指向的内存空间没有被认为是某一种特定的类型。

(void *)0 把0强制转换为 void *,

 

例如 (unsigned char *)j,意思是把j强制类型转换为unsigned char *型

 

看DSP2833X_PieVect.c z中定义的函数

 

void InitPieVectTable(void)

{

int16 i;

Uint32 *Source = (void *) &PieVectTableInit;

Uint32 *Dest = (void *) &PieVectTable;

EALLOW;

for(i=0; i < 128; i++) {

*Dest++ = *Source++;

}

EDIS;

}

百度网盘地址

猜你喜欢

转载自www.cnblogs.com/bailongwei654321/p/12891839.html