精华内容
下载资源
问答
  • 所以读取数值之前,大约要进行15次的数据读取,才能得到正常的数据 测试结果 最后app得到的数据已经稳定 代码 second_drv.c #include<linux/module.h> #include <linux/sched.h> #include <linux/...

    根据上一篇可以在内核里增加自己的驱动

    这次我们让程序跑起来

    app可以从驱动中提取出自己想要的值

    发现传感器在arm上 有明显抖动

    所以读取数值之前,大约要进行15次的数据读取,才能得到正常的数据
    在这里插入图片描述

    测试结果

    在这里插入图片描述
    最后app得到的数据已经稳定

    代码

    second_drv.c

    #include<linux/module.h>
    #include <linux/sched.h>
    #include <linux/delay.h>
    #include <linux/platform_device.h>
    #include <asm/mach-types.h>
    #include <linux/gpio.h>
    #include <asm/gpio.h>
    #include <asm/delay.h>
    #include <linux/clk.h>
    #include <mach/gpio.h>
    #include <mach/soc.h>
    #include <mach/platform.h>
    #include <linux/slab.h>
    #include <linux/input.h>
    #include <linux/errno.h>
    #include <linux/serio.h>
    #include <linux/wait.h>
    #include <linux/cdev.h>
    #include <linux/miscdevice.h>
    #include <linux/uaccess.h>
    #include <asm/io.h>
    #include <asm/irq.h>
    #include <asm/uaccess.h>
    #include <mach/gpio.h>
    #include <linux/gpio.h>
    
    
    
    #define CFG_IO_X6818_Humity (PAD_GPIO_B + 29)
    
    static struct class *seconddrv_class;
    static struct class_device	*seconddrv_class_dev;
    
    
    
    volatile unsigned long *gpbcon;
    volatile unsigned long *gpbdat;
    
    int data_in(void) {
        gpio_direction_input(CFG_IO_X6818_Humity);
        return gpio_get_value(CFG_IO_X6818_Humity);
    }
    
    /*************************************************
    *管教设置为输出
    *************************************************/
    void data_out(int data) {
        gpio_direction_output(CFG_IO_X6818_Humity, data);
    }
    
    
    void DHT11_Rst(void)	   
    {                 
    	data_out(0); 	//SET OUTPUT
    	mdelay(20);//拉低至少18ms
        data_out(1); 	//DQ=1 
    	udelay(30);     	//主机拉高20~40us
    }
    
    u8 DHT11_Check(void) 	   
    {   
    	u8 retry=0;
        while (data_in()&&retry<100)//DHT11会拉低40~80us
    	{
    		retry++;
    		udelay(1);
    	};	 
    	if(retry>=100)return 1;
    	else retry=0;
        while (!data_in()&&retry<100)//DHT11拉低后会再次拉高40~80us
    	{
    		retry++;
    		udelay(1);
    	};
    	if(retry>=100)return 1;	    
    	return 0;
    }
    
    u8 DHT11_Read_Bit(void) 			 
    {
     	u8 retry=0;
    	while(data_in()&&retry<100)//等待变为低电平
    	{
    		retry++;
    		udelay(1);
    	}
    	retry=0;
    	while(!data_in()&&retry<100)//等待变高电平
    	{
    		retry++;
    		udelay(1);
    	}
    	udelay(40);//等待40us
    	if(data_in())return 1;
    	else return 0;		   
    }
    
    u8 DHT11_Read_Byte(void)    
    {        
        u8 i,dat;
        dat=0;
    	for (i=0;i<8;i++) 
    	{
       		dat<<=1; 
    	    dat|=DHT11_Read_Bit();
        }						    
        return dat;
    }
    
    
    u8 DHT11_Read_Data(u8 *temp,u8 *humi)    
    {        
     	u8 buf[5];
    	u8 i;
    	DHT11_Rst();
    	if(DHT11_Check()==0)
    	{
    		for(i=0;i<5;i++)//读取40位数据
    		{
    			buf[i]=DHT11_Read_Byte();
    		}
    		if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
    		{
    			*humi=buf[0];
    			*temp=buf[2];
    		}
    	}else return 1;
    	return 0;	    
    }
    
    static int second_drv_open(struct inode *inode, struct file *file)
    {
    	
    	 //gpio_direction_input(CFG_IO_X6818_Humity);
    	
    
    	return 0;
    }
    
    ssize_t second_drv_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)
    {
    	/* 返回4个引脚的电平 */
    	unsigned int dht11_vals[2];
    	u8 temperature; 		
    	u8 humidity;  
    	int i ;
    	for (i = 0;i<15;i++)
    		{
    			DHT11_Read_Data(&temperature,&humidity);
    			mdelay(2000);
    			printk("the tem is %d,hum is %d\n",temperature,humidity);
    		}
    	DHT11_Read_Data(&temperature,&humidity);
    	printk("the tem is %d,hum is %d\n",temperature,humidity);
    	mdelay(2000);
    	dht11_vals[0] = temperature;
    	dht11_vals[1] = humidity;
    
    	copy_to_user(buf, dht11_vals, sizeof(dht11_vals));
    	
    	return sizeof(dht11_vals);
    }
    
    
    static struct file_operations sencod_drv_fops = {
        .owner  =   THIS_MODULE,    /* 这是一个宏,推向编译模块时自动创建的__this_module变量 */
        .open   =   second_drv_open,     
    	.read	=	second_drv_read,	   
    };
    
    
    int major;
    static int second_drv_init(void)
    {
    	major = register_chrdev(0, "second_drv", &sencod_drv_fops);
    
    	seconddrv_class = class_create(THIS_MODULE, "second_drv");
    
    	seconddrv_class_dev = device_create(seconddrv_class, NULL, MKDEV(major, 0), NULL, "buttons"); /* /dev/buttons */
    	
    
    	return 0;
    }
    
    static void second_drv_exit(void)
    {
    	unregister_chrdev(major, "second_drv");
    	device_unregister(seconddrv_class_dev);
    	class_destroy(seconddrv_class);
    	return 0;
    }
    
    
    module_init(second_drv_init);
    
    module_exit(second_drv_exit);
    
    MODULE_LICENSE("GPL");
    
    
    
    

    seconddrvtest.c

    #include <stdio.h>
    #include <sys/types.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    #include <sys/ioctl.h>
    #include <sys/stat.h>
    #include <sys/termios.h>
    int main()
    {
        int fd;
        int ret ;
    	unsigned int dht11_vals[2];
        fd = open("/dev/buttons", 0);
     	if (fd < 0)
    	{
    		printf("can't open!\n");
    	}
    	read(fd, dht11_vals, sizeof(dht11_vals));
    	printf("end the tem is %d,hum is %d\n",dht11_vals[0],dht11_vals[1]);
        close(fd);
        return 0;
    }
    
    

    Makefile

    #内核要提前编译好
    KERN_DIR = /home/scholar/Desktop/6818GEC/kernel
    #-C 是转到后面的目录'$(KERN_DIR)',使用这个目录下面的 Makefile 编译
    #M是指当前目标是什么
    #moudule 是指目标
    
    all:
    	make -C $(KERN_DIR) M=`pwd` modules 
    
    clean:
    	make -C $(KERN_DIR) M=`pwd` modules clean
    	rm -rf modules.order
    
    obj-m	+= second_drv.o
    
    
    展开全文
  • importarcpy,os#该文件夹下的mxd将批量执行mxdFolderPath=r"C:\temp\GJHY-16"#加'r'避免被转义,如\t#旧的数据源#数据库连接\orcl.sdeoldDataSources=r"C:\Users\Administrator\AppData\Roaming\ESRI\Desktop10.0\...

    importarcpy, os

    #

    该文件夹下的

    mxd

    将批量执行

    mxdFolderPath = r"C:\temp\GJHY-16"

    #

    'r'

    避免被转义

    ,

    \t

    #

    旧的数据源

    #

    数据库连接

    \orcl.sde

    oldDataSources

    =

    r"C:\Users\Administrator\AppData\Roaming\ESRI\Desktop10.0\ArcCatalog\GJHY2.sde"

    #

    oldDataSources

    =

    r"C:\Users\Administrator\AppData\Roaming\ESRI\Desktop10.0\ArcCatalog\Connection

    to

    127.0.0.1.sde"

    #

    oldDataSources

    =

    r"C:\Users\Administrator\AppData\Roaming\ESRI\Desktop10.0\ArcCatalog\Connection

    to

    10.1.4.22.sde"

    #

    新的数据源

    newDataSources

    =

    r"C:\Users\Administrator\AppData\Roaming\ESRI\Desktop10.0\ArcCatalog\GJHY.sde"

    #

    是否要求新数据源有效

    validateNewDataSources = False

    saveFolderPath = os.path.join(mxdFolderPath,"save")

    if not os.path.exists(saveFolderPath):

    os.mkdir(saveFolderPath)

    for filename in os.listdir(mxdFolderPath):

    fullpath = os.path.join(mxdFolderPath, filename)

    ifos.path.isfile(fullpath):

    basename, extension = os.path.splitext(filename)

    ifextension.lower() == ".mxd":

    mxd = arcpy.mapping.MapDocument(fullpath)

    printfullpath

    #debug

    print "====================

    更改前:

    ====================="

    brknList = arcpy.mapping.ListBrokenDataSources(mxd)

    print "BrokenDataSources

    个数

    :%d" % len(brknList)

    print "

    【数据源损坏的图层】

    "

    iflen(brknList)>0:

    forlyr in brknList:

    print "- " + lyr.name

    print "\t" + lyr.dataSource

    # print "

    【所有图层】

    "

    # forlyr in arcpy.mapping.ListLayers(mxd):

    #

    print "- " + lyr.name

    #

    iflyr.supports("DATASOURCE"):

    展开全文
  • 我们继续分析自毁程序密码这个app,我们发现该程序会用fopen ()打开/proc/[pid]/status这个文件,随后会用fgets()和strstr()来获取,于是我们在strstr()处下个断点,然后让hex view的数据与R0同步。每次点击继续,...

    我们继续分析自毁程序密码这个app,我们发现该程序会用fopen ()打开/proc/[pid]/status这个文件,随后会用fgets()和strstr()来获取,于是我们在strstr()处下个断点,然后让hex view的数据与R0同步。每次点击继续,我们都会看到strstr传入的参数。当传入的参数变为TracerPid:XXXX的时候我们停一下。因为在正常情况下,TracerPid的值应该是0。但是当被调试的时候就会变成调试器的pid。

    enter image description here

    enter image description here

    为了防止程序发现我们在调试,在这里我们需要把值改回0。我们在hex view的2那里点击右键,然后选择edit。随后我们输入30和00,再点击”apply changes”。就可以把TracerPid改为0了。然后就可以bypass这一次的反调试的检测。

    enter image description here

    但这个程序检测TracerPid的次数非常频繁,我们要不断的修改TracerPid的值才行,这种方法实在有点治标不治本,所以我们会在下一节介绍patch so文件的方法来解决这个问题。

    另外在ida动态调试过程中,除了内存中的数据可以修改,寄存器的数据也是可以动态修改的。比如说程序执行到CMP R6, #0。本来R6的值是0,经过比较后,程序会跳转到4082A3FC这个地址。

    enter image description here

    但是如果我们在PC执行到4082A1F8这条语句的时候,将R6的值动态修改为0。程序就不会进行跳转了。

    enter image description here

    enter image description here

    你甚至可以修改PC寄存器的值来控制程序跳转到任何想要跳转到的位置,简直和ROP的原理一样。但记得要注意栈平衡等问题。

    enter image description here

    展开全文
  • 基于Android技术的个性化新闻手机APP 小组名称:Zoom小组 项目名称: 基于Android技术的个性化新闻手机APP 1引言 4 1.1需求分析 4 1.2 项目背景 5 2可行性研究 6 2.1可行性研究的前提 6 2.2对现有系统的分析 6 2.3...
  • 因为要使手机端app自适应ipad端。所以要把项目中部分使用px的固定单位的改为相对单位 。uniapp中规定了页面的宽度为750rpx。所以改起来还是很简单的。 但是使用正则匹配修改px单位为rpx 编辑器可以按照正则匹配,...

    因为要使手机端app自适应ipad端。所以要把项目中部分使用px的固定单位的改为相对单位 。uniapp中规定了页面的宽度为750rpx。所以改起来还是很简单的。
    但是使用正则匹配修改px单位为rpx
    编辑器可以按照正则匹配,但是因为没有运算功能,所以只修改px为rpx之后。数值没有x2。不满足需求。
    之后使用了 xp2rpx插件。在vue文件中打开插件以后,保存文件就好了。
    修改之前

     

    开启插件 

    然后 ctrl+s 保存文件就修改好了。如果帮助到你希望可以点赞,收藏,评论一下。

    展开全文
  • 有时我们的安卓手机在安装新版本app...在我们的manifest.json文件中,基本信息里面有个appid,这个如果最开始设置了一个数值,后期升版本就不能再修改,如果后期修改了在安卓手机上面就会有这个问题,希望能帮到大家...
  • 修改Win+E映射

    2021-04-18 15:06:06
    !!!!!!此过程需要修改注册表,...在DelegateExecute上右键选择删除,在**(默认)上右键选择修改,将数值数据修改为你想用Win+E打开的程序路径(如果是UWP应用,路径为C:\Users\HP\AppData\Local\Microsoft\WindowsA
  • 打开文件D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora,修改PORT =后的数值,如下图 修改 tnsnames.ora 如下图 2、重启TNSListener服务 在Windows服务中重启OracleOraDb11g_home1...
  • 字符串String 是位于java.lang包的一个类,而且使用了final 关键词修饰,所以字符串创建后 就会在常量池中创建(前提是常量池...public class App01 { public static void main(String[] args) { String s = "haha
  • 前言:Zygote 是 Android ...当点击微信运动排行榜的时候微信APP会获取手机上计数传感器的数值,然后传感器会返回我们行走的步数。此时我们使用Xposed框架来hook计数传感器的队列函数dispatchSensorEvent(),该函数在An
  • Oracle 11g修改默认端口1521为其他值

    千次阅读 2019-05-08 15:55:00
    打开文件D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora,修改PORT =后的数值,如下图 修改listener.ora文件 2、重启TNSListener服务 在Windows服务中...
  • 局域网内连接一个平板,平板设置固定Ip(使之无法连接宽带)后,运行一个小程序,监听一个固定端口,当收到合适数据时,返回数据 ...接下来,就继续测试App收到多达400个数值后如何进行显示了. 随着一个个问题的解
  • MATLABMATLAB是一种用于开发算法,数据可视化,数据分析以及数值计算的领先的计算软件。MATLAB的应用范围包括信号图像处理,通信,控制设计,测试和测量,财务建模和分析等。MATLAB的应用范围之广是每一个理工科学生...
  • web测试点1.1 输入框1.1.1 字符型输入框1.1.2 数值型输入框1.1.3 日期型输入框1.1.4 信息重复1.2 搜索功能1.2.1 功能实现1.2.2 组合测试1.3 添加,修改功能1.3.1 特殊键1.3.2 提示信息1.3.3 唯一性1.3.4 数据正确性...
  • $pat[0] = 'app_debug'; $rep[0] = 'true';... * 传递的参数为2个数组 前面的为配置 后面的为数值. 正则的匹配为单引号 如果你的是分号 请自行修改为分号 * $pat[0] = 参数前缀; 例: app_debug .
  • 1、首先确保已经建立了模拟器2、首先修改activity_main.xml,把内容写在android:text=""中,我要修改的是图书管理系统,可以通过更改android:textSize="20px" 的数值,更改“图书管理系统”字体的大小。3、下面要...
  • Key Launcher上显示的Shortcut存储在NVRAM_EF_PHNSET_WIDGET_MGR_SYS_LIST_LID这个NVRAM数值中,可以修改这个NVRAM的default值来决定希望哪些shortcut显示在Key Launcher上 需要注意,NVRAM里面填的是shortcut的APP...
  • 由于安卓修改大师的零门槛学习成本,让安卓应用程序的破解和二次开发变得相当简单,也正因如此,手机APP遭受破解和盗版问题长期存在,且愈演愈烈。尤其是手游行业,如刀塔传奇、植物大战僵尸、2048等知名游戏被破解...
  • Key Launcher上显示的Shortcut存储在NVRAM_EF_PHNSET_WIDGET_MGR_SYS_LIST_LID这个NVRAM数值中,可以修改这个NVRAM的default值来决定希望哪些shortcut显示在Key Launcher上 需要注意,NVRAM里面填的是shortcut的APP...
  • 饼图生成器是一款非常好用的饼图生成软件,只需要输入各项名称、数值等就可以一键生成,还可以自定义修改颜色,需要的朋友赶紧下载吧!饼图生成器介绍饼图生成器,供您创建各式各样的图表。支持自由布局与…您只需...
  • 比如手淘APP的拍图识别功能就是由其拍立淘-图像搜索算法团队主要研发和维护的。 而阿里巴巴国际站在2017年上线的主图重复检测,目前测试看应该是MD5数值的对比判断,因此如果一张产品主图在数据测试中...
  • 比如手淘APP的拍图识别功能就是由其拍立淘-图像搜索算法团队主要研发和维护的。 而阿里巴巴国际站在2017年上线的主图重复检测,目前测试看应该是MD5数值的对比判断,因此如果一张产品主图在数据测试中...
  • 根据需要,在app/build.gradle中修改app版本号: versionCode是app的大版本号,为数值类型,默认为1。 versionName是app的具体版本号,为字符串类型,默认为1.0。 根据需要,在app/build.gradle中添加如下代码进行...
  • oracle 数据库改端口

    千次阅读 2019-06-11 23:33:59
    打开文件D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora,修改PORT =后的数值,如下图 修改listener.ora文件 2、重启TNSListener服务 在Windows服务中重启OracleO...
  • Android Studio怎么打包成APK

    千次阅读 2020-06-23 18:01:31
    versionCode是app的大版本好,为数值类型,默认为1,改成2 versionName是app的具体版本号,为际符串类型,默认为1.0,改成2.0 2.指定生成的APK文件名 还是在刚刚的bulid.gradle文件中修改,默认生成release版apk名为...
  • versionCode是app的大版本号,为数值类型,默认为1我这里改为2。 versionName是app的具体版本号,为际符串类型,默认为1.0我这里改为2.3。 1.2 指定生成的APK文件名 一样是在build.gradle文件中修改,默认生成的...
  • versionCode是app的大版本号,为数值类型,默认为1我这里改为2。 versionName是app的具体版本号,为际符串类型,默认为1.0我这里改为2.3。 1.2 指定生成的APK文件名 *一样是在build.gradle文件中修改,默认...
  • Android Studio 打包生成 APK1. 修改 build.gradle 文件2. 导出签名发布版 apk ...// app 的大版本号, 为数值类型 versionCode 1 // app 的具体版本号, 为际符串类型 versionName "1.0" android.applic

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 125
精华内容 50
关键字:

修改app数值