【转】解决 编译内核出现kernel/timeconst.pl line 373问题

在使用ubuntu16.4编译linux-3.0.8内核时出现这样的错误
在之前的版本编译时是可以正常编译通过,还不清楚具体问题

但是可以修改timeconst.pl的内容后正常编译。

以下是编译错误提示的内容:

Can’t use ‘defined(@array)’ (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
/opt/ARM/mini6410/linux/linux-2.6.38/kernel/Makefile:140: recipe for target ‘kernel/timeconst.h’ failed
make[1]: *** [kernel/timeconst.h] Error 255
Makefile:916: recipe for target ‘kernel’ failed
make: *** [kernel] Error 2

将kernel/timeconst.pl中第373行的defined()去掉只留下@val就可以了

本文转自:https://blog.csdn.net/timetim/article/details/51838692

液晶模块1602相关资料

在刚开始接触液晶的时候,很多人会选择液晶模块,而1602液晶模块是一种选择,下面推荐我第一次使用液晶的时候,所用的一块模块:
 

16*2液晶显示模块
外形尺寸:80*36mm
有效显示尺寸:57.7(W)Χ9.4(H)
外形尺寸:8.0×3.6CM
背光:白色LED
控制器:HD44780

引脚定义
1– Vss 电源
2–Vcc 电源+5V
3–Vo 对比度调节
4–RS 寄存器选择 ,H = 数据选择,L = 指令选择
5–R/W 读写信号
6–E 致能信号
7~14– DB0 ~ DB7 数据线
15–A LED+
16–K LED-

下面是它与51单片机的底层驱动代码:

#include “intrins.h”
sbit rs=0x85;//与1602控制口通信的端口
sbit rw=0x86;
sbit ep=0x87;

//液晶显示数据缓存
unsigned char  dis1[17]={“03-11 19:57:00 2\0”};
unsigned char  dis2[17]={“NOW TEMP: 015.0 \0”};

void lcd_delay(unsigned char ms)
{
  unsigned char i;
  while(ms–)
  {
    for(i=0;i<250;i++)
  {
    _nop_();
    _nop_();
    _nop_();
    _nop_();
  }
  }
}
bit lcd_bz()
{
  bit result;
  rs=0;
  rw=1;
  ep=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  result=(bit)(P2&0x80);
  ep=0;
  return result;
}

lcd_wcmd(unsigned char cmd)
{
  while(lcd_bz());
  rs=0;
  rw=0;
  ep=0;
  _nop_();
  _nop_();
  P2=cmd;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep=0;
}

lcd_pos(unsigned char pos)//设定显示位置
{
  lcd_wcmd(pos|0x80);
}

lcd_wdat(unsigned char dat)
{
  while(lcd_bz());
  rs=1;
  rw=0;
  ep=0;
  P2=dat;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep=0;
}

lcd_init()//模块初始化,不显示光标
{
  lcd_wcmd(0x38);
  lcd_delay(1);
  lcd_wcmd(0x0c);     
  lcd_delay(1);
  lcd_wcmd(0x06);
  lcd_delay(1);
  lcd_wcmd(0x01);
  lcd_delay(1);
}
 

时钟芯片DS1302相关资料

在最初接触单片机的时候,很多人都想做一个时钟,有些方案是直接用单片机进行计算的,这个我做过;还有一种方案是使用时钟芯片,而在选择时钟芯片的时候,很多人的眼光都会聚焦在DS1302这个芯片上:

DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

我当时在使用DS1302时,也曾收集了一些资料,附件是这块芯片的英文和中文资料,可下载参考。

同时,也贴上这个芯片与51单片机的底层通信代码(代码是本人网上搜集并稍作修改的),希望对大家有用。


sbit DS1302_clk=0xb7;
sbit DS1302_data=0xb6;
sbit DS1302_cs=0xb5;

unsigned char year,month,date,hour,minute,second,week;

void short_ds1302_delay()
{
  unsigned char i;
  for(i=0;i<5;i++);
}

void long_ds1302_delay()
{
  unsigned char i;
  for(i=0;i<25;i++);
}

void DS1302_write(unsigned char DS1302_temp)
{
  unsigned char i,temp;
  long_ds1302_delay();
  temp=DS1302_temp;
  for(i=0;i<8;i++)
  {
    DS1302_data=temp&0x01;
 short_ds1302_delay();
 DS1302_clk=1;
 short_ds1302_delay();
 DS1302_clk=0;
 temp=temp>>1;
  }
}

unsigned char DS1302_read(void)
{
  unsigned char i,temp;
  long_ds1302_delay();
  temp=0;
  for(i=0;i<8;i++)
  {
    temp=temp>>1;
 if(DS1302_data==1)
   temp=temp+0x80;
 DS1302_clk=1;
 short_ds1302_delay();
 DS1302_clk=0;
 short_ds1302_delay();
  }
  return temp;
}

/////////写操作设置,当a=0x80时禁止写操作,a=0x00时允许////////////////

void DS1302_write_able(unsigned char a)
{
  DS1302_cs=0;

  DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x8e);
  DS1302_data=1;
  DS1302_write(a);
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;
}

