//本头文件是以51为蓝本
#ifndef __rc522_h__
#define __rc522_h__ #include <string.h>
#include <wiringPi.h>
#include <unistd.h>
#include "Library.h"
#include "51initrc522.h" /////////////////////////////////////////////////////////////////////
//MF522命令字
/////////////////////////////////////////////////////////////////////
#define PCD_IDLE 0x00 //取消当前命令
#define PCD_AUTHENT 0x0E //验证密钥
#define PCD_RECEIVE 0x08 //接收数据
#define PCD_TRANSMIT 0x04 //发送数据
#define PCD_TRANSCEIVE 0x0C //发送并接收数据
#define PCD_RESETPHASE 0x0F //复位
#define PCD_CALCCRC 0x03 //CRC计算 /////////////////////////////////////////////////////////////////////
//Mifare_One卡片命令字
#define PICC_REQIDL 0x26 //寻天线区内未进入休眠状态
#define PICC_REQALL 0x52 //寻天线区内全部卡
/////////////////////////////////////////////////////////////////////
#define PICC_ANTICOLL1 0x93 //防冲撞
#define PICC_ANTICOLL2 0x95 //防冲撞
#define PICC_AUTHENT1A 0x60 //验证A密钥
#define PICC_AUTHENT1B 0x61 //验证B密钥
#define PICC_READ 0x30 //读块
#define PICC_WRITE 0xA0 //写块
#define PICC_DECREMENT 0xC0 //扣款
#define PICC_INCREMENT 0xC1 //充值
#define PICC_RESTORE 0xC2 //调块数据到缓冲区
#define PICC_TRANSFER 0xB0 //保存缓冲区中数据
#define PICC_HALT 0x50 //休眠 /////////////////////////////////////////////////////////////////////
//MF522 FIFO长度定义
/////////////////////////////////////////////////////////////////////
#define DEF_FIFO_LENGTH 64 //FIFO size=64byte
#define MAXRLEN 18 /////////////////////////////////////////////////////////////////////
//MF522寄存器定义
/////////////////////////////////////////////////////////////////////
// PAGE 0
#define RFU00 0x00
#define CommandReg 0x01
#define ComIEnReg 0x02
#define DivlEnReg 0x03
#define ComIrqReg 0x04
#define DivIrqReg 0x05
#define ErrorReg 0x06
#define Status1Reg 0x07
#define Status2Reg 0x08
#define FIFODataReg 0x09
#define FIFOLevelReg 0x0A
#define WaterLevelReg 0x0B
#define ControlReg 0x0C
#define BitFramingReg 0x0D
#define CollReg 0x0E
#define RFU0F 0x0F
// PAGE 1
#define RFU10 0x10
#define ModeReg 0x11
#define TxModeReg 0x12
#define RxModeReg 0x13
#define TxControlReg 0x14
#define TxAutoReg 0x15
#define TxSelReg 0x16
#define RxSelReg 0x17
#define RxThresholdReg 0x18
#define DemodReg 0x19
#define RFU1A 0x1A
#define RFU1B 0x1B
#define MifareReg 0x1C
#define RFU1D 0x1D
#define RFU1E 0x1E
#define SerialSpeedReg 0x1F
// PAGE 2
#define RFU20 0x20
#define CRCResultRegM 0x21
#define CRCResultRegL 0x22
#define RFU23 0x23
#define ModWidthReg 0x24
#define RFU25 0x25
#define RFCfgReg 0x26
#define GsNReg 0x27
#define CWGsCfgReg 0x28
#define ModGsCfgReg 0x29
#define TModeReg 0x2A
#define TPrescalerReg 0x2B
#define TReloadRegH 0x2C
#define TReloadRegL 0x2D
#define TCounterValueRegH 0x2E
#define TCounterValueRegL 0x2F
// PAGE 3
#define RFU30 0x30
#define TestSel1Reg 0x31
#define TestSel2Reg 0x32
#define TestPinEnReg 0x33
#define TestPinValueReg 0x34
#define TestBusReg 0x35
#define AutoTestReg 0x36
#define VersionReg 0x37
#define AnalogTestReg 0x38
#define TestDAC1Reg 0x39
#define TestDAC2Reg 0x3A
#define TestADCReg 0x3B
#define RFU3C 0x3C
#define RFU3D 0x3D
#define RFU3E 0x3E
#define RFU3F 0x3F /////////////////////////////////////////////////////////////////////
//和MF522通讯时返回的错误代码
/////////////////////////////////////////////////////////////////////
#define MI_OK 0
#define MI_NOTAGERR (-1)
#define MI_ERR (-2) #define BOOLEAN unsigned char
#define INT8U unsigned char
#define INT8S signed char
#define INT16U unsigned short int
#define INT16S signed short int
#define INT32U unsigned int
#define INT32S signed int void delay_ns(INT16U ns); //延时ns级别
INT8U SPIReadByte(void); // 读SPI数据
void SPIWriteByte(INT8U SPIData); // 写SPI数据
INT8U ReadRawRC(INT8U Address); //读RC632寄存器
void WriteRawRC(INT8U Address, INT8U value); //写RC632寄存器
void ClearBitMask(INT8U reg,INT8U mask); //清RC522寄存器位
void SetBitMask(INT8U reg,INT8U mask); //置RC522寄存器位
void CalulateCRC(INT8U *pIndata,INT8U len,INT8U *pOutData); //用MF522计算CRC16函数
char PcdComMF522(INT8U Command,
INT8U *pInData,
INT8U InLenByte,
INT8U *pOutData,
INT16U *pOutLenBit); //通过RC522和ISO14443卡通讯 char PcdReset(void); //复位RC522
char PcdRequest(INT8U req_code,INT8U *pTagType); //寻卡
void PcdAntennaOn(void); //开启天线
void PcdAntennaOff(void); //关闭天线
char M500PcdConfigISOType(INT8U type); //设置RC632的工作方式
char PcdAnticoll(INT8U *pSnr); //防冲撞
char PcdSelect(INT8U *pSnr); //选定卡片
char PcdAuthState(INT8U auth_mode,INT8U addr,INT8U *pKey,INT8U *pSnr); //验证卡片密码
char PcdWrite(INT8U addr,INT8U *pData); //写数据到M1卡一块
char PcdRead(INT8U addr,INT8U *pData); //读取M1卡一块数据
char PcdHalt(void); //命令卡片进入休眠状态
void init_rc522(void); //初始化rc522 void delay_ns(INT16U ns) //延时ns级别
{
usleep(ns);
} //------------------------------------------
// 读SPI数据
//------------------------------------------
INT8U SPIReadByte(void)
{
INT8U SPICount; //用于时钟输出数据的计数器
INT8U SPIData;
SPIData = ;
for (SPICount = ; SPICount < ; SPICount++) //准备在要读取的数据时钟
{
SPIData <<=; //旋转数据
CLR_SPI_CK; //nop();//nop(); //提高时钟时钟数据从MAX7456
if(STU_SPI_MISO)
{
SPIData|=0x01;
}
SET_SPI_CK; //nop();//nop(); // 放下时钟准备下一位
} // 和环回
return (SPIData); // 最后返回读取数据
}
//------------------------------------------
// 写SPI数据
//------------------------------------------
void SPIWriteByte(INT8U SPIData)
{
INT8U SPICount; //用于时钟输出数据的计数器
for (SPICount = ; SPICount < ; SPICount++)
{
if (SPIData & 0x80)
{
SET_SPI_MOSI;
}
else
{
CLR_SPI_MOSI;
}
delay_ns();
CLR_SPI_CK;delay_ns();
SET_SPI_CK;delay_ns();
SPIData <<= ;
}
}
/////////////////////////////////////////////////////////////////////
//功 能:读RC632寄存器
//参数说明:Address[IN]:寄存器地址
//返 回:读出的值
/////////////////////////////////////////////////////////////////////
INT8U ReadRawRC(INT8U Address)
{
INT8U ucAddr;
INT8U ucResult=;
CLR_SPI_CS;
ucAddr = ((Address<<)&0x7E)|0x80;
SPIWriteByte(ucAddr); // 写SPI数据
ucResult=SPIReadByte(); // 读SPI数据
SET_SPI_CS;
return ucResult;
} /////////////////////////////////////////////////////////////////////
//功 能:写RC632寄存器
//参数说明:Address[IN]:寄存器地址
// value[IN]:写入的值
/////////////////////////////////////////////////////////////////////
void WriteRawRC(INT8U Address, INT8U value)
{
INT8U ucAddr;
CLR_SPI_CS;
ucAddr = ((Address<<)&0x7E);
SPIWriteByte(ucAddr); //选定寄存器
SPIWriteByte(value); //写入数据
SET_SPI_CS;
} /////////////////////////////////////////////////////////////////////
//功 能:清RC522寄存器位
//参数说明:reg[IN]:寄存器地址
// mask[IN]:清位值
/////////////////////////////////////////////////////////////////////
void ClearBitMask(INT8U reg,INT8U mask)
{
char tmp = 0x00;
tmp = ReadRawRC(reg); //读出要清除的清除位掩码数据
WriteRawRC(reg, tmp & ~mask); //要清除的清除位掩码
}
/////////////////////////////////////////////////////////////////////
//功 能:置RC522寄存器位
//参数说明:reg[IN]:寄存器地址
// mask[IN]:置位值
/////////////////////////////////////////////////////////////////////
void SetBitMask(INT8U reg,INT8U mask)
{
char tmp = 0x00;
tmp = ReadRawRC(reg); //读出要清除的清除位掩码数据
WriteRawRC(reg,tmp | mask); //写入的清除位掩码
} /////////////////////////////////////////////////////////////////////
//用MF522计算CRC16函数
/////////////////////////////////////////////////////////////////////
void CalulateCRC(INT8U *pIndata,INT8U len,INT8U *pOutData)
{
INT8U i,n;
ClearBitMask(DivIrqReg,0x04); //清RC522寄存器位
WriteRawRC(CommandReg,PCD_IDLE); //写RC632寄存器
SetBitMask(FIFOLevelReg,0x80);
for (i=; i<len; i++)
{WriteRawRC(FIFODataReg, *(pIndata+i));}
WriteRawRC(CommandReg, PCD_CALCCRC);
i = 0xFF;
do
{
n = ReadRawRC(DivIrqReg);
i--;
}
while ((i!=) && !(n&0x04));
pOutData[] = ReadRawRC(CRCResultRegL);
pOutData[] = ReadRawRC(CRCResultRegM);
} /////////////////////////////////////////////////////////////////////
//功 能:通过RC522和ISO14443卡通讯
//参数说明:Command[IN]:RC522命令字
// pInData[IN]:通过RC522发送到卡片的数据
// InLenByte[IN]:发送数据的字节长度
// pOutData[OUT]:接收到的卡片返回数据
// *pOutLenBit[OUT]:返回数据的位长度
/////////////////////////////////////////////////////////////////////
char PcdComMF522(INT8U Command,
INT8U *pInData,
INT8U InLenByte,
INT8U *pOutData,
INT16U *pOutLenBit)
{
char status = MI_ERR;
INT8U irqEn = 0x00;
INT8U waitFor = 0x00;
INT8U lastBits;
INT8U n;
INT16U i;
switch (Command)
{
case PCD_AUTHENT:
irqEn = 0x12;
waitFor = 0x10;
break;
case PCD_TRANSCEIVE:
irqEn = 0x77;
waitFor = 0x30;
break;
default:
break;
} WriteRawRC(ComIEnReg,irqEn|0x80);
ClearBitMask(ComIrqReg,0x80);
WriteRawRC(CommandReg,PCD_IDLE);
SetBitMask(FIFOLevelReg,0x80); for (i=; i<InLenByte; i++)
{
WriteRawRC(FIFODataReg, pInData[i]);
}
WriteRawRC(CommandReg, Command); if (Command == PCD_TRANSCEIVE)
{
SetBitMask(BitFramingReg,0x80);
} //i = 600;//根据时钟频率调整,操作M1卡最大等待时间25ms
i = ;
do
{
n = ReadRawRC(ComIrqReg);
i--;
}
while ((i!=) && !(n&0x01) && !(n&waitFor));
ClearBitMask(BitFramingReg,0x80); if (i!=)
{
if(!(ReadRawRC(ErrorReg)&0x1B))
{
status = MI_OK;
if (n & irqEn & 0x01)
{ status = MI_NOTAGERR; }
if (Command == PCD_TRANSCEIVE)
{
n = ReadRawRC(FIFOLevelReg);
lastBits = ReadRawRC(ControlReg) & 0x07;
if (lastBits)
{
*pOutLenBit = (n-)* + lastBits;
}
else
{
*pOutLenBit = n*;
}
if (n == )
{
n = ;
}
if (n > MAXRLEN)
{
n = MAXRLEN;
}
for (i=; i<n; i++)
{
pOutData[i] = ReadRawRC(FIFODataReg);
}
}
}
else
{
status = MI_ERR;
} } SetBitMask(ControlReg,0x80); // stop timer now
WriteRawRC(CommandReg,PCD_IDLE);
return status;
} /////////////////////////////////////////////////////////////////////
//功 能:寻卡
//参数说明: req_code[IN]:寻卡方式
// 0x52 = 寻感应区内所有符合14443A标准的卡
// 0x26 = 寻未进入休眠状态的卡
// pTagType[OUT]:卡片类型代码
// 0x4400 = Mifare_UltraLight
// 0x0400 = Mifare_One(S50)
// 0x0200 = Mifare_One(S70)
// 0x0800 = Mifare_Pro(X)
// 0x4403 = Mifare_DESFire
//返 回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdRequest(INT8U req_code,INT8U *pTagType)
{
char status;
INT16U unLen;
INT8U ucComMF522Buf[MAXRLEN]; ClearBitMask(Status2Reg,0x08); //清RC522寄存器位
WriteRawRC(BitFramingReg,0x07); //写RC632寄存器
SetBitMask(TxControlReg,0x03); //置RC522寄存器位 ucComMF522Buf[] = req_code; status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,,ucComMF522Buf,&unLen); if ((status == MI_OK) && (unLen == 0x10))
{
*pTagType = ucComMF522Buf[];
*(pTagType+) = ucComMF522Buf[];
}
else
{
status = MI_ERR;
}
return status;
} /////////////////////////////////////////////////////////////////////
//功 能:防冲撞
//参数说明: pSnr[OUT]:卡片序列号,4字节
//返 回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdAnticoll(INT8U *pSnr)
{
char status;
INT8U i,snr_check=;
INT16U unLen;
INT8U ucComMF522Buf[MAXRLEN]; ClearBitMask(Status2Reg,0x08);
WriteRawRC(BitFramingReg,0x00);
ClearBitMask(CollReg,0x80); ucComMF522Buf[] = PICC_ANTICOLL1;
ucComMF522Buf[] = 0x20; status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,,ucComMF522Buf,&unLen); if (status == MI_OK)
{
for (i=; i<; i++)
{
*(pSnr+i) = ucComMF522Buf[i];
snr_check ^= ucComMF522Buf[i];
}
if (snr_check != ucComMF522Buf[i])
{
status = MI_ERR;
}
} SetBitMask(CollReg,0x80);
return status;
} /////////////////////////////////////////////////////////////////////
//功 能:选定卡片
//参数说明: pSnr[IN]:卡片序列号,4字节
//返 回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdSelect(INT8U *pSnr)
{
char status;
INT8U i;
INT16U unLen;
INT8U ucComMF522Buf[MAXRLEN]; ucComMF522Buf[] = PICC_ANTICOLL1;
ucComMF522Buf[] = 0x70;
ucComMF522Buf[] = ;
for (i=; i<; i++)
{
ucComMF522Buf[i+] = *(pSnr+i);
ucComMF522Buf[] ^= *(pSnr+i);
}
CalulateCRC(ucComMF522Buf,,&ucComMF522Buf[]); ClearBitMask(Status2Reg,0x08); status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,,ucComMF522Buf,&unLen); if ((status == MI_OK) && (unLen == 0x18))
{
status = MI_OK;
}
else
{
status = MI_ERR;
} return status;
}
/////////////////////////////////////////////////////////////////////
//功 能:验证卡片密码
//参数说明: auth_mode[IN]: 密码验证模式
// 0x60 = 验证A密钥
// 0x61 = 验证B密钥
// addr[IN]:块地址
// pKey[IN]:密码
// pSnr[IN]:卡片序列号,4字节
//返 回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdAuthState(INT8U auth_mode,INT8U addr,INT8U *pKey,INT8U *pSnr)
{
char status;
INT16U unLen;
INT8U ucComMF522Buf[MAXRLEN]; ucComMF522Buf[] = auth_mode;
ucComMF522Buf[] = addr;
memcpy(&ucComMF522Buf[], pKey, );
memcpy(&ucComMF522Buf[], pSnr, ); status = PcdComMF522(PCD_AUTHENT,ucComMF522Buf,,ucComMF522Buf,&unLen);
if ((status != MI_OK) || (!(ReadRawRC(Status2Reg) & 0x08)))
{
status = MI_ERR;
} return status;
} /////////////////////////////////////////////////////////////////////
//功 能:读取M1卡一块数据
//参数说明: addr[IN]:块地址
// pData[OUT]:读出的数据,16字节
//返 回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdRead(INT8U addr,INT8U *pData)
{
char status;
INT16U unLen;
INT8U ucComMF522Buf[MAXRLEN]; ucComMF522Buf[] = PICC_READ;
ucComMF522Buf[] = addr;
CalulateCRC(ucComMF522Buf,,&ucComMF522Buf[]); status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,,ucComMF522Buf,&unLen);
if ((status == MI_OK) && (unLen == 0x90))
{
memcpy(pData, ucComMF522Buf, );
}
else
{
status = MI_ERR;
} return status;
} /////////////////////////////////////////////////////////////////////
//功 能:命令卡片进入休眠状态
//返 回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdHalt(void)
{
char status;
INT16U unLen;
INT8U ucComMF522Buf[MAXRLEN]; ucComMF522Buf[] = PICC_HALT;
ucComMF522Buf[] = ;
CalulateCRC(ucComMF522Buf,,&ucComMF522Buf[]); status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,,ucComMF522Buf,&unLen); return MI_OK;
}
/////////////////////////////////////////////////////////////////////
//功 能:复位RC522
//返 回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdReset(void)
{
SET_RC522RST; //rst 高电平
delay_ns(); //10ns
CLR_RC522RST; //rst 低电平
delay_ns(); //10ns
SET_RC522RST; //rst 高电平
delay_ns(); //10ns
WriteRawRC(CommandReg,PCD_RESETPHASE); //复位
delay_ns(); //10ns WriteRawRC(ModeReg,0x3D); //和Mifare卡通讯,CRC初始值0x6363,SIGIN为低电平有效,无线模式
WriteRawRC(TReloadRegL,); //高装入定时器
WriteRawRC(TReloadRegH,); //低装入定时器
WriteRawRC(TModeReg,0x8D); //开启522,设置分频
WriteRawRC(TPrescalerReg,0x3E); //定时器当前值 WriteRawRC(TxAutoReg,0x40); //必须要(控制天线设置) return MI_OK;
}
//////////////////////////////////////////////////////////////////////
//设置RC632的工作方式
//////////////////////////////////////////////////////////////////////
char M500PcdConfigISOType(INT8U type)
{
if (type == 'A') //ISO14443_A
{
ClearBitMask(Status2Reg,0x08); //接收器,发射器和数据模式检测器的状态位
WriteRawRC(ModeReg,0x3D); //定义发送和接受的常用模式
WriteRawRC(RxSelReg,0x86); //非接触方式,引脚保护为6个时钟
WriteRawRC(RFCfgReg,0x7F); //非接触的48dB的增益
WriteRawRC(TReloadRegL,); //tmoLength);// TReloadVal = 'h6a =tmoLength(dec)
WriteRawRC(TReloadRegH,); //定时器重装值
WriteRawRC(TModeReg,0x8D); //16位定时器重装值
WriteRawRC(TPrescalerReg,0x3E); //定义内部定时器重装值
delay_ns();
PcdAntennaOn(); //设置天线开启设置(间隔1ms)
}
else{ return -; } return MI_OK;
}
/////////////////////////////////////////////////////////////////////
//开启天线
//每次启动或关闭天险发射之间应至少有1ms的间隔
/////////////////////////////////////////////////////////////////////
void PcdAntennaOn(void)
{
INT8U i;
i = ReadRawRC(TxControlReg);
if (!(i & 0x03))
{
SetBitMask(TxControlReg, 0x03);
}
}
/////////////////////////////////////////////////////////////////////
//关闭天线
/////////////////////////////////////////////////////////////////////
void PcdAntennaOff(void)
{
ClearBitMask(TxControlReg, 0x03);
} ////////////////////////////////////////////////////////////////////
//初始化gpio
//int spi_cs =0; //片选
//int spi_ck =1; // 时钟信号,由主器件产生
//int spi_mosi =2; //主器件数据输出,从器件数据输入
//int spi_miso =3; //主器件数据输入,从器件数据输出
//int spi_rst =4; //复位低电平有效(1开始)
////////////////////////////////////////////////////////////////////
/**/
void init_gpio_rc522(void)
{
wiringPi(,); //初始化wiringPi库
GPIO_init(spi_cs,,,); //输出,下拉,无调试
GPIO_init(spi_ck,,,); //输出,下拉,无调试
GPIO_init(spi_mosi,,,); //输出,下拉,无调试
GPIO_init(spi_miso,,,); //输入,下拉,无调试
GPIO_init(spi_rst,,,); //输出,下拉,无调试
} void init_rc522(void)
{
init_gpio_rc522(); //树莓派gpio应用初始化
PcdReset(); //复位RC522
PcdAntennaOff(); //关闭天线
PcdAntennaOn(); //开启天线
M500PcdConfigISOType( 'A' ); //设置RC632的工作方式
} #endif

