v2.6注意事项:由于新增了功能,使用前请先仔细阅读v2.6的使用说明;
版本特性:1.解决了因8266/8285的看门狗导致频繁重启的问题;
2.再次优化网页代码,省了1KB内存;3.Config页面的数据可以被回显了,告别重复设置上一次参数的烦恼,但是WIFI信道依然是默认CH11的,因为回显这部分代码太多了,不舍得浪费内存,所以对信道有特殊需求的用户,请每次都检查一下信道能否正确;
4.串口透传功能大升级,新增了缓冲区大小选项,并且能综合缓冲区大小及波特率,提供最小发送间隔的参考值,用户只要保证每次发送数据的间隔大于Min.Interval的值,就能保证数据不在串口上丢包;
5.修正UDPbug,透传时自动在数据末端加上结束符'\0',UDP数据不会再有乱码问题;
6.AP的SSID加上了ChipID作为后缀,防止多个模块初始启动时SSID重复导致混乱。
遗留问题:1.在使用UDP连续长时间发送数据后,可能会重启但不会假死,重启后就能恢复工作状态;
2.WiFi没连接成功时,WiFi重连机制占用着CPU,此时连接AP与打开Webconfig会有点慢,请刷新几次即可,ESP32没有此问题。
2019/7/16 16:06:14 2.62MB 透传固件 ESP32 ESP8266 ESP8285
1
本资源使用LABVIEW开发的基于数据记录仪采集出的TXT文件,经过16进制读取放入循环缓冲区,采用dll或vi解帧后显示,并可保存为EXCEL文件。
1
1、设计目的:通过研究Linux的进程同步机制和信号量,实现生产者消费者问题的并发控制。
2、说明:有界缓冲区内设有20个存储单元,放入取出的产品设定为20个100以内的随机整数。
3、设计要求:1) 生产者与消费者均有二个以上2) 生产者和消费者进程的数目在程序界面上可调,在运行时可随时单个增加与减少生产者与消费者3) 生产者的生产速度与消费者的消费速度均可在程序界面调理,在运行中,该值调整后立即生效4) 生产者生产的产品由随机函数决定5) 多个生产者或多个消费者之间必须有共享对缓冲区进行操作的函数代码6) 每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、当前生产者与消费者的指针位置,以及生产者和消费者线程标识符7) 采用可视化界面,可在运行过程中随时暂停,查看当前生产者、消费者以及有界缓冲区的状态
2020/4/18 1:24:45 31KB 生产者消费者
1
最终年份项目r305作为我最后一年毕业项目的一部分;
使用生物识别技术的考勤管理系统的设计与开发。
该项目实现了一个小型库,用于通过与上位机的串行通信与adafruitr305指纹模块进行交互。
在我们的例子中,上层计算机是树莓派(3),这克服了arduino无法从模块字符缓冲区或闪存库中获取模板到上层计算机进行外部存储(例如数据库)的特定限制。
该库还旨在克服arduinoc++库无法解决的这一难题。
因而,与其说不修改arduino库,不如说我们为什么不建我们的python库。
对项目的致谢,该项目为图书馆带来了极大的启发。
它还实现了一些适合我们(我自己,和)项目需求的模块,这些模块是指纹注册以及针对演讲和考勤的验证。
我们在此项目中构建的库部分由我们进一步开发,我们在pypi上将其作为python官方包(库)发布。
文档是readthedocs,和GitHub库
2019/11/3 6:03:39 10KB Python
1
1.目的:调试、修改、运行模拟程序,通过形象化的状态显示,使学生理解进程的概念,了解同步和通信的过程,掌握进程通信和同步的机制,特别是利用缓冲区进行同步和通信的过程。
通过补充新功能,使学生能灵活运用相关知识,培养创新能力。
2.内容及要求:1)调试、运行模拟程序。
2)发现并修改程序中不完善的地方。
3)修改程序,使用随机数控制创建生产者和消费者的过程。
4)在原来程序的基础上,加入缓冲区的写互斥控制功能,模拟多个进程存取一个公共缓冲区,当有进程正在写缓冲区时,其他要访问该缓冲区的进程必须等待,当有进程正在读取缓冲区时,其他要求读取的进程可以访问,而要求写的进程应该等待。
5)完成1)、2)、3)功能的,得基本分,完成4)功能的加2分,有其它功能改进的再加2分3.程序说明:  本程序是模拟两个进程,生产者(producer)和消费者(Consumer)工作。
生产者每次产生一个数据,送入缓冲区中。
消费者每次从缓冲区中取走一个数据。
缓冲区可以容纳8个数据。
因为缓冲区是有限的,因而当其满了时生产者进程应该等待,而空时,消费者进程应该等待;
当生产者向缓冲区放入了一个数据,应唤醒正在等待的消费者进程,同样,当消费者取走一个数据后,应唤醒正在等待的生产者进程。
就是生产者和消费者之间的同步。
  每次写入和读出数据时,都将读和写指针加一。
