C中指针的一些用法 不断地更新
-
拷贝函数的用法
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) 就是直接读取的值。
-
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;
}
-
指针变量的赋初值
例如 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语言 用结构体 的形式 结构体里面的成员名 包括指向函数的指针