rc522头文件的更多相关文章

  1. 【C】.h头文件的重复包含问题

    .h头文件存在的意义就是封装,可以方便多个.c源文件使用,但要防止.h头文件被同一个.c源文件多次包含. 例如, io.h文件 #ifndef _IO_H_ #define _IO_H_ #defin ...

  2. C/C++头文件区别

    在从C迁移到C++时,引用的头文件经常忘记是C的还是C++特有的 1. *.h   limits.h ctype.h 2. c* climits cctype [结尾不含.h] 3. 其余的都属于C+ ...

  3. iOS开发中遇到的错误整理 - 集成第三方框架时,编译后XXX头文件找不到

    iOS编译报错-XXX头文件找不到 错误出现的情况: 自己在继承第三方的SDK的时候,明明导入了头文件,但是系统报错,提示头文件找不到 解决方法 既然系统找不到,给他个具体路径,继续找去! 路径就填写 ...

  4. 使用powershell批量添加Keil和IAR的头文件路径

    在Keil和IAR的工程中,为了使文件结构清晰,通常会设置很多的子文件夹,然后将头文件和源文件放在不同的子文件夹中,这样就需要手动添加这些头文件夹的路径.当工程结构非常复杂时,文件夹的数量就非常多,特 ...

  5. C/C++头文件使用 #ifndef #define #endif 的原因

    背景 在编译的时候,出现"redefine"的错误,最后检查才发现对应的头文件没有写正确的预编译信息: #ifndef _HeadFileName_H #define _HeadF ...

  6. Qt - 错误总结 - 在自定义类头文件中添加Q_OBJECT 编译时报错(undefined reference to ‘vtable for xxThread)

    错误提示:在添加的QThread子类头文件添加Q_OBJECT时,编译程序,出现"undefined reference to 'vtable for xxThread'"错误提示 ...

  7. C语言中,头文件和源文件的关系(转)

    简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句, ...

  8. 配置apue的头文件apue.h和unp的头文件anp.h

    配置apue的头文件apue.h和unp的头文件anp.h 如果要使用gcc -g 来生成可调试文件一定要修改Make.defines.linux文件中的CFLAGS变量 修改为:CFLAGS=-an ...

  9. c/c++头文件_string

    string, cstring, string.h 一.string头文件 主要包含一些字符串转换的函数 // sto* NARROW CONVERSIONS// sto* WIDE CONVERSI ...

