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中定义的函数

 下面的PieVectTable 是声明的变量  在DC_Types.h 中用 extern 关键字 仅声明了  。没有实际定义  内有分配实际的内存空间, 然后在DSP2833X_GlobalVaribalDefs 中 用

 DATA_SECTION 指令  说明此变量生成的数据段  PieVectTableFile  然后这个段用SECTION指令 被指定到PIE_VECT 空间  PIE _VECT空间用MEMORY 指定是 0X0000D00 开始的256个字

 

void InitPieVectTable(void)

 

{

 

int16 i;

 

Uint32 *Source = (void *) &PieVectTableInit;

 

Uint32 *Dest = (void *) &PieVectTable;

 

 

 

EALLOW;

 

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

 

*Dest++ = *Source++;

 

}

 

EDIS;

 

}

 

20200724 补充  指向函数的指针 

在bootloader 2812 工程中  

在头文件中 alldefine.h 中声明了函数  注意不是定义

声明一个指向函数的指针    extern  void  (*Flash_callbackptr)(void)  

然后在downloader.c 文件中 定义了一个函数 

void Flashcallbackfunction ()

{

}

 

最后在主程序中   将函数 flashcallbackfunction()函数的名称赋予给 指向函数的指针变量  *Flash_callbackptr  

 

另外一个用法: 

例如 60kw 的控制程序中    PID 调剂器的C语言    用结构体 的形式  结构体里面的成员名 包括指向函数的指针  

 

 

 

 

 

 

百度网盘地址

posted @ 2020-05-14 22:34  STEVEN-SUN  阅读(556)  评论(0编辑  收藏  举报