////////////////////ds1302初始化////////////////////////
void DS1302_init()
{
  unsigned char i;
  DS1302_write_able(0x00);   //允许写操作

  DS1302_cs=0;

  DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x81);
  DS1302_data=1;
  i=DS1302_read();
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;
  second=((i>>4)&0x07)*10+(i&0x0f);

  DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x80);
  DS1302_data=1;
  DS1302_write(0x7f&i);
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1; 
  
  DS1302_clk=0;    //充电设置
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x90);
  DS1302_data=1;
  DS1302_write(0xa6);    //允许充电,一个二极管 4k电阻
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;  
   
  DS1302_write_able(0x80);   //禁止写操作
}

void DS1302_readdate()
{
  unsigned char i;
  DS1302_cs=0;

  //读取second
  DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x81);
  DS1302_data=1;
  i=DS1302_read();
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;
  second=((i>>4)&0x07)*10+(i&0x0f);

  //读取分minute
  DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x83);
  DS1302_data=1;
  i=DS1302_read();
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;
  minute=((i>>4)&0x07)*10+(i&0x0f);

  //读取时hour
  DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x85);
  DS1302_data=1;
  i=DS1302_read();
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;
  hour=((i>>4)&0x03)*10+(i&0x0f);

  //读取日date
    DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x87);
  DS1302_data=1;
  i=DS1302_read();
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;
  date=((i>>4)&0x03)*10+(i&0x0f);

  //读取月份month
    DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x89);
  DS1302_data=1;
  i=DS1302_read();
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;
  month=((i>>4)&0x01)*10+(i&0x0f);

  //读取周week
    DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x8b);
  DS1302_data=1;
  i=DS1302_read();
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;
  week=i&0x07;

  //读取年份year
    DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x8d);
  DS1302_data=1;
  i=DS1302_read();
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;
  year=((i>>4)&0x0f)*10+(i&0x0f);
}


void DS1302_writedate()
{

  DS1302_write_able(0x00);
  DS1302_cs=0;

  //写second
  DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x80);
  DS1302_data=1;
  DS1302_write(0x7f&(((second/10)<<4)+(second%10)));
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;

  //minute
  DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x82);
  DS1302_data=1;
  DS1302_write(0x7f&(((minute/10)<<4)+(minute%10)));
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;

  //hour
  DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x84);
  DS1302_data=1;
  DS1302_write(0x3f&(((hour/10)<<4)+(hour%10)));
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;

  //date
    DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x86);
  DS1302_data=1;
  DS1302_write(0x3f&(((date/10)<<4)+(date%10)));
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;

  //month
    DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x88);
  DS1302_data=1;
  DS1302_write(0x1f&(((month/10)<<4)+(month%10)));
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;

  //week
  DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x8a);
  DS1302_data=1;
  DS1302_write(0x07&week);
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;

  //year
    DS1302_clk=0;
  short_ds1302_delay();
  DS1302_cs=1;
  DS1302_write(0x8c);
  DS1302_data=1;
  DS1302_write(((year/10)<<4)+(year%10));
  DS1302_cs=0;
  short_ds1302_delay();
  DS1302_clk=1;

  DS1302_write_able(0x80);
}