ARM7相关编程之c语言相关语法的书写格式总结

1 关于对寄存器的读写方式
一直听说对寄存器赋值的时候,最好的方式是通过读修改写的方式,本人一直觉得直接赋值并没有什么不可以,直到今天,在lpc2138芯片下,在一个已经能够驱动2.2 TFT液晶显示汉字的情况下,写了一个驱动串口的的程序,使用的是UART0,在设置p0.0引脚与p0.1引脚分别为TxD0与RxD0时,一开始采用的写法如下:

PINSEL0 =(0x5);```
/*****分割线****************************/
int main (void)
{
        LCD_Init();
        LCD_Clear(RED);//基本刷屏测试
        RTCInit(); //RTC时钟初始化模块
        interrupt();
        BACK_COLOR=RED;   //字体背景色
        POINT_COLOR=BLUE;    // 字体的颜色   

        uart_init();


    while (1)
    {   screen1();//初始化界面显示 此句不能放在while(1)外,否则RTC秒钟显示不正常,也不能放在Get_Time后,显示也不正常            
        Get_Time(&date,&time);//显示当前时间值
    }

}

编译运行后,屏幕上无法显示相关信息,于是可是各种查,发现将写法改成如下,

PINSEL0 =(PINSEL0&0xFFFFFFF0)|(0x5);

程序即可正常显示汉字与数字(虽然说我的uart程序还是不好使~~),后来查了下屏幕的资料,发现有如下两个引脚这里写图片描述
查看相关SPI程序,发现果然有PINSEL0相关的配置,猜想会不会是两次赋值冲突的原因,我也不知道怎么验证,如有大神知道,还请不吝赐教

  1. 有关结构体变量的声明
    我在main.c中定义了如下的结构体变量:
struct DATE
  {
  uint16 year;
  uint8 mon;
  uint8 day;

  }GdateCurrentDate;

在RTC.c中准备利用此结构体变量来读取ARM7系列lpc2138RTC时间计数器的值,
首先在RTC.c中进行了如下声明:

extern struct TIME GdateCurrentDate;

然后进行了如下赋值:

 GdateCurrentDate.year =(uint16) YEAR ; //更新年份
 GdateCurrentDate.mon =(uint8) MONTH; //更新月份
 GdateCurrentDate.day =(uint8) DOM;//更新日期值         
 GtimeCurrentTime.hour = (uint8)HOUR; //更新小时
 GtimeCurrentTime.min =(uint8) MIN; //更新分钟
 GtimeCurrentTime.sec = (uint8)SEC; //更新秒

编译后报错;

APP\target.c(117): error:  #70: incomplete type is not allowed

查了下单词意思,
incomplete adj. 不完全的; 不完备的; 未完成的; 片;
于是将声明的写法改成如下方式:

extern struct DATE
{

uint16 year;
  uint8 mon;
  uint8 day;
} GdateCurrentDate;

正常通过,没有出现相同错误。
总结如下:
在一个.c文件中定义了一个结构体变量,在另一个.c文件中想使用的话,用extern 声明时应该采用类似如下写法,即将结构体成员写完整:

extern struct DATE
{

uint16 year;
  uint8 mon;
  uint8 day;
} GdateCurrentDate;

猜你喜欢

转载自blog.csdn.net/moluoyu/article/details/46334651
今日推荐