当读写指针同样时,又一起退回起点。
当写指针指向最后时,生产者就等待。
当读指针为零时,再次要读取的消费者也应该等待。
为简单起见,每次产生的数据为0-99的整数,从0开始,顺序递增。
两个进程的调度是通过运行者使用键盘来实现的。
4.程序使用的数据结构进程控制块:包括进程名,进程状态和执行次数。
缓冲区:一个整数数组。
缓冲区说明块:包括类型,读指针,写指针,读等待指针和写等待指针。
5.程序使用说明  启动程序后,如果使用'p'键则运行一次生产者进程,使用'c'键则运行一次消费者进程。
通过屏幕可以观察到两个进程的状态和缓冲区变化的情况。
2019/3/25 13:35:58 306KB 操作系统 上机 实验报告 进程同步
1
迪文调试助手V6.2.rar本文主要记录迪文串口屏的使用正在做的项目用到了迪文串口屏,网上资料较少,入手较困难,自己经过摸索后给大家一种简单入手的方式。
    屏幕型号 DMT48270T043,内核为M100(串口屏上市比较早了,现在迪文科技都是DGUS屏了,注意两者是有区别的),8pin接口,5V,DIN,DIN,DOUT,Busy,GND,GND,两个DIN是联通的,GND共地,所以一般使用的话可以直接连接5V,DIN与GND就可以了。
Busy是提醒数据缓冲区是否为满状态,以防发生数据丢失的情况。
该屏幕的具体参数可参见该型号的说明手册,这里不赘述。
调试助手:  迪文调试助手6.1测试屏幕的方法简介:    可使用USB转TTL转接板,将转接板的TXD连接迪文屏DIN,RXD接迪文屏DOUT,同时使用转接板直接供电。
    这里需要注意,在迪文屏背面有TTL电平与RS232电平的跳线选择,如果使用TTL电平需要将屏幕背面相应的跳线短接。
连接好之后便可以直接使用电脑,便可通过迪文调试助手6.1来直接对串口屏进行调试了。
    首先需要与迪文屏进行握手,握手条件是:选择正确的端口号,并设置波特率为115200(这里需要注意,对于波特率的设置,在迪文屏的背面也有跳线选择波特率的选项,1、921600,2、115200,一般出厂默认是115200),设置好之后便可以点击握手按钮,如果与迪文屏握手成功,软件会自动弹出对话框提示握手成功。
    接着便可以通过调试助手里面的一些功能选项对迪文屏直接操作,包括屏幕颜色、文本显示、载入图片,显示时钟等等,大家可自行摸索。
尤其大家可以熟悉一下终端参数的配置工具栏,里面是迪文屏的初始配置,也是基本配置,在使用中如果遇到例如触摸屏幕之后不再发出响应指令的问题,请关注初始化配置参数。
    这里需要注意的是,如果没有迪文调试助手的话,普通的串口调试助手也是可以的,但是首对迪文屏的操作仅能通过16进制的命令串来实现。