随机推荐

  1. (纪录片)电的故事 Shock & Awe The Story of Electricity

    简介: 导演: Tim Usborne主演: Jim Al-Khalili类型: 纪录片 / 传记 / 历史官方网站: www.bbc.co.uk/programmes/p00kjq6d制片国家/地区 ...

  2. CentOS6.5安装nginx1.5.8时出现“cp: "conf/koi-win" 与"/usr/local/nginx/conf/koi-win" 为同一文件”的解决方法

    安装方法主要参考了:http://www.cnblogs.com/zhoulf/archive/2013/02/09/2909653.html这篇文章,出现“cp: "conf/koi-wi ...

  3. WIN10系统右击开始菜单没有属性选项怎么办

    修复方法一:1.按下"WIN+R"输入:regedit回车,进入注册表编辑器:2.在注册表左侧依次打开:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ ...

  4. HDU1069(还是dp基础)

    今天不想说太多废话-由于等下要写自己主动提交机. 不知道能不能成功呢? 题目的意思就是,一个猴子,在叠砖头 ...以下的要严格大于上面的.求叠起来最高能到多少- n非常少,n^2算法毫无压力-话说dp ...

  5. xpress for node 路由route几种实现方式

    路由实现方式和顺序第二种路由写法第三种路由写法最佳 http://blog.csdn.net/mociml/article/details/11137571# http://blog.fens.me/ ...

  6. markdown table语法

    普通的表格 | 一个普通标题 | 一个普通标题 | 一个普通标题 | | ------ | ------ | ------ | | 短文本 | 中等文本 | 稍微长一点的文本 | | 稍微长一点的文本 ...

  7. 最好使的歌词编辑工具--Beslyric

      https://www.cnblogs.com/BensonLaur/p/6262565.html 感谢开发这么好的工具! 下载地址:http://beslyric.320.io/BesBlog/ ...

  8. Aerospike系列:7:数据分布详解

    1:Aerospike数据库是Shared-Nothing架构,集群中的每个节点都是相同的,不会出现单点故障. Aerospike有智能分区算法,即把用户输入的key在内部根据RIPEMD-160算法 ...

  9. mysql代理之Atlas

    Atlas是由 Qihoo 360,  Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy0.8.2版本号的基础上.改动了大量bu ...

  10. linux find command information more

    查找文件find ./ -type f 查找目录find ./ -type d 查找名字为test的文件或目录find ./ -name test 查找名字符合正则表达式的文件,注意前面的‘.*’(查 ...