新唐N76E003指针指向错误问题

问题描述:如下代码,p指向的数据并不是28

char data *p;
char xdata  dat = 28;
p = &dat;

解决方案1:

char data *p;
char data  dat = 28;
p = &dat;

解决方案2:

char *data p;
char xdata  dat = 28;
p = &dat;

知识点:
C51的指针类型分为2类,1:一般指针;2基于寄存器的指针。

如下表示一般指针:

char *xdata my_char;   //指针本身存储在xdata空间,它指向char类型
int *data my_num;   //指针本身存储在data空间,它指向int类型

一般指针代码运行较慢。但兼容性强

如下表示基于寄存器的指针:

char xdata *my_char;   //针本指向的char型数据存储在xdata空间
int data *my_num;   //针本指向的int型数据存储在data空间

基于寄存器的指针运行速度快,但是他所指向的对象有确定的存储空间,从而导致其代码的兼容性不好。

你可能感兴趣的:(嵌入式开发,单片机,新唐单片机)