具体命令可以参照迪文HMI工业串口屏指令集2.4。
由于我们使用串口屏都是通过单片机控制板来对其操作的,因此熟悉操作指令或者学会查阅文档,对项目开发很有协助。
2017/2/6 17:13:26 1.82MB 迪文 串口屏 DGUS
1
Linux下的多进程并发执行内容要求  任意选择一个文本文件,采用并发进程实现文件誊抄,将其复制为另一个文件。
创建get、copy、put三个进程共用两个缓冲区s、t。
get进程担任不断地把原始文件内容送入缓冲区s中,copy进程担任从缓冲区s中取出上述内容复制到缓冲区t中,而put进程担任把上述内容从缓冲区t中取出复制到目标文件中,用p、v操作实现这三个进程之间的同步。
含源代码
2017/1/20 18:10:41 906KB 第二次实验
1
StorageAndBufferManager高级数据库系统实验中科大金培权1.本次实验是设计并实现一个数据库缓冲区以及存储管理器。
2.理解数据常用的页面存储方式、缓冲技术、散列技术等文件存储技术;
3.体会数据库缓冲区以及存储管理器的设计对今后学习数据库底层结构、设计下一代数据库的设计有很大协助
2020/6/16 3:35:48 1.09MB database ustc
1
Protocolbuffers是一种编码方法构造的一种无效而可扩展的格式的数据。
谷歌使用其内部几乎RPC协议和文件格式的所有协议缓冲区。
C#protobuf如何实现http方式二进制传输的一个例子及说明文档
2017/6/20 22:20:35 978KB C#版 protobuf 实现http方式 二进制传输
1
模仿数据链路层的gobackn协议/*该协议是搭载ack的回退n步协议*/#include#include"protocol.h"#definemax_seq7#defineflag126#defineESC100#definewait_time2700 //发送计时器等待的时间#defineack_wait_time280staticintphl_ready=0;unsignedcharbuf[max_seq+1][270];unsignedcharack[8];//发送空的ack帧unsignedcharin_buf[600],last_buf[520];//接收时的缓冲区;去掉冗余之后的缓冲区,为防备因误码两帧合并为一帧而定义了很大一个数组intnbuffered=0;//发送的帧数intbuf_size[max_seq+1];//记下以发送各帧的帧长intnext_frame_to_send=0;intframe_in_phl=0;//用于成帧intframe_expected=0;intack_expected=0;intbetween(inta,intb,intc){ if(((a<=b)&&(b<c))||((c<a)&&(a<=b))||((b<c)&&(c<a))) return1; elsereturn0;}//判断帧尾,防止出现误判escescflag为数据的情况intend_flag(intin_len){ intcount=0; inti; if(in_len=0;i--)//记录flag前的esc数目 count++; returncount%2;//若flag前的esc为偶数,则为帧尾}//成帧函数--数据帧voidsend_frame(char*my_buf,intlen){ intn; buf[frame_in_phl][0]=(frame_expected+max_seq)%(max_seq+1); //ack buf[frame_in_phl][1]=frame_in_phl; //发送帧的帧号 for(n=0;n<len;n++) buf[frame_in_phl][n+2]=my_buf[n]; //将处理过的新帧赋值到缓冲区中 len=len+2; *(unsignedint*)(buf[frame_in_phl]+len)=crc32(buf[frame_in_phl],len); //在原始帧的基础上加检验和 buf_size[frame_in_phl]=len+4; //记录当前帧的长度,包括3个帧头,4个检验和 nbuffered=nbuffered+1; //缓冲区占用数加一 frame_in_phl=(frame_in_phl+1)%(max_seq+1);}//成帧函数--ack帧voidsend_ack() //ack帧的处理{ ack[0]=(frame_expected+max_seq)%(max_seq+1); ack[1]=max_seq+10; //ack帧的序号位,使ack[1]==frame_expected恒不成立 *(unsignedint*)(ack+2)=crc32(ack,2); //在原始帧的基础上加检验和}//主函数intmain(intargc,char**argv){intevent,arg,n,m,i,j,len=0,in_len=0; unsignedcharmy_buf[260]; intphl_wait=0;//在物理层中还没有被发送的帧protocol_init(argc,argv);enable_network_layer();for(;;){event=wait_for_event(&arg);switch(event){caseNETWORK_LAYER_READY:
2019/7/26 21:18:43 425KB go back n gobackn
1
共 125 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