当前位置:文档之家› SHT7X、2X使用笔记

SHT7X、2X使用笔记

SHT7X、2X使用笔记
SHT7X、2X使用笔记

温湿度传感器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的基础知识 课程安排: 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或Jlinkv7单步调试

使用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”文件,操作如下图所示:

sqlmap使用手册

详解强大的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学习笔记

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序列主键 SELECT 序列名.nextval() insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address}) 5. 一个删除用户的代码 主要注意:https://www.doczj.com/doc/742220750.html,mit()提交事务操作。

JLINK使用指南

第二十三章: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清空,一般很少出现)。

笔记2(通路管理)

这个界面可以参考: 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使用说明 单片机进行调试,一般都会分配出来一个调试的串口,如果单片机使用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

jeesite 说明文档-3.内置组件的应用

第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中获取字典相关数据。

Jlink 调试

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使用总结

ibatis使用总结 SqlMap的配置是iBatis中应用的核心。这部分任务占据了iBatis开发的70的工作量。 1、命名空间: ,在此空间外要引用此空间的元素,则需要加上命名空间名。 2、实体的别名: 如果有用到的全名的地方,可以用别名代替,受命名空间约束。 3、插入操作 对于自增主键的表,插入可以不配置插入的主键列。否则是必须的。 4、获取主键 插入语句之前配置:主要是针对Sequence主键而言,插入前必须指定一个主键值给要插入的记录。Oracle、DB2亦如此,方法是在插入语句标签之前配置上: SELECT SEQ_TEST.NEXTVAL FROM DUAL insert into .... ........ 插入语句之后配置:主要是针对自增主键的表而言,这类表在插入时不需要主键,而是在插入过程自动获取一个自增的主键。比如MySQL SELECT LAST_INSERT_ID() insert into .... ........ 当然,是否需要配置根据情况,只要能保证记录有主键即可。一旦配置了,就可以在执行插入操作时获取到新增记录的主键。 6、SQL入参parameterClass 插入语句入参:parameterClass="类别名" 来设定。 查询语句入参:可以设定类别名,也可以设定为map,也可以设定为iBatis支持的原生类型(比如string、int、long等),当只有一个原生类型入参时,使用#value#来引用,这个value 是不是关键字,可变。比如: