IGKBoard(imx6ull)-I2C接口编程之SHT20温湿度采样
文章目录
- 1- 使能开发板I2C通信接口
- 2- SHT20硬件连接
- 3- 编码实现SHT20温湿度采样思路
- (1)查看sht20从设备地址(i2cdetect)
- (2)获取数据大体流程
- 【1】软复位
- 【2】触发测量与通讯时序
- (3)返回数据处理
- 4- SHT20温湿度采样编程源码
- 5- 代码难点巩固
- (1)ioctl函数讲解
- (2)移位、与或处理数据
I2C 总线是一种同步、半双工、采用电平信号收发的串行总线。
关于I2C不了解的可以参考写的这篇文章:I2C协议介绍以及HAL库实现I2C对SHT30温湿度采样
1- 使能开发板I2C通信接口
在我的开发板上有两路I2C外设:
I2C2 ---> 触摸屏控制器,rtc时钟,摄像头控制器
I2C1 ---> 40pin扩展口使用,由DToverlay进行开启
GPIO01_IO03 ---> I2C1_SDA
GPIO01_IO03 ---> I2C1_SCL
想要使能40pin扩展口的I2C1的话,需要修改开发板上的DTOverlay配置文件,添加该管脚对I2C的支持,具体修改具体方法为修改 eMMC 启动介质的 boot 分区下的 config.txt 文件,将dtoverlay_i2c1的选项修改为yes:
root@igkboard:~# vi /run/media/mmcblk1p1/config.txt
# Enable I2C overlay
dtoverlay_i2c1=yes
修改完成后重启系统,系统启动时将会自动加载 I2C 协议驱动。查看/dev下是否存在I2C设备节点,或查看/sys/bus/i2c/devices中设备文件,已验证I2C驱动是否加载。
oot@igkboard:~# ls -l /dev/i2c-*
crw------- 1 root root 89, 0 Mar 1 10:24 /dev/i2c-0
crw------- 1 root root 89, 1 Mar 1 10:24 /dev/i2c-1
root@igkboard:~# ls /sys/bus/i2c/devices/
1-006f i2c-0 i2c-1
由于驱动是从0开始编写的,故实际的I2C1对应的设备节点是i2c-0。
2- SHT20硬件连接
- VCC:3.3V
- GND:GND
- SCL:I2C1_SCL
- SDA:I2C1_SDA
参考图:
实物连接图:
3- 编码实现SHT20温湿度采样思路
(1)查看sht20从设备地址(i2cdetect)
总线上挂载I2C从设备,可通过i2cdetect扫描某个I2C总线上的所有设备。可通过控制台输入i2cdetect -y 1或0(确定哪一条总线) 来查看所有设备。
root@igkboard:~# i2cdetect -y 00 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
显示的是以十六进制表示的设备地址的编号,40(16进制)即1000000(2进制)。
(2)获取数据大体流程
【1】软复位
此命令用于重新启动传感器系统,而无需重新上电。一旦接收到该命令,传感器系统将重新初始化并根据默认设置开始操作。软复位时间小于15ms。
【2】触发测量与通讯时序
下面右图:我们常用红色框选中的命令,使用非保持主机模式(no hold master)的命令,可以使sht20在测量时候,释放i2c总线,使得主机可以处理其他从设备的通信任务。
下面左图:我们可以看见sht20的通讯时序(时序的开始以及停止以及发送数据等的内容可以参考开头的文章。)。
- Start开始,从地址+0通知sht30我们将要写入,收到ACK相响应成功;
- 对sht20写入非保持主机模式(no hold master)的命令(即右图的11110101),收到ACK响应成功等待,Stop;
- 然后发送地址+1读数据信号,返回ACK响应即可;
- 后面就可以读取我们需要的数据了。
(3)返回数据处理
测量的数据,温度和湿度均为两个字节。而且无论哪一种传输模式,测量的最大分辨率最大14bit,数据的第二个字节SDA上最后两位是用来标记相关状态信息。其中bit1表示测量类型(0是温度,1是湿度)
SDA的输出数据被转换成两个字节的数据包,高字节MSB在前(左对齐)。每个字节后面都跟随一个应答位。两个状态位,即 LSB的后两位在进行物理计算前须置0。
我们上面时序的例子返回了两个字节数据:
高字节数据:0110 0011
低字节数据:0101 0010(bit1是1,说明返回的是湿度的测量数据)
我们需要将我们收到的数据用提供的计算方法计算出相对应的湿度值。
除去最后的2bit(就是将最后的2bit换为00),也就是0110 0011 0101 0000(2进制) = 25424(10进制),然后代入公式得到数据:
RH = -6 + 125*(25424 / 65536) = 42.4924 #单位为%
4- SHT20温湿度采样编程源码
源码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>
#include <errno.h>
#include <linux/i2c-dev.h>#define SOFTRESET 0xFE;//16进制软复位1111 11110
#define TRIGGER_T_NO_HOLD 0xF3;//16进制温度触发测量1111 0011
#define TRIGGER_RH_NO_HOLD 0xF5;//16进制湿度触发测量1111 0101void mssleep(unsigned long ms);//毫秒级函数实现(nanosleep)
int sht20_init(char *i2c_dev);//初始化从设备函数
int sht20_softreset(int fd);//sht20命令复位函数
int sht20_get_t_rh(int fd, float *temperature, float *humidity);//buf处理函数int main(int argc, char *argv[])
{int fd;float temperature;float humidity;if(argc != 2){printf("This project is to obtain the temperature and humidity of sht20.\n");printf("Please input %s /dev/i2c-x\n", argv[0]);return 0;}fd = sht20_init(argv[1]);if(fd < 0){printf("SHT20 init failure\n");return 1;}//printf("sht20_init success\n");while(1){if(sht20_get_t_rh(fd, &temperature, &humidity) < 0){printf("SHT20 get temperature and humidity failure\n");return 2;}//printf("sht20_get_t_rh success\n");printf("Temperature:%lf'C Humidity:%lf%% \n", temperature, humidity);sleep(1);}close(fd);return 0;
}/*对buf里面的数据进行处理打印*/
static inline void manage_buf(uint8_t *buf, int size )
{int i;for(i = 0; i < size; i++){printf("%02x ", buf[i]);//以16进制输出,不足2位左边补0}printf("\n");
}/*获取sht20温湿度值*/
int sht20_get_t_rh(int fd, float *temperature, float *humidity)
{uint8_t buf[4];//一个字节8个位,比如buf[0]刚好读取一个字节,好操作int rv = 0;if(fd < 0 || !temperature || !humidity){printf("%s get invalid input arguments\n", __FUNCTION__);return -1;}/*获取温度*/memset(buf, 0, sizeof(buf));buf[0] = TRIGGER_T_NO_HOLD;//16进制温度触发测量1111 0011if(rv = write(fd, buf, 1) < 0){printf("Write TRIGGER_T_NO_HOLD error:%s\n", strerror(errno));return -2;}mssleep(85);//等待需要的时间memset(buf, 0, sizeof(buf));//读取数值放在buf中,需要将buf清0/*读取三个字节数据,后面的一个字节数据是CRC校验值*/if(rv = read(fd, buf, 3) < 0){printf("Read temperature error:%s\n", strerror(errno));return -3;}manage_buf(buf, 3);//buf处理函数/*需要将读取到的buf[0]和buf[1]合并,buf[0]左移8bit,然后加上后面的buf[1],即可但是最后2bit是都需要变成0u,于是与1111 1100(0xfc)与(&),就可以将最后2bit变成0了1010 1111&1111 1100-----------1010 1100*/*temperature = 175.72 * (((((int)buf[0]) << 8) + (buf[1] & 0xfc)) / 65536.0) - 46.85;//temperature计算(℃ )/*获取湿度*/memset(buf, 0, sizeof(buf));buf[0] = TRIGGER_RH_NO_HOLD;//16进制湿度触发测量1111 0101if(rv = write(fd, buf, 1) < 0){printf("Write TRIGGER_RH_NO_HOLD error:%s\n", strerror(errno));return -4;}mssleep(29);//等待需要的时间memset(buf, 0, sizeof(buf));//读取数值放在buf中,需要将buf清0if(rv = read(fd, buf, 3) < 0){printf("Read humidity error:%s\n", strerror(errno));return -5;}//读取三个字节数据,后面的一个字节数据是CRC校验值manage_buf(buf, 3);//buf处理函数*humidity = 125 * (((((int)buf[0]) << 8) + (buf[1] & 0xfc)) / 65536.0) - 6;//湿度处理函数return 0;
}/*初始化sht20,从设备地址,位数以及软复位*/
int sht20_init(char *i2c_dev)
{int fd;if((fd = open(i2c_dev, O_RDWR)) < 0){printf("Open %s error: %s\n", i2c_dev, strerror(errno));return -1;}ioctl(fd, I2C_TENBIT, 0);//选择地址长度0为7位地址,非0为10位ioctl(fd, I2C_SLAVE, 0x40);//设置从设备的地址if(sht20_softreset(fd) < 0){printf("SHT20 softreset failure\n");return -2;}return fd;
}/*软复位*/
int sht20_softreset(int fd)
{uint8_t buf[4];if(fd < 0){printf("%s get invalid input arguments\n", __FUNCTION__);//无效的参数return -1;}memset(buf, 0, sizeof(buf));buf[0] = SOFTRESET;//0xfe二进制1111 1110write(fd, buf, 1);//写入数据执行软复位mssleep(50);return 0;
}/*毫秒级别函数实现*/
void mssleep(unsigned long ms)
{struct timespec ts = {.tv_sec = (long int) (ms / 1000),.tv_nsec = (long int) (ms % 1000) * 1000000ul};nanosleep(&ts, 0);
}
Makefile:
CC=arm-linux-gnueabihf-gcc
APP_NAME=sht20all:clean@${CC} ${APP_NAME}.c -o ${APP_NAME}clean:@rm -f ${APP_NAME}
tftp搭建有问题的可以参考这篇文章:wpa_supplicant无线网络配置imx6ull以及搭建tftp服务器
tftp服务器下载到开发板运行:
root@igkboard:~# tftp -gr sht20 192.168.0.172
root@igkboard:~# chmod a+x sht20
root@igkboard:~# ./sht20 /dev/i2c-0
67 7c 7e
67 6e 5f
Temperature:24.182322'C Humidity:44.498962%
67 80 81
67 6e 5f
Temperature:24.193047'C Humidity:44.498962%
67 84 45
67 6e 5f
Temperature:24.203772'C Humidity:44.498962%
67 88 38
67 7e 1c
Temperature:24.214497'C Humidity:44.529480%
68 ec de
68 4e 40
Temperature:25.169031'C Humidity:44.926208%
69 34 97
7e 5e 37
Temperature:25.362083'C Humidity:55.698914%
6b 18 b5
95 aa 1d
Temperature:26.659819'C Humidity:67.074341%
6b 68 4d
a6 12 84
Temperature:26.874321'C Humidity:75.085205%
6e 14 bf
b2 76 16
Temperature:28.708313'C Humidity:81.135315%
6c ac 60
bb 06 2d
Temperature:27.743053'C Humidity:85.316223%
6b a0 b3
c0 a6 f0
Temperature:27.024473'C Humidity:88.062805%
对着传感器哈气,就会看见温湿度的变化。
毫秒级别函数实现可以参考这篇文章:C语言中usleep与nanosleep函数讲解以及毫秒级休眠实现
5- 代码难点巩固
(1)ioctl函数讲解
#include <sys/ioctl.h>
int ioctl(int fd, unsigned long request, ...);
在代码中我们使用ioctl函数给初始化sht20的从地址,以及设置选择地址的长度为7位地址。
request参数我们用到了:
- I2C_SLAVE :设置从机地址
- I2C_TENBIT :选择地址长度0为7位地址,非0为10位
- I2C_RETRIES :设置收不到ACK时的重试次数,默认为1(没有用到,但是可以了解)
参数使用就需要调用#include <linux/i2c-dev.h>
头文件了
从时序中我们可以看见如果需要读和写的话需要发送1个字节数据然后等待从设备响应返回ACK,但是如果使用ioctl系统调用初始化好i2c设备后,设置从设备地址后,便可以使用write和read系统调用进行数据的写入和读取,方便很多。
(2)移位、与或处理数据
下面程序帮助理解,都有注释,实际应用中用多了也就比较熟练了。
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>int main(int argc, char *argv[])
{uint8_t buf[4];buf[0] = 0xFF;//0xFF(十六进制),1111 1111(二进制),255(十进制)buf[1] = 0xFC;//0xFC(十六进制),1111 1100(二进制),252(十进制)buf[2] = 0xAA;//0xAA(十六进制),1010 1010(二进制),170(十进制)buf[3] = 0x0B;//0x0B(十六进制),0000 0011(二进制),11 (十进制)/*其实只需要知道:0&x = 0, 1&x = x ;0|x = x,1|x = 1 ; */printf("我想要将1111 1111 右移8bit:\n");printf("1111 1111 << 8 : %d (1111 1111 0000 0000)\n\n", buf[0] << 8); printf("我想让1010 1010 的最后2bit都变成00:\n");printf("1010 1010 & 1111 1100 : %d (1010 1000)\n\n", buf[2] & buf[1]);printf("我想让1010 1010 的最后2bit都变成11:\n");printf("1010 1010 | 0000 0011 : %d (1010 1011)\n", buf[2] | buf[3]);return 0;
}
wangdengtao@wangdengtao-virtual-machine:~/wangdengtao/tftpboot$ gcc shift_and_circuit.c
wangdengtao@wangdengtao-virtual-machine:~/wangdengtao/tftpboot$ ./a.out
我想要将1111 1111 右移8bit:
1111 1111 << 8 : 65280 (1111 1111 0000 0000)我想让1010 1010 的最后2bit都变成00:
1010 1010 & 1111 1100 : 168 (1010 1000)我想让1010 1010 的最后2bit都变成11:
1010 1010 | 0000 0011 : 171 (1010 1011)
相关文章:
IGKBoard(imx6ull)-I2C接口编程之SHT20温湿度采样
文章目录1- 使能开发板I2C通信接口2- SHT20硬件连接3- 编码实现SHT20温湿度采样思路(1)查看sht20从设备地址(i2cdetect)(2)获取数据大体流程【1】软复位【2】触发测量与通讯时序(3)返…...
MyBatis——配置文件完成增删改查
1.首先先创建一个新的表,使用下面的sql语句 -- 删除tb_brand表 drop table if exists tb_brand; -- 创建tb_brand表 create table tb_brand (-- id 主键id int primary key auto_increment,-- 品牌名称brand_name varchar(20),-- 企业名称company_name varchar(20…...
Python内置函数 — all,any
1、all 源码注释: def all(*args, **kwargs): # real signature unknown"""Return True if bool(x) is True for all values x in the iterable.If the iterable is empty, return True."""pass 语法格式: all(iterable)…...
Pycharm配置QGIS环境
版本信息:QGIS: 3.22.16Pycharm:2022.3.2 (Community Edition)在QGIS官网下载安装包,下载稳定版本即可。配置步骤:安装完成后,使用Pycharm新建工程Python编译器选择之前配置好的编译器环境选择左侧第一个Vi…...
【C++】stack 与 queue
stack 与 queuestackSTL 容器中 stack 的使用模拟实现 stackqueueSTL 容器中 queue 的使用模拟实现 queuestack 在数据结构中,我们了解到,stack 栈结构,是一种先进后出的结构,并且我们是使用顺序表来进行实现栈的操作的。 STL 容…...
ARC142E Pairing Wizards
ARC142E Pairing Wizards 题目大意 有nnn个法师,编号为111到nnn。法师iii有强度aia_iai,他计划打败强壮度为bib_ibi的怪物。 你可以执行以下操作任意次: 选中一个法师,将它的强壮度增加1 一对法师(i,j)(i,j)(i,j)称为好的…...
Spark开发实战-主播打赏排行榜统计
(一)需求分析 计算每个大区当天金币收入排名前N的主播 背景: 我们有一款直播APP,已经在很多国家上线并运营了一段时间,产品经理希望开发一个功能,计算前N主播排行榜,按天更新排名信息…...
python 如何存储数据 (python 的文件和异常)
文章目录存储数据1. 使用 json.dump() 和 json.load()json.dump()2. 保存和读取用户生成的数据存储数据 很多程序都要求用户输入某种信息,如让用户存储游戏首选项或提供要可视化的数据。不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结…...
第三章-OpenCV基础-8-绘图函数
前置内容 这篇内容不是本书内容,但后续用的到,特做记录。 使用OpenCV中不可避免需要用到各种绘图功能,比如绘制人脸库、显示人脸识别信息,那就需要用到OpenCV的绘图函数,这些函数包括cv2.line(), cv2.circle(),cv2.rectangle()…...
逆约瑟夫问题
约瑟夫问题可以说十分经典,其没有公式解也是广为人知的~ 目录 前言 一、约瑟夫问题与逆约瑟夫问题 1.约瑟夫问题 2.逆约瑟夫问题 二、思考与尝试(显然有很多失败) 问题分析 尝试一:递归/递推的尝试 尝试二:条件…...
MySQL之三大日志(更新中)
MySQL之三大日志(更新中) MySQL日志记录着数据库运行过程中的各种信息,包括:错误日志、普通查询日志、慢查询日志、二进制日志、中继日志、事务日志等。 综合上一篇《MySQL之"幻读"问题》涉及到事务,本文主…...
如何使用EvilTree在文件中搜索正则或关键字匹配的内容
关于EvilTree EvilTree是一款功能强大的文件内容搜索工具,该工具基于经典的“tree”命令实现其功能,本质上来说它就是“tree”命令的一个独立Python 3重制版。但EvilTree还增加了在文件中搜索用户提供的关键字或正则表达式的额外功能,而且还…...
北京移动CM311-5s-ZG_GK6323V100C_2+8_免拆一键卡刷固件包
北京移动CM311-5s-ZG_GK6323V100C_28_免拆一键卡刷固件包 特点: 1、适用于对应型号的电视盒子刷机; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、修改dns,三网通用; 4、大量精简内置的没用的软件,…...
JavaScript(1)
JavaScript简介 JavaScript是一门跨平台、面向对象的脚本语言,用来控制网页行为的,它能使网页可以交互。 JavaScript引入方式 1、内部脚本 将js代码定义在HTML页面中,在HTML中,JavaScript代码必须位于<script>与</scrip…...
阿里云云原生每月动态 | 聚焦实战,面向开发者的系列课程全新上线
作者:云原生内容小组 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供数字化的路径与指南。 本栏目每月更新。 趋势热点 《云原生实战指南》白皮书发布 …...
Goby 征文大擂台,超值盲盒等你来!
001 Goby 技术征文正式启动 Goby 致力于做最好的网络安全工具。为了促进师傅们知识共享和技术交流,现发起关于 Goby 的技术文章征集活动! 欢迎所有师傅们参加,分享您的使用经验或挖洞窍门等,帮助其他人更好地了解和利用 Goby。 …...
NLP - langid 语种识别
文章目录一、关于 langid二、基本使用Normalization多个语言中选择一个三、训练模型1、需要2、工具是3、过程4、代码调用自定义模型一、关于 langid https://github.com/saffsd/langid.py 用于检测语言 二、基本使用 import langidlangid.classify("This is a test"…...
liquibase学习和使用
文章目录liquibase学习介绍数据库更新日志和数据库更新日志锁定相关概念changelogchangeset的属性preconditionsql样例Contextssql样例Labelsql样例文件格式sql样例其他格式用的时候在补充跟踪表DATABASECHANGELOGLOCK (数据库更改日志锁定表)DATABASECH…...
redhawk:Low Power Analysis
1.rush current与switch cell 在standby状态下为了控制leakage power我们选择power gating的设计方式,使用power switch cell关闭block/power domain的电源。 power switch的基本介绍可见: 低功耗设计-Power Switch power switch的table中有四种状态,…...
24- 深度学习的模型保存和加载 (TensorFlow系列) (深度学习)
知识要点 keras 保存成hdf5文件, 1.保存模型和参数, 2.只保存参数 1.保存模型和参数 save_modelcallback ModelCheckpoint2. 只保存参数 save_weightscallback ModelCheckpoint save_weights_only True 保存模型: 案例数据: Fashion-MNIST总共有十个类别的图像model.save_w…...
【Echarts图例点击事件】自定义Echarts图例legend点击事件(已解决)
目录先睹为快(效果)1、实现Echarts多条曲线2、点击echarts触发接口请求2.1 先默认隐藏部分数据2.2 自定义legend图例点击事件3、源码下载地址(解压即用)**【写在前面】**这下我又不得不说了,还是客户现场使用时想查询一…...
uniapp-首页配置
为了获取到后台服务器发来的数据,需要配置相应的网络地址。位置在main.js入口文件中。 import { $http } from escook/request-miniprogramuni.$http $http // 配置请求根路径 $http.baseUrl https://api-hmugo-web.itheima.net// 请求开始之前做一些事情 $http.…...
支持DDR5,超频更简单,小雕够给力,技嘉B760M小雕WIFI主板上手
目前13代酷睿已经全员集结了,其中全新的i5 13490F应该依然会备受欢迎,当然了,刚上市不久的13代酷睿价格方面还不是很有吸引力,好在12代酷睿在新一代主板上面依然可用,所以预算有限的朋友,完全可用继续使用1…...
fengMap 自定义dom 偏离实际位置;缩放时飘出地图所在区域
目录 一、问题 二、原因及解决方法 三、总结 一、问题 1.前人写了一份代码,很奇怪。使用 new fengmap.FMCompositeMarker添加的复合覆盖物位置是正常的,缩放的时候也是正常的,仍然处于地图内部;但是new fengmap.FMDomMarker添加…...
TryHackMe-黑我杯
黑我杯 相信我们大家在TryHackMe的日积月累都学到了不少东西,从纯萌新到oscp再到更高 我很高兴能将国内各thm玩家聚集到一起,构建一个更好的学习环境和氛围 本次娱乐分两场: Offensive Pentesting — 中等难度Junior Penetration — 容易难…...
【JAVA程序设计】【C00109】基于SSM(非maven)的员工工资管理系统
基于SSM(非maven)的员工工资管理系统项目简介项目获取开发环境项目技术运行截图项目简介 基于ssm框架非maven开发的企业工资管理系统共分为二个角色:系统管理员、员工 管理员角色包含以下功能: 系统后台登陆、管理员管理、员工信…...
《计算机原理》——HelloWorld.cpp如何运行的
学校《计算机原理》开课啦!特此开辟专栏,将一些知识作为笔记,记录下来。 前言 本篇博客知识点来源于educoder的相关题目 1. 相关知识 1.1 计算机语言 计算机语言是人与计算机之间通讯的语言,计算机语言包括编写计算机程序的字符…...
【面试题】在JS循环中使用await会怎么样?
前言这个问题是这样产生的?某天,在学习异步的知识遇到这样一道题:使用Promise的方式,每隔一秒输出数组中一个值const arr [1, 2, 3] arr.reduce((pre, cur) > {return pre.then(() > {returnnewPromise((resolve, rejec…...
Qt QMessageBox详解
文章目录一.QMessageBox介绍枚举属性函数二.QMessageBox的用法1.导入QMessage库2.弹窗提示3.提供选项的弹窗提示4.作为提示,报警,报错提示窗口一.QMessageBox介绍 文本消息显示框(message box)向用户发出情况警报信息并进一步解释警报或向用户提问&…...
Flutter之beamer路由入门指南
beamer路由入门指南 前言使用方法1、路由配置方式1路由配置方式2路由跳转测试现象前言 Beamer是一个很好用的路由组件,本文以beamer1.5.0版本进行说明,前面博主也介绍了其他路由组件 Flutter实战之go_router路由组件入门指南 、 Flutter之Fluro路由组件入门指南 Flutter之Ge…...
网站域名备案查询/百度一下你就知道了 官网
题目描述 Description 小Q获得了一个神奇的印章,这个印章宽n个单位长度,印章的其中三个棱都是直的,而另外一个方向上,对于每个单位宽度的部分,是一样直的,并且与反方向的棱平行,如下图所示。 …...
织梦做英文网站/google play下载安装
Index与Shard,这两个概念在《Elasticsearch最佳实践之核心概念与原理》一文有详细的介绍,分别对应了Elasticsearch的两种数据组织方式:逻辑组织和物理组织。逻辑层面上,Index与业务数据的结构、类型、使用方式等息息相关ÿ…...
wordpress 邮箱免验证/江苏营销型网站建设
索引: C# 3.0\3.5 新特性 C# 4.0 新特性 1、自动属性 以前private string lastName;public string LastName{get { return lastName; }set { lastName value; }} 现在 public string LastName{get;set;} C#编译器遇到上面空的get/set属性时,会自动在类…...
达州城乡建设网站/广告
1、问题:这两天写的APP需要在一个页面中使用echarts图表,发现一个问题:在进入改页面初始化时,图表会缩小。但是把容器宽高设置为px就可以了,但是写的移动端需要适配必须rem。 2、问题根因:div还没有创建出来…...
常州网站建设公司方案/网站推广方式
使用 .NET4 中的Task优化线程池【.NET4 多核并行】 阅读本篇前,读者需对.NET4 System.Threading.Tasks 以及 Task Schedulers 有一定的了解。如果不是很了解,请查阅以下相关信息: Task: http://msdn.microsoft.com/en-us/library/system.thre…...
asp网站制作教程/willfast优化工具下载
来到这边,开始工作后,才发现.有的时候,心态变了.一切都会改变.以前总是把自己会的技术挂在嘴边.而这次,更多的是踏踏实实的做出来.没有什么可骄傲的.一切都没有. 中午在机房里呆了一中午,又一次熟悉了设备及常用命令.在听完郭老师的培训后,才发现,自己是那么的无知.知识的深度及…...