温湿度传感器SHT7X和SHT2X系列的个人笔记:
官方资料下载:
https://www.doczj.com/doc/742220750.html,/download_sd.aspx
1:使用时硬件部分注意:
A:电源端需接100nF或以上退偶电容。
B:DATA、SCK需要接上拉电阻到其正电源端。
C:若走线过长,DATA与SCK之间最好加地线或电源线隔离。
D:MCU不能用带+5V输出的I/O口去直接驱动。MCU需用不带内上拉电阻的集电极输出端或外加+3V转换隔离电路去连接SHT,否则出错或损坏SHT。
E:上电后,需等待至少11ms的时间让SHT进入休眠状态(即等待状态)后再驱动SHT。
2:软件:
A:SHT7X系列和SHT2X系列驱动方式或协议有区别,SHT2X 的D系列是IIC方式,而SHT7X并非标准IIC协议,具体看手册。SHT2X还有SDM比特流、PWM的接口系列,这里我们仅讨论常用的IIC系列。
B:SCK时钟线相对其它数字芯片,运行频率过低。驱动时需按手册上做相应延时。
C:测量命令发出,给充足等待时间,实验时设置>200ms,实验通过之后,再进行多次小幅减小等待时间测试,直到稳定、高速。但测量频率不宜过高,随着测量频率增加,其电能损耗会使自身温度有相
应上升,会影响测量精度。在满足产品要求的前提下尽量延长测量周期,当然并非无限延长,一般控制在1秒钟1~3次的测量为宜,具体测量上限频率按照手册和根据实际要求情况而定。
网站资料有C历程,但过于庞杂,特别是SHT2X系列,没必要每句都读到,大家可以挑着重点分析,主要是通讯过程细节实现和CRC 校验。
3:关于CRC校验:
具体原理大家看相应文献,这里主要强调以下:
A:SHTXX使用CRC8校验,沉余多项式:P(x)=x^8+x^5+x^4+1=100110001=0x131;(手册中多项式不包括最末位1)
B:校验原始数据:SHT7X系列需从开始的地址到命令符直至测量数据全部进行CRC沉余运算;而SHT2X系列只需对测量结果:CRC 码前16位温湿度二进制数据进行CRC沉余运算。
C:CRC添加到信息帧中顺序:SHT7X系列需高低位翻转后即MSB 变为LSB```LSB变为MSB,加到信息帧末尾。而SHT2X系列不需高低位翻转,CRC直接加到信息帧末尾。
4:关于PROTEUS仿真:仿真软件中SHT7X系列CRC并未进行翻转,若翻转CRC校验会报错,跟实际使用不符,这里大家要注意;笔者当初卡这老半天,最后才发现。至于SHT2X——完全没响应!仿真时一直有莫名错误,实际已完全正常,包括CRC,但仿真时仍有错误。主要公司需要保留过程全部资料文档,包括仿真历程,
希望有明了SHT2X仿真问题原因的,告知大家,由于工程有限,笔者不能继续仿真测试,此次工程过后再分析。(使用的版本是:PROTEUS7.10破解非正版,貌似此原因跟非正版没多大关系)
其余补充说明:
在KEIL编译时,例如若定义一个整形变量:unsigned int i,进行/求模运算时:例:22000/320,结果不正确,而改为22000.0/320.0时结果正确。恕笔者才疏学浅,学校时没好好听课,不知此现象具体原因。若定义菲整形如float i,怎么都正确。自己找资料看吧。在此对后面计算编写出错时,有类似现象的作下参考。以下附上SHT71和SHT21完整调试程序,全部全局变量:(使用MAX7219驱动共阴数码管显示)(不含寄存器操作,局部注释)SHT21:
#include
#include
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={ //共阴数码管:0、1、2、3、4、5、6、7、8、9、-、不显示;0x7e,0x30,0x6d,0x79,
0x33,0x5b,0x5f,0x70,
0x7f,0x7b,0x01,0};
uint i,ii,yyi,crc1;
uchar vv,crc0,imm,error=0;
float TEMP=0,HUMI=0;
sbit DIN=P2^0; //MAX7219接口定义,数据总线
sbit LOAD=P2^1; //MAX7219接口定义,片选位
sbit CLK=P2^2; //MAX7219接口定义,时钟信号端
sbit SCL_sht=P0^0; //SHT21接口定义,时钟信号端
sbit SDA_sht=P0^1; //SHT21接口定义,数据总线
sbit TES=P2^6; //正常一次测量完成信号,低电平有效,外接一LED
sbit ERR=P2^7; //故障位定义,低电平有效,外接一LED;
void MAX7219_init(); //MAX7219初始
void LEE(uint e); //MAX7219子函数,SPI方式
void MM(); //显示数据送往MAX7219
void EEi_sht(); //SHT2x主函数
void SHT2x(uchar yi); //SHT2x子函数
void write_sht(uchar yii); //IIC_WRITE
void read_sht(bit x_ack);
void SAT_sht();
void SOP_sht();
void soft_rest_sht();
void crc_8(); //CRC校验;生成多项式:P(x)=x^8+x^5+x^4+1=100110001=0x131; void delay();
void init();
void main()
{
init();
while(1)
{}
}
void init()
{
MAX7219_init(); //MAX7219初始
TMOD=0x01; //定时器0初始,方式1
EA=1;
ET0=1;
TR0=1;
TH0=0;
TL0=0;
}
void MAX7219_init()
{
LEE(0xff01);
LEE(0xf900);
LEE(0xfa0e); //段电流设定
LEE(0xfb07);
LEE(0xfc01);
LEE(0xff00);
}
void LEE(uint e)
{
uint zz;
LOAD=0;
for(zz=0x8000;zz>0;zz>>=1)
{
if(zz&e)
DIN=1;
else
DIN=0;
_nop_();
CLK=1;
CLK=0;
}
LOAD=1;
}
void MM()
{
uint TEMP_,HUMI_;
uchar sign_;
TEMP_=fabs(TEMP)*10;
HUMI_=HUMI*10;
if(TEMP>=0)
sign_=1;
else
sign_=0;
if(!error)
{
if(TEMP>=100)
LEE(table[TEMP_%10000/1000]+0xf100);
else
LEE(table[10+sign_]+0xf100);
LEE(table[TEMP_%1000/100]+0xf200);
LEE(table[TEMP_%100/10]+0xf300+0x80); //加小数点位
LEE(table[TEMP_%10]+0xf400);
LEE(table[HUMI_%10000/1000]+0xf500);
LEE(table[HUMI_%1000/100]+0xf600);
LEE(table[HUMI_%100/10]+0xf700+0x80); //加小数点位
LEE(table[HUMI_%10]+0xf800);
}
else
{
LEE(0xf14f);
LEE(0xf277);
LEE(0xf377);
LEE(0xf47e);
LEE(0xf501);
LEE(0xf601);
LEE(0xf701);
LEE(0xf801);
}
}
void EEi_sht()
{
SHT2x(0xe3); //测温
if(crc1!=crc0)
{
if(!(error&0x02))
error+=0x01;
}
else
{
yyi&=0xfffc;
TEMP=yyi*175.72/0x10000-46.85;
}
SHT2x(0xe5); //测湿
if(crc1!=crc0||!yyi)
{
if(!(error&0x02))
error+=0x01;
}
else
{
error&=0x0c;
TES=0;
yyi&=0xfffc;
HUMI=yyi*125.0/0x10000-6;
}
TES=1;
}
void SHT2x(uchar yi)
{
if(error&0x03) //若有错误重新唤醒IIC或软启动SHT21 soft_rest_sht();
else
SAT_sht();
write_sht(0x80);
write_sht(yi);
SAT_sht();
write_sht(0x81);
SCL_sht=1;
for(ii=0;ii<65532;ii++) //限时等待测量完成
{
delay();
if(SCL_sht)
break;
}
if(SCL_sht)
{
yyi=0;
read_sht(1);
yyi=vv;
yyi<<=8;
read_sht(1);
yyi+=vv;
crc1=0;
crc1^=yyi;
crc_8();
read_sht(0);
crc0=vv;
}
else
crc1=!crc0;
SOP_sht();
}
void write_sht(uchar yii) {
for(ii=0x80;ii>0;ii>>=1) {
if(yii&ii)
SDA_sht=1;
else
SDA_sht=0;
delay();
SCL_sht=1;
delay();
SCL_sht=0;
delay();
}
SDA_sht=1;
delay();
SCL_sht=1;
delay();
if(SDA_sht)
{
if(!(error&0x02))
error+=0x01;
}
SCL_sht=0;
}
void read_sht(bit x_ack) {
vv=0;
SDA_sht=1;
delay();
for(ii=0;ii<8;ii++) {
SCL_sht=1;
delay();
vv<<=1;
if(SDA_sht)
vv|=1;
delay();
SCL_sht=0;
delay();
}
SDA_sht=!x_ack;
delay();
SCL_sht=1;
delay();
SCL_sht=0;
delay();
SDA_sht=1;
}
void SAT_sht()
{
SCL_sht=0;
delay();
SDA_sht=1;
SCL_sht=1;
delay();
SDA_sht=0;
delay();
SCL_sht=0;
delay();
}
void SOP_sht()
{
SCL_sht=0;
delay();
SDA_sht=0;
delay();
SCL_sht=1;
delay();
SDA_sht=1;
delay();
}
void soft_rest_sht()
{
SAT_sht();
SDA_sht=1;
SCL_sht=0;
delay();
for(ii=0;ii<20;ii++)
{
SCL_sht=1;
delay();
SCL_sht=0;
delay();
}
if(error&0x02)
{
write_sht(0x80);
write_sht(0xfe);
SOP_sht();
for(ii=0;ii<1000;ii++) delay();
}
SAT_sht();
error&=0x0c;
}
void crc_8()
{
for(ii=0;ii<16;ii++)
{
if(crc1&0x8000)
{
crc1<<=1;
crc1^=0x3100;
}
else
crc1<<=1;
}
crc1>>=8;
}
void delay()
{
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
}
void E0() interrupt 1
{
TH0=0xa2;
TL0=0;
i++;
if(i>62) //定时1~2s周期启动SHT21测量“”“”晶振12MHz
{
i=0;
EEi_sht();
}
MM();
if(!error)
ERR=1;
else
{
ERR=0;
imm++;
if(imm>200)
{
imm=0;
error=0;
}
}
}
SHT71:
#include
#include
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={ //共阴数码管:0、1、2、3、4、5、6、7、8、9、-、不显示;0x7e,0x30,0x6d,0x79,
0x33,0x5b,0x5f,0x70,
0x7f,0x7b,0x01,0};
uint i,ii,any;
uchar vv,crc0,crc1,imm,error=0;
float TEMP=0,HUMI=0;
sbit DIN=P2^0; //MAX7219接口定义,数据总线
sbit LOAD=P2^1; //MAX7219接口定义,片选位
sbit CLK=P2^2; //MAX7219接口定义,时钟信号端
sbit SCL_sht=P0^0; //SHT21接口定义,时钟信号端
sbit SDA_sht=P0^1; //SHT21接口定义,数据总线
sbit TES=P2^6; //正常一次测量完成信号,低电平有效,外接一LED
sbit ERR=P2^7; //故障位定义,低电平有效,外接一LED;
void MAX7219_init(); //MAX7219初始
void LEE(uint e); //MAX7219子函数,SPI方式
void MM(); //显示数据送往MAX7219
void EEi_sht7x(); //SHT7x主函数
void SHT7x(uchar yi); //SHT7x子函数
void write_sht7x(uchar y);
void read_sht7x(bit x_ack);
void SAT_sht7x();
void soft_rest_sht7x();
void crc_8(); //CRC校验;生成多项式:P(x)=x^8+x^5+x^4+1=100110001=0x131; void delay();
void init();
void main()
{
init();
while(1)
{}
}
void init()
{
MAX7219_init(); //MAX7219初始
TMOD=0x01; //定时器0初始,方式1
EA=1;
ET0=1;
TR0=1;
TH0=0;
TL0=0;
}
void MAX7219_init()
{
LEE(0xff01);
LEE(0xf900);
LEE(0xfa0e); //段电流设定
LEE(0xfb07);
LEE(0xfc01);
LEE(0xff00);
}
void LEE(uint e)
{
uint zz;
LOAD=0;
for(zz=0x8000;zz>0;zz>>=1)
{
if(zz&e)
DIN=1;
else
DIN=0;
_nop_();
CLK=1;
CLK=0;
}
LOAD=1;
}
void MM()
{
uint TEMP_,HUMI_;
uchar sign_;
TEMP_=fabs(TEMP)*10;
HUMI_=HUMI*10;
if(TEMP>=0)
sign_=1;
else
sign_=0;
if(!error)
{
if(TEMP>=100)
LEE(table[TEMP_%10000/1000]+0xf100);
else
LEE(table[10+sign_]+0xf100);
LEE(table[TEMP_%1000/100]+0xf200);
LEE(table[TEMP_%100/10]+0xf300+0x80); //加小数点位
LEE(table[TEMP_%10]+0xf400);
LEE(table[HUMI_%10000/1000]+0xf500);
LEE(table[HUMI_%1000/100]+0xf600);
LEE(table[HUMI_%100/10]+0xf700+0x80); //加小数点位
LEE(table[HUMI_%10]+0xf800);
}
else
{
LEE(0xf14f);
LEE(0xf277);
LEE(0xf377);
LEE(0xf47e);
LEE(0xf501);
LEE(0xf601);
LEE(0xf701);
LEE(0xf801);
}
}
void EEi_sht7x()
{
SHT7x(0x03); //测温
if(crc1!=crc0)
{
if(!(error&0x08))
error+=0x04;
}
else
{
any&=0x3fff;
TEMP=any*0.01-39.65;
}
///////////////////**********************************************************// ///
SHT7x(0x05); //测湿
if(crc1!=crc0||!any)
{
if(!(error&0x08))
error+=0x04;
}
else
{
error&=0x03;
TES=0;
any&=0x0fff;
HUMI=0.0367*any-2.0468-0.0000015955*any*any;
HUMI+=(TEMP-25)*(0.01+0.00008*any);
if(HUMI>99.90||HUMI<0) //相对湿度大于99.9%或为负数,需将其强制为100% HUMI=100.00;
}
TES=1;
}
void SHT7x(uchar yi)
{
if(error&0x0c)
soft_rest_sht7x();
else
SAT_sht7x();
write_sht7x(yi);
for(ii=0;ii<65532;ii++)
{
delay();
if(!SDA_sht)
break;
}
if(!SDA_sht)
{
any=0;
read_sht7x(1);
any=vv;
any<<=8;
crc1=0;
crc1^=yi;
crc_8();
crc1^=vv;
crc_8();
read_sht7x(1);
any+=vv;
crc1^=vv;
crc_8();
read_sht7x(0);
crc0=0;
for(ii=1;ii<0xe0;ii<<=1) //crc校验值高低位翻转
{
crc0<<=1;
if(vv&ii)
crc0++;
}
// crc0=vv; //若进行PROTEUS仿真,加上这一句。 }
else
crc1=!crc0;
}
void write_sht7x(uchar y)
{
for(ii=0x80;ii>0;ii>>=1)
{
if(y&ii)
SDA_sht=1;
else
SDA_sht=0;
delay();
SCL_sht=1;
delay();
SCL_sht=0;
delay();
}
SDA_sht=1;
delay();
SCL_sht=1;
delay();
if(SDA_sht)
{
if(!(error&0x08))
error+=0x04;
}
SCL_sht=0;
}
void read_sht7x(bit x_ack) {
vv=0;
SDA_sht=1;
delay();
for(ii=0;ii<8;ii++)
{
SCL_sht=1;
delay();
vv<<=1;
if(SDA_sht)
vv|=1;
delay();
SCL_sht=0;
delay();
}
SDA_sht=!x_ack;
delay();
SCL_sht=1;
delay();
SCL_sht=0;
delay();
SDA_sht=1;
}
void SAT_sht7x()
{
SCL_sht=0;
delay();
SDA_sht=1;
SCL_sht=1;
delay();
SDA_sht=0;
delay();
SCL_sht=0;
delay();
SCL_sht=1;
delay();
SDA_sht=1;
delay();
SCL_sht=0;
delay();
SDA_sht=0;
delay();
}
void soft_rest_sht7x()
{
SAT_sht7x();
SDA_sht=1;
SCL_sht=0;
delay();
for(ii=0;ii<20;ii++)
{
SCL_sht=1;
delay();
SCL_sht=0;
delay();
}
if(error&0x08)
{
write_sht7x(0x1e);
for(ii=0;ii<1000;ii++) delay();
}
SAT_sht7x();
error&=0x03;
}
void crc_8()
{
for(ii=0;ii<8;ii++)
{
if(crc1&0x80)
{
crc1<<=1;
crc1^=0x31;
}
else
crc1<<=1;
}
}
void delay() //12us延时“”“”晶振12MHz {
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
}
void E0() interrupt 1
{
TH0=0xa2;
TL0=0;
i++;
if(i>62) //定时1~2s周期启动SHT21测量“”“”晶振12MHz {
i=0;
EEi_sht7x();
}
MM();
if(!error)
ERR=1;
else
{
ERR=0;
imm++;
if(imm>200)
{
imm=0;
error=0;
}
}
}
仿真电路附图:(注意SHT21仿真不成功,SHT71仿真时,CRC不需翻转):1:整体图
2:局部1:
3:局部2:
4:局部3:
mybatis 第一天mybatis的基础知识 课程安排: mybatis和springmvc通过订单商品案例驱动 第一天:基础知识(重点,内容量多) 对原生态jdbc程序(单独使用jdbc开发)问题总结 mybatis框架原理(掌握) mybatis入门程序 用户的增、删、改、查 mybatis开发dao两种方法: 原始dao开发方法(程序需要编写dao接口和dao实现类)(掌握) mybaits的mapper接口(相当于dao接口)代理开发方法(掌握)mybatis配置文件SqlMapConfig.xml mybatis核心: mybatis输入映射(掌握) mybatis输出映射(掌握) mybatis的动态sql(掌握) 第二天:高级知识 订单商品数据模型分析 高级结果集映射(一对一、一对多、多对多) mybatis延迟加载 mybatis查询缓存(一级缓存、二级缓存) mybaits和spring进行整合(掌握) mybatis逆向工程 1对原生态jdbc程序中问题总结 1.1环境 java环境:jdk1.7.0_72 eclipse:indigo mysql:5.1
1.2创建mysql数据 导入下边的脚本: sql_table.sql:记录表结构 sql_data.sql:记录测试数据,在实际企业开发中,最后提供一个初始化数据脚本 1.3jdbc程序 使用jdbc查询mysql数据库中用户表的记录。 创建java工程,加入jar包: 数据库驱动包(mysql5.1) 上边的是mysql驱动。 下边的是oracle的驱动。 程序代码: 1.4问题总结 1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。 设想:使用数据库连接池管理数据库连接。 2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于
使用H-Jtag 的单步调试实验 启动H-Jtag,正确读取CPU 的ID 号。(这里默认您已经会使用H-Jtag,并且Jtag 板已经连接了开发板和PC、串口线也连接了开发板和PC) 说明:除去Jtag 接口、串口和LCD 接上设备外,不要接诸如USB 下载线等,因为单步调试时涉及中 断的调试会出现在中断响应的地方死循环的情况。 点击“”进入AXD 的调试页面,如下图所示: 然后点击“Options->Configure Target”进行配置,操作如下所示:
说明:这里直接将Jlink V7 的也选上了,下一节就不再进行说明。 配置过程,截图如下: 然后关闭AXD(其实也不用关闭AXD,直接点击“Files->Load Debug Symbols”选项,然后选择 TQ2440_Test.axf 文件,此时不推荐这样做),然后重新在ADS 1.2 中打开AXD,下面是加载完毕镜像后的
然后此时就可以单步调试了,下面列出常用的几个按钮以及功能(功能介绍依次从左到右介绍): 全速运行按钮:点击它就全速运行 暂停按钮:点击它可以暂停全速运行 调试按钮:实现单步调试,跳过函数调试等功能(中间4 个按钮) 显示执行点按钮:显示执行位置 断点按钮:设置断点 注意:单步调试时,对于中断等调试是没法进行的(比如接了USB 下载线),否则会出现在2440init.s 文件的415 行“ msr cpsr_cxsf,r1 ;SVCMode”处死循环,因为进入了中断响应子程序。 说明1:对于想要调试nand.c 文件的代码时,需要修改2440init.s 文件的314 和315 行,将其屏蔽(也就是前面加“;”号),并且要求从Nand Flash 启动才行,要Nand Flash 中的数据和您要调试的数据相同才行,否则是没法实现的。 说明2:对于调试时修改了代码,想要重新调试的解决方法为:在ADS 1.2 中编译(注意:是编译)镜像,然后再在AXD 中“Files->Reload Current Image”重新加载镜像即可。 说明3:对于已经设置过了AXD,然后第一次调试时打开AXD 出现错误的解决办法:首先重新配置AXD,然后点击“Files->Load Debug Symbols”,打开“TQ2440_Test.axf”文件,就可以加载镜像进行单步调 试了。这里仅仅抛砖引玉的初步介绍单步调试的方法,可能您在实际使用中还会遇到问题,请到天嵌科技的 论坛发帖子询问。 使用Jlink V7 的单步调试实验 在5.3.2 中已经添加了Jlink 的dll 文件,然后配置Jlink,首先打开“Options->Configure Target”,然后选择“Multe-ICE”,点击Configure 后,在出现的Jlink 配置单中使用默认配置即可;然后打开“Options->Configure Interface”,然后在出现的对话框中选择session file 页面,然后导入光盘的“Windows 平台开发工具包\Jlink 资源\init_sdram.txt”文件,操作如下图所示:
详解强大的SQL注入工具——SQLMAP Akast [N.S.T] 1. 前言 Windows下的注入工具好的又贵,免费的啊D、明小子等又不好用,我们根本没必要花 时间去找什么破解的havij、pangolin什么的,特别是破解的工具很可能被绑了木马。其实Linux下的注入工具也是非常强大的,不过分的说,可以完全取代Windows下面的所有注入工具。 就如backtrack系统里面就有非常丰富的注入工具,对MSSQL、MYSQL、oracle等各种 数据库的应有尽有了,而且这些工具都是免费的,并且是开放源代码的,我们还可以用来修改为合适自己使用的注入工具。 本文给大家介绍的SqlMap是一个开放源码的渗透测试工具,它可以自动探测和利用SQL 注入漏洞来接管数据库服务器。它配备了一个强大的探测引擎,为最终渗透测试人员提供很多猥琐的功能,可以拖库,可以访问底层的文件系统,还可以通过带外连接执行操作系统上的命令。 2. SQLMAP命令详解 为了方便使用我把sqlmap的选项都翻译出来了,当然可能会存在一些不恰当的地方, 请大家指出,可以给我发邮件:akast@https://www.doczj.com/doc/742220750.html,。如果我有时间会把这个工具出个中文版。 Options(选项): --version 显示程序的版本号并退出 -h, --help 显示此帮助消息并退出 -v VERBOSE 详细级别:0-6(默认为1) Target(目标): 以下至少需要设置其中一个选项,设置目标URL。 -d DIRECT 直接连接到数据库。 -u URL, --url=URL 目标URL。 -l LIST 从Burp或WebScarab代理的日志中解析目标。 -r REQUESTFILE 从一个文件中载入HTTP请求。 -g GOOGLEDORK 处理Google dork的结果作为目标URL。 -c CONFIGFILE 从INI配置文件中加载选项。 Request(请求):: 这些选项可以用来指定如何连接到目标URL。 --data=DATA 通过POST发送的数据字符串 --cookie=COOKIE HTTP Cookie头 --cookie-urlencode URL 编码生成的cookie注入 --drop-set-cookie 忽略响应的Set - Cookie头信息
Mybatis 学习笔记 1. mybatis 是什么? ● mybatis 是一个持久层的框架,是apache 下的顶级项目。 ● mybatis 让程序将主要精力放在sql 上,通过mybatis 提供的映射方式,自由灵活生成(半自动化, 大部分需要程序员编写sql )满足需要sql 语句。 ● mybatis 可以将向 preparedStatement 中的输入参数自动进行输入映射,将查询结果集灵活映射成java 对象。(输出映射) 2. mybatis 框架
3. 一个原始查询代码 4. “主键”生成及返回 mysql自增主键 a)执行insert提交之前自动生成一个自增主键。通过mysql函数LAST_INSERT_ID()获取到刚插入记录 的自增主键。是insert之后调用此函数。
?mysql UUID主键 使用mysql的uuid()函数生成主键,需要修改表中id字段类型为string,长度设置成35位。 执行思路:先通过uuid()查询到主键,将主键输入到sql语句中。执行uuid()语句顺序相对于insert语句之前执行。 ?Oracle序列主键
第二十三章:JLINK仿真调试器的使用 首先JLINK只能对NOR FLASH 进行烧写。 如何用JLINK将uboot烧写到NOR FLASH为例来讲解JLINK的用法。假定已经装好了JLINK驱动程序。 第一步:检测JLINK 是否和电脑连接上,用USB线连接JLINK和电脑打开J-Link Commander观察相关信息,看到如下信息证明JLINK已经和电脑连接上。 第二步:关掉上面的窗口,将JLINK和目标板连接,再次打开J-Link Commander观察相关信息,看到如下信息证明JLINK已经找到目标板的芯片。 第三步JLINK 相关设置首先打开J-Flash ARM 看到后选择Options Project Settings 或者直接按Alt+F7 进入工程设置。 在CPU选项中按下图进行选择。内核选择为ARM9,选Use target RAM(faster)Addr栏中填40000000 4KB
在FLASH选项中进行如下设置首先勾掉Automatically detect flash memory看到如下界面后点select flash-----Device选择SST39VF1601。设置完以后点击确认。注意BASE ADDR 为00000000. 第四步:点击file —>open或直接按Clt+O找到存放已经生成好的uboot.bin的文件,并打开uboot.bin。此时软件会提示Start address点击OK.
第五步按F7让JLINK软件实现自动下载。下图为程序下载完成后的界面。 整个过程到此结束,需要注意的是下载完成后必须拔掉JLINK程序才会跑起来。 说明:如果出现以下错误提醒,解决方法及可能原因: 1)注意BASE ADDR为00000000.可能设置错误了; 2)J-LINK复位时间短了或长了; 3)NOR FLASH里面有坏区或烧写误操作导致(通过H-JTAG清空,一般很少出现)。
这个界面可以参考: D:\BTOPS2012\Client\https://www.doczj.com/doc/742220750.html,erManage\ControlChannel.cs,FormChannel.cs 1.VS2010版做repositoryItemLookUpEdit,有两种方法可参考。 2.添加和删除从表(小加减) 一、任务在(权限配置管理》通路管理)中 1.主表:SYS_CHANNEL通路定义表 从表:SYS_CHANNEL_CONFIG通路配置表 2.参照“单证费目清单”:在(费收管理系统》费收代码维护》单证费目清单)中 3.界面控制在:D:\BTOPS2012\Client\https://www.doczj.com/doc/742220750.html,erManage\UserManageControl.cs中 4.可参照:笔记(码头管理)一、1-7 二、4.26 1.控件“layoutControl”包含: layoutControl、layoutControlGroup; 其中的Item是来自外界的控件,直接拖进去的,大小无法修改,各控件位置可调换,都类似于固定存在的Dock的“Fill”属性。 已解决: 2.问题:界面:菜单栏的隔断线如何做? 回答:先添加好各菜单按钮,然后选择某一按钮右击:"Begin a Group" 三、4.27 1.命名空间中出现红色波浪线:“缺少程序集引用”: *在项目的引用中添加引用。 *如果找不到该引用,就在项目Infrastructure\https://www.doczj.com/doc/742220750.html,mon中找到该名称重新生成一下,若还是没有可添加项,在别处找到一样的复制路径,再“浏览”“.DLL”文件。 2.引用出现:感叹号,重新引用。 3.报错:“命名空间被当作类型来使用”:把命名空间添加到类型前。 “兰色体是某某之间不明确的引用”:选择一个,添加到兰色体前。 4.死循环: 当生成成功而运行出现死循环时,要检查Bll文件中是否重复创建了自身的对象,改成
Jlink RTT使用说明 单片机进行调试,一般都会分配出来一个调试的串口,如果单片机使用jlink烧录器,那么可以使用调试工具-RTT来代替串口进行信息的交互,不需要使用串口。 RTT(Real Time Terminal)是SEGGER公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-Link驱动4.90之后的版本都支持RTT。 需要安装J-Link驱动4.90之后的版本 1、使用JLINK SEGGER RTT打印调试信息 然后将这四个文件添加到自己工程中去,并且在主程序工程中包含SEGGER_RTT.h文件。 然后我们就可以直接在主函数中调用SEGGER_RTT_printf函数来打印调试信息了,该函数用法和printf函数类似,只是多了一个参数用来指定RTT通道。其中通道0,就是我们在调试时使用的通道。在主函数中添加如下代码即可打印信息。 SEGGER_RTT_printf(0,"Times %d\r\n",++u32Counter); 这个函数不支持浮点数,如输出浮点数可以先使用sprintf输出到缓存,再使用SEGGER_RTT_WriteString输出。 char rtt_out_str[80]; sprintf(rtt_out_str,"FloatValueIs%f;\n",var_float); SEGGER_RTT_WriteString(0,rtt_out_str); 单独打开RTT VIEWER 可以使用 如果打开JLinkRTTClient,必须同时打开RTT VIEWER 才可以使用
2、RTT输入检测 首先在程序中添加SEGGER_RTT_Read(0,rtt_buf,sizeof(rtt_buf)); 其次在J-Link RTT Viewer控制台的Input里面选择Sending/Send on Enter,然后End of Line 选择None 这样就可以通过下方输入框输入信息,按Enter发送 RTT VIEWER input设置 Win10自带的截图功能非常好用,快捷键Win + Shift + S
第3章内置组件的应用 作者:ThinkGem 更新日期:2014-01-05 1.常用组件 1.1.布局组件 布局文件配置: / jeesite/src/main/webapp/WEB-INF/decorators.xml 默认布局文件: / jeesite/src/main/webapp/WEB-INF/views/layouts/default.jsp 非公共,自己建立的布局文件: / jeesite/src/main/webapp/WEB-INF/views/模块路径/layouts/布局文件.jsp 使用布局文件: JSP的head里添加:
1.2.用户工具UserUtils.java fns.tld 应用场景:在java文件或jsp页面上,获取当前用户相关信息 1.获取当前用户: 1)UserUtils.getUser(); 2)entity.currentUser() 3)${fns:getUser()} 2.获取当前用户部门: 1)UserUtils.getOfficeList() 2)${fns:getOfficeList()} 3.获取当前用户区域: 1)UserUtils.getAreaList() 2)${fns:getAreaList()} 4.获取当前用户菜单: 1)UserUtils.getMenuList() 2)${fns:getMenuList()} 5.获取当前用户缓存: 1)UserUtils.getCache(key); 2)${fns:getCache(cacheName, defaultValue)} 6.设置当前用户缓存: 1)UserUtils.putCache(key); 1.3.全局缓存CacheUtils.java 应用场景:系统字典 1.设置应用程序缓存:CacheUtils.put(key); 2.获取应用程序缓存:CacheUtils.get(key); 1.4.字典工具DictUtils.java 应用场景:系统全局固定的字典数据,java或jsp中获取字典相关数据。
Mini INS/GPS 如何使用Jink 调试 Mini INS/GPS 本文档主要解决以下问题: 1. Mini INS/GPS的SWD仿真接口的定义 2. Jlink 仿真器如何连接SWD仿真接口 3. 如何使用Jflash 下载目标HEX格式文件 4. 如何使用J link 仿真和调试程序
为了方便用户调试姿态解算程序,Mini INS /GPS 提供了SWD 调试接口。它只需要4个引脚就可以仿真和调试STM32F 的程序。 1. SWDIO 数据通信引脚 2. SWDCLK 时钟引脚 3. GND 公共地,需要与仿真器的地连接在一起 4. VCC 3.3V 电源,有的仿真器用于检测目标芯片是否已上电。 以下是SWD 仿真接口在Mini INS/GPS 板子上的位置和引脚定义 Mini INS /GPS 的SWD 调试接口 双色状态指示 LED SWD 调试接口
Jlink 仿真器的接口 SWD 接口Jlink 仿真器 J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。配合IAR EWAR,ADS,KEIL,WINARM,RealView等集成开发环境支持所有ARM7/ARM9/ARM11内核芯片的仿真,通过RDI接口和各集成开发环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好最实用的开发工具。Jlink 是分版本的,只有Jlink V6 或者更高版本的Jlink 才支持SWD 接口目前市面上的大都是Jlink V8版本,这是完美支持SWD 调试的 注意: SWD 数据 SWD 时钟 目标板电压 目标板GND 只需连接其中一个就可
ibatis使用总结 SqlMap的配置是iBatis中应用的核心。这部分任务占据了iBatis开发的70的工作量。 1、命名空间:
1.介绍 Abator 是一款iBATIS代码生成工具。它从数据库获取信息,然后产生如下文件。 1)数据库表的SqlMap.xml file 文件,如UserSQL.xml; 2)数据库表的Java Bean Model,如User.java; 3)包含一个综合主键的数据库表的主键model,如UserKey.java; 4)包含DAO层selectByExample方法的example文件, UserExample.java; 5)提供插入、更新、查询、删除方法的DAO接口UserDAO.java; 6)DAO接口的实现类UserDAOImpl.java。 2.安装Abator到MyEclipse(Eclipse)中 1)点击MyEclipse(Eclipse)工具栏中的Help-->software update -->find and install --> search for new features to install --> new remote site。 2)在name处填写abator ,在url处填写https://www.doczj.com/doc/742220750.html,/tools/abator。 3)点击OK,然后点击finish,系统开始安装Abator到MyEclipse(Eclipse)中。 4)Abator插件安装成功后会在file -->new 菜单中看到Abator for iBATIS Configuration File。 3.使用Abator生成程序文件 1)在MyEclipse(Eclipse)中,点击File --> new 选择Abator for iBATIS Configuration File,创建 一个名叫做abatorConfig.xml的配置文件。 2)修改配置文件。下面给出一个示例。
ibatis学习笔记(一)>>>>>>>sqlMapConfig.xml文件详解 1.sqlMapConfig.xml配置文件详解: Xml代码 1. 2. 5.
KEIL4环境,使用Jlink仿真器调试M3说明 1.安装keil4 首先要安装集成开发环境KEIL4MDK,这是ARM公司最新的调试软件,我们提供的工程例程都在KEIL4MDK开发环境下,调试通过! 2.安装jlink驱动, 驱动位于光盘的工具软件文件夹里,目前稳定的版本是JLinkARM_V408i。用户只需一步步安装即可,安装过程中不需要任何设置!安装完成后出现下图的可用快捷方式! 下边接收几个很有用的: 1.)J-Flash ARM:这是一个单独的程序烧写软件,J-Flash ARM配合Jlink仿真器可以完成绝大多数ARM芯片或扩展FLASH的烧录工作! 2.)J-Link GDB Server:打开这个软件,同时连接上开发板,就可一看到目标板MCU 内核和目标板电压! 3.)J-Link Commander:打开这个软件之前电脑要先连接jlink,可以看到jlink的硬件版本和序列号! 3.Keil4仿真调试配置 打开你要调试的工程(就是实验例程,请注意每个工程都可单独配置,KEIL4MDK工程一般是工程名+.uvproj的方式存在的),工程打开后,出现下边的界面:
我们提供了两种调试模式:内部flash调试和内部SRAM调试!我们首先要选择调试模式,是在内部flash调试还是内部SRAM调试。用户可以在下图的位置选择调试模式: 每颗芯片的RAM相对FLASH来说,都较小,所以如果程序量超过RAM的范围,请选择flash调试模式! 选择完调试模式后,接着配置该调试模式下的参数!点击下图所示图标 或者点击Flash--Configure Flash Tools......,如下图所示 点击后,会打开下图所示的配置窗口
测试许多款sql注入工具最终还是发现sqlmap最为强悍谁用谁知道! 赶紧抛弃掉手上一大堆sql注入工具吧:) 测试环境:ubuntu10.10&windows7(x64)sqlmap/1.0-dev(r4405)Python2.7.2 *高版本python可能导致sqlmap报错! *如使用过程中出错请使用下面最近更新的稳定版本: https://www.doczj.com/doc/742220750.html,/c0adthmqf1 更新升级: sqlmap-update svn checkout https://https://www.doczj.com/doc/742220750.html,/sqlmap/trunk/sqlmap sqlmap-dev 帮助: sqlmap-h 官方最新文档:https://www.doczj.com/doc/742220750.html,/doc/README.html ******************基本步骤*************** sqlmap-u"http://url/news?id=1"--current-user#获取当前用户名称 sqlmap-u"https://www.doczj.com/doc/742220750.html,/news?id=1"--current-db#获取当前数据库名称 sqlmap-u"https://www.doczj.com/doc/742220750.html,/news?id=1"--tables-D"db_name"#列表名 sqlmap-u"http://url/news?id=1"--columns-T"tablename"users-D"db_name"-v0#列字段sqlmap-u"http://url/news?id=1"--dump-C"column_name"-T"table_name"-D "db_name"-v0#获取字段内容 ******************信息获取****************** sqlmap-u"http://url/news?id=1"--smart--level3--users#smart智能level执行测试等级
广西移动电子商城 任亮
1.项目背景介绍 随着中国通信行业竞争程度的加剧,竞争的形态也发生了巨大的变化,从以产品、价格为主的竞争转向以服务为主的竞争,服务成为主导竞争格局的重要因素。渠道作为企业完成客户沟通、产品/服务交换过程以及实现价值、产生效益的重要载体,发挥了采集、传达客户和竞争对手等市场信息,为买卖双方提供便利,协调供需矛盾,为客户提供合适的产品与服务,向客户传递产品/服务信息,实现营销/服务目标等重要的功能。 广西移动上线移动商城,一方面可以带动传统业务绩效提升,增强客户满意度和粘性,另一方面,也为基于互联网的商务模式创新奠定基础。 针对上述行业环境变化和业务战略目标,广西移动在网上终端预约销售基础上,即将启动网上商城建设项目,用于建立网上终端、营销案在线销售及相关辅助功能,包含商品管理、订单管理、类目管理、客户管理、合作商管理、客服管理、购物平台、内容管理等,很大程度上分担了人工的压力,对提高客户服务效率和客户满意度能够起到较好的作用。 基于此,广西移动提出建设网上商城建设项目工程。 1.1系统边界 网上商城系统边界的如下图: ●网上商城作为电子渠道触点系统,负责面向互联网客户(包括个人客户和合作企业客户) 提供电子商务类营销、销售及服务支持。网上商城的业务实现需要通过统一管理平台获得包括客户管理、产品管理、渠道协同、结算、合作伙伴管理等功能支持。 ●统一管理平台面向前端各电子渠道触点系统,提供运营集成、运营监控、流程管理等功 能,并有效地将后端CRM、BOSS、ERP、等系统对接,同时与其他业务系统10086、第三
方物流对接,以服务总线的形式给网上商城使用。 1.2 功能架构 系统的功能架构如下图: 功能划分上主要分为系统前台、系统后台和内容维护三个部分。 主要功能
J-Link用户指南 编写:徐世龙(网名:清风徐徐) 版本:Rev1.1 https://www.doczj.com/doc/742220750.html, 2009-06-07
目录 一、J-Link ARM JTAG仿真器简介 二、J-LINK驱动安装 三、J-LINK接线图 四、J-LINK(JLINK)在Keil c开发环境下的设置(针对stm32) 五、F.A.Q(占位)
版本更新说明 Rev1.1: 更改了核心板用jlink仿真时的跳线方式,并更新了图片;【FLASH DOWNLOAD SETUP】设置窗口的勾选项做了更改修正;2009-06-7完成 Rev1.0: 增加J-LINK接线图,2009-05-29完成 Rev0.9: 原始版本,2009-05-16完成
一、J-Link ARM JTAG仿真器简介 J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。配合IAREWARM,ADS,KEIL,WINARM,RealView等集成开发环境支持所有ARM7/ARM9内核芯片的仿真,通过RDI接口和各集成开发环境无缝连接,操作方便、连接方便、简单易学,是学习ARM最好最实用的开发工具。 J-Link ARM主要特点 *IAR EWARM集成开发环境无缝连接的JTAG仿真器 *支持所有ARM7/ARM9内核的芯片,以及cortex M3,包括Thumb模式*支持ADS,IAR,KEIL,WINARM,REALVIEW等几乎所有的开发环境 *下载速度高达ARM7:600kB/s,ARM9:550kB/s,通过DCC最高可达800 kB/s *最高JTAG速度12MHz*目标板电压范围1.2V–3.3V *自动速度识别功能*监测所有JTAG信号和目标板电压 *完全即插即用 *使用USB电源(但不对目标板供电) *带USB连接线和20芯扁平电缆 *支持多JTAG器件串行连接 *标准20芯JTAG仿真插头 *选配14芯JTAG仿真插头 *选配用于5V目标板的适配器 *带J-Link TCP/IP server,允许通过TCP/IP网络使用J-Link J-Link支持ARM内核 *ARM7TDMI(Rev1) *ARM7TDMI(Re3) *ARM7TDMI-S(Rev4) *ARM720T*ARM920T *ARM926EJ-S *ARM946E-S *ARM966E-S *cortex M3
1.Mybatis入门 从一个jdbc程序开始 public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { //加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //通过驱动管理类获取数据库链接 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?charac terEncoding=utf-8", "root", "mysql"); //定义sql语句 ?表示占位符 String sql = "select * from user where username = ?"; //获取预处理statement preparedStatement = connection.prepareStatement(sql); //设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值 preparedStatement.setString(1, "王五"); //向数据库发出sql执行查询,查询出结果集 resultSet = preparedStatement.executeQuery(); //遍历查询结果集 while(resultSet.next()){ System.out.println(resultSet.getString("id")+" "+resultSet.getString("username")); } } catch (Exception e) { e.printStackTrace(); }finally{ //释放资源 if(resultSet!=null){ try { resultSet.close(); } catch (SQLException e) {
jlink使用方法笔记 这段时间在用jlink调试freescale的mx51板子,下面将使用jlink的方法在此做一个笔记。jlink是segger公司的产品,由于正版的工具巨贵,所以现在大部分人都喜欢用山寨版的jlink,幸运的是我的山寨版jlink支持arm cortex a8,所以能调试mx51板子。 jlink的官方提供调试软件和驱动,调试软件有jlink commander(j-tag调试)、j-mem(内存查看)、j-flash(flash烧写)等。我主要用到的是jlink commander,以下是它的命令集: SEGGER J-Link Commander V4.20h ('?' for help) Compiled Oct 5 2010 19:11:57 DLL version V4.20h, compiled Oct 5 2010 19:11:41 Firmware: J-Link ARM V8 compiled Oct 5 2010 08:59:59 Hardware: V8.00 S/N: 20100214 Feature(s): RDI,FlashDL,FlashBP,JFlash,GDBFull VTarget = 3.280V Info: TotalIRLen= ?, IRPrint = 0x..FFFFFFFFFFFFFFFFFFFFFFF1 WARNING: CPU core not found. No devices found on JTAG chain. Trying to find device on SWD. WARNING: CPU core not found. ****** Error: Parity error (Data = 0xFFFFFFFF, ReceivedParity = 1) No device found on SWD. Did not find any core. Info: TotalIRLen = 9, IRPrint = 0x0011 Found 2 JTAG devices, Total IRLen = 5: #0 Id: 0x2B900F0F, IRLen: 04, IRPrint: 0x0, ARM ETB #1 Id: 0x07B76F0F, IRLen: 05, IRPrint: 0x1, ARM1176 Core ARM11 identified. J-Link> Available commands are: ---------------------- f Firmware info h halt g go Sleep Waits the given time (in milliseconds). Syntax: Sleep
sqlmap也是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工具,只是一个便捷性问题,sql注入另一方面就是手工党了,这个就另当别论了。 今天把我一直以来整理的sqlmap笔记发布上来供大家参考。 sqlmap简介 sqlmap支持五种不同的注入模式: ?1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。 ?2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。 ?3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。 ?4、联合查询注入,可以使用union的情况下的注入。 ?5、堆查询注入,可以同时执行多条语句的执行时的注入。 sqlmap支持的数据库有 MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB 检测注入 基本格式 sqlmap -u “https://www.doczj.com/doc/742220750.html,/post.php?id=1″ 默认使用level1检测全部数据库类型 sqlmap -u “https://www.doczj.com/doc/742220750.html,/post.php?id=1″ –dbms mysql –level 3 指定数据库类型为mysql,级别为3(共5级,级别越高,检测越全面) 跟随302跳转 当注入页面错误的时候,自动跳转到另一个页面的时候需要跟随302, 当注入错误的时候,先报错再跳转的时候,不需要跟随302。 目的就是:要追踪到错误信息。 cookie注入 当程序有防get注入的时候,可以使用cookie注入 sqlmap -u “https://www.doczj.com/doc/742220750.html,/shownews.asp” –cookie “id=11″ –level 2(只有level达到2才会检测cookie) 从post数据包中注入 可以使用burpsuite或者temperdata等工具来抓取post包 sqlmap -r “c:\tools\request.txt” -p “username” –dbms mysql 指定username参数 注入成功后 获取数据库基本信息 sqlmap -u “https://www.doczj.com/doc/742220750.html,/post.php?id=1″ –dbms mysql –level 3 –dbs 查询有哪些数据库 sqlmap -u “https://www.doczj.com/doc/742220750.html,/post.php?id=1″ –dbms mysql –level 3 -D test –tables 查询test数据库中有哪些表 sqlmap -u “https://www.doczj.com/doc/742220750.html,/post.php?id=1″ –dbms mysql –level 3 -D test -T admin –columns 查询test数据库中admin表有哪些字段