当前位置: 首页 > news >正文

温州网站推广站建设/网站流量分析

温州网站推广站建设,网站流量分析,网站自然排名优化,c 中怎么用html5做网站FLASH闪存 程序现象: 1、读写内部FLASH 这个代码的目的,就是利用内部flash程序存储器的剩余空间,来存储一些掉电不丢失的参数。所以这里的程序是按下K1变换一下测试数据,然后存储到内部FLASH,按下K2把所有参数清0&…

FLASH闪存

程序现象:
1、读写内部FLASH
这个代码的目的,就是利用内部flash程序存储器的剩余空间,来存储一些掉电不丢失的参数。所以这里的程序是按下K1变换一下测试数据,然后存储到内部FLASH,按下K2把所有参数清0,最后OIED显示一下。
这里OLED显示Flag、Data 。Flag当做标志位,内容定义为:A5A5。Flag作用:判断之前是不是存储过数据,如果存储过,直接读取;如没有存储过,就先初始化。
Data:是要掉电存储的数据。
在这里插入图片描述
2,读取芯片ID
在stm32里,指定地址下,存储有原厂写入的ID号,使用指针的方式读取,就可以得到ID号。
OLED可以看到,有2个ID号:第一个是F_SIZE,表示芯片FLASH容量。0040表示FLASH容量,单位是KB,换成十进制是64KB。
第二个是U_ID,是96位芯片唯一ID号,每个芯片ID号都不一样。
在这里插入图片描述

STM32内部FLASH闪存简介

在这里插入图片描述
读写FLASH的用途:
利用程序存储器的剩余空间来保存掉电不丢失的用户数据
通过在程序中编程(IAP),实现程序的自我更新

  • 第一个用途,对于我们这个C8T6芯片来说,它的程序存储器容量是64K,一般我们写个简单的程序,可能就只占前面的很小一部分空间,剩下的大片空余空间我们就可以加以利用,比如存储一些我们自定义的数据,而且可以充分利用资源。不过这里要注意我们在选取存储区域时,一定不要覆盖了原有的程序,要不然程序自己把自己给破坏了,一般存储少量的参数,我们就选最后几页存储就行了、

    第二个用途,通过在程序中编程IAP,实现程序的自我更新。我们在存储用户数据时要避开程序本身,以免破坏程序,但如果我们就非要修改程序本身,这会发生什么呢,在程序中编程,利用程序来修改程序本身,实现程序的自我更新,这个在程序中编程就是IAP,是用来实现程序升级的。

在线编程( ICP):这个JTAG SWD就是仿真器下载程序,每次下载都是把整个程序完全更新掉,那系统加载程序就是系统存储器的BOOTLOADER,也就是串口下载,串口下载也是更新整个程序,这就是我们一直在用的ICP下载方式。

  • 在程序中编程( IAP),它可以使用微控制器支持的任意一种通信接口下载程序。实现过程:

    比如这是整个程序存储器,我们首先需要自己写一个BOOTLOADER程序,并且存放在程序更新时不会覆盖的地方,然后需要更新程序时,我们控制程序跳转到这BOOTLOADER这里来,在这里面我们就可以接收任意一种通讯接口传过来的数据,比如串口、USB、蓝牙转串口、WIFI转串口等等,这个传过来的数据就是待更新的程序,然后我们控制flash读写,把收到的程序写入到前面程序正常运行的地方,写完之后再控制程序跳转回正常运行的地方,或者直接复位,这样程序就完成了自我升级。

区别:IAP就是和系统存储器这个的BOOTLOADER一样。系统存储器的BOOTLOADER,只能配置boot引脚触发启动。而我们自己写BOOTLOADER的话,就可以想怎么收怎么收,并且在整个升级过程,程序都可以自主完成。

回顾一下存储器影像

在这里插入图片描述

闪存模块组织

在这里插入图片描述
C8T6芯片的闪存容量是64K,属于中容量产品。

  • 这里分为了三个块,第一个是主存储器,也是程序存储器,用来存放程序代码的,这是最主要也是容量最大的一块。

    第二个是信息块,里面又可以分为启动程序代码和用户选择字节,其中启动程序代码就是系统存储器,存放的是原厂写入BOOTLOADER用于串口下载。

    第三块是闪存存储器接口寄存器,这一块的存储器实际上并不属于闪存,地址都是40开头的,说明这个存储器接口寄存器就是一个普通的外设,和之前讲的GPIO定时器、串口等等都是一个性质的东西,这些存储器它们的存储介质也都是SRAM。

    这个闪存存储器接口寄存器,就上面主存储器和信息块的管理员,闪存存储器接口寄存器就是用来控制擦除和编程这个过程的。

  • 对于主存储器,这里对它进行了分页,分页是为了更好的管理闪存,擦除和写保护都是以页为单位的。这点和之前W25Q64芯片的闪存一样,写入前必须擦除,擦除必须以最小单位进行,擦除后数据位全变为1,数据只能1写0,不能0写1,擦除和写入之后都需要等待忙,这些都是一样的。

    这里就比较简单了,它只有一个基本单位就是页,每一页的大小都是1K,0到127总共128页,总量就是128K,对于C8T6来说,它只有64K,所以C8T6的页只有一半0~63总共64页共64K,然后看一下页的地址范围。
    所以地址只要以000、400、800、400,结尾的都一定是页的起始地址。

FLASH基本结构

在这里插入图片描述

  • 整个闪存分为程序存储器、系统存储器和选项字节三部分,这里程序存储器为以C8T6为例,它是64K的,所以总共只有64页,最后一页的起始地址是0800FC00。

    左边这里是闪存存储器接口,手册里还有个名称,闪存编程和擦除控制器LPEC。

    然后闪存存储器接口,可以对程序存储器进行擦除和编程,也可以对选项字节进行擦除和编程,系统存储器是不能擦除和编程的。

    这个选项字节里面有很大一部分配置位,其实是配置主程序存储器的读写保护的,所以右边画的写入选项字节,可以配置程序存储器的读写保护。

如何操作这个控制器FPEC,来对程序存储器和选项字节进行擦除和编程。

FLASH解锁
在这里插入图片描述

  • 首先第一步是flash解锁,这个flash操作之前需要解锁,目的都是为了防止误操作,是通过在键寄存器写入指定的键值来实现,使用键寄存容器的好处就是更能防止误操作,每一个指令必须输密码才能完成,叫密钥寄存器。

    首先FPEC共有三个键值,也就是三把开锁的钥匙,RDPRT键是解除读保护的密钥,值是0XA5这些值呢,实际上是随便定义的,只要你定义的不是很简单就行。

  • 解锁:第一个是复位后FPEC被保护,不能写入FLASH_CR:也就是复位后flash默认是锁着的。

    在FLASH_KEYR键寄存器中,先写入KEY1,再写入KEY2解锁,这个锁是KEYR寄存器,所以这个有两道锁,解锁的话,要先用K1钥匙解,再用K2钥匙解,最终才能解锁成功,所以非人为情况下基本不可能解锁。

    然后,就是错误的操作序列会在下次复位前锁死FPEC和FLASH_CR:于是他发现有程序在尝试撬锁时,一旦没有先写入KEY1,再写入KEY2,整个模块就会完全锁死,除非复位,这是整个解锁操作。

  • 加锁:我们操作完成之后,要尽快把flash重新加锁,以防止意外情况,加锁的操作是设置FLASH_CR中的LOCK位锁住FPEC和FLASH_CR:就是控制寄存器里面有个LOCK位,我们在这一位写1就能重新锁住闪存。

使用指针访问存储器

在这里插入图片描述

uint16_t Data = *((__IO uint16_t *)(0x08000000));

第一步,读取给定存储器器的地址,比如0x08000000例,读取这个地址下的数据。

第二步,在地址前面加上强制类型转换,转换成uint16_t * 。__IO 在stm32库函数中,这是宏定义。
#define __IO volatile,这个宏定义对应C语言关键字, volatile。在uint16_t *数据类型前加volatile,起一个保障作用,目的是,防止编译器优化。

第三步,使用*号,指针取内容,把这个指针指向的存储器取出来了,这个值就是指定存储器的值,取出来可以把它赋值给自定义变量Data,这样就完成指定地址读的任务。

如果你这个地址写的是SRAM的地址,比如0X20000000,那可以直接写入了,因为SRAM在程序运行时是可读可写的,这是使用指针访问存储器的C语言代码。其中读取可以直接读,写入需要解锁,并且执行后面的流程。

程序存储器全擦除

在这里插入图片描述
第一步是读取lock位,看一下芯片锁没锁,如果lock位=1锁住了,就执行解锁过程,解锁过程就是:在KEYR寄存器先写入KEY1,再写入KEY2;如果lock位=0当前没锁住,就不用解锁了。这是流程图里给的解锁步骤,如果锁住了就解锁,如果没锁住就不用解锁。但是在库函数中并没有这个判断,库函数是直接执行解锁过程,管你锁没锁都执行解锁。

第二步,然后继续解锁之后,首先置控制寄存器里的MER(Mass Erase)位为1,然后再置STRT(Start)位为1,其中STRT为1是触发条件,STRT为1之后芯片开始干活,然后现在看到MER位是1,它就知道接下来要干的活就是全擦除,这样内部电路就会自动执行全擦除的过程。

第三步,然后继续擦除,擦除过程开始后,程序要执行等待,判断状态寄存器的BSY(Busy)位是否为1,BSY位表示芯片是否处于忙状态,BSY位为1表示芯片忙,所以这里如果判断BSY位等于1,就跳转回来继续循环判断,直到BSY位=0跳出循环。

第四步:读出并验证所有页的数据,这个是测试程序才要做的,如要全读出来验证一下,这个工作量太大了,所以这里的最后一步就不管了,正常情况下全删除完成了,我们默认就成功了,这是全擦除的流程。

程序存储器页擦除

在这里插入图片描述
第一步,是解锁的流程。

第二步,这个方框里的,置控寄存器的PER(Page Erase)位为1;在AR(Address Register)地址寄存器中选择要擦除的页,最后置控制寄存器的STRT位为1,置STRT位为1,也是触发条件,芯片开始干活,然后芯片看到PER等于1,它就知道接下来要执行页擦除。
然后闪存不止一页,页擦除芯片就要知道要具体擦哪一页,所以它会继续看AR寄存器的数据,AR寄存器我们要提前写入一个页的起始地址,这样芯片就会把我们指定的一页给擦除掉。

第三步,然后擦除开始之后,我们也要等待BSY位,最后读出并验证数据。

程序存储器编程

闪存的写入
在这里插入图片描述

闪存的写入:擦除之后我们就可以执行写入的流程了,另外说明一下,STM32的闪存,在写入之前会检查指定地址有没有擦除,如果没有擦除就写入STM32则不执行写入操作,除非写入的全是0,这个数据是例外,因为不擦除就写入,可能会写入错误。

第一步,是解锁。

第二步,置控制寄存器的PG(Programming)位为1,表示我们即将写入数据。

第三步,在指定的地址写入半字,这一步我们需要*((__IO uint16_t *)(0x08000000)) = 0x1234;使用指针在指定地址写入数据。

  • 注意:写入操作只能以半字的形式写入,在STM32中有几个术语,字、半字和字节,其中字word就是32位数据,半字half word就是16位数据,字节byte就是8位数据。那这里只能以半字写入,意思就是只能以16位的形式写入,一次性,写入两个字节,如果你要写入32位,就分两次完成。

    如果你只要写入8位,比较麻烦了,如果你想单独写入一个字节,还要保留另一个字节的原始数据的话,那只能把整页数据都读到SRAM,再随意修改SRAM数据,修改全部完成之后,再把整页都擦除,最后再把整页都写回去。

    所以如果你想像SRAM一样随心所欲的读写,那最好的办法就,先把闪存的一页读到SRAM中,读写完成后再擦除一页,整体写回去。

第四步,写了半字之后,芯片会处于忙状态,我们等待一下BUSY清0,这样写入数据的过程就完成。那每执行这样一个流程,只能写入一个半字,如果要写出很多数据,要不断循环调用这个流程就可以。

选项字节

在这里插入图片描述

图里的起始地址,就是选项字节的起始地址,1FFF800,这块的这些数据,就前面这里这个表的这一行,里面总共只有16个字节,把这些存储器给展开,就这个图。

  • 这里是对应的16个字节,其中有一半的名称前面都带了个N,比如RDP和nRDP
    ,USER和nUSER等,意思,是你在写入RDP数据时,要同时在NRDP写入数据的反码,要在带N的对应的存储器写入反码,这样写入操作才是有效的。

    如果芯片检测到,这两个存储器不是反码的关系,那就代表数据无效有错误,对应的功能就不执行,这是一个安全保障措施。但这个写入反码的过程,硬件会自动计算并写入。

那然后每个存储器的功能,去掉所有带n的,剩下八个字节存储器

  • 第一个RDP(Read Protect)是,读保护配置位,解释,在RDP存储器写入RDPRT键,然后解除读保护,如果RDP不是A5,那闪存就是读保护状态,无法通过调试器读取程序,避免程序被别人窃取。

    第二个字节USER,可以配置硬件看门狗和进入停机待机模式是否产生复位。

    第三个和第四个字节Data0/1,这个在芯片中没有定义功能,用户可自定义使用。

    最后四个字节,WRP(WriteProtect)0、1、2、3这四个字节配置的是写保护,在中容量产品里是每一个位对应保护四个存储页,四个字节总共32位,一位对应保护四页,总共保护32×4等于128页,正好对应中容量量的最大128页。

小容量产品
手册2.5选项字节说明
在这里插入图片描述
对于小容量产品,也是每一位对应保护四个存储页,但小容量产品最大只有32K,所以只需要一个字节WRP0就行,4×8=32,其他三个字节没用到。

大容量产品
在这里插入图片描述
然而对于大容量产品,每一个位只能保护两个存储页,这样的话四个字节就不够用了,所以这里规定WRP3的最高位,这一位直接把剩下的所有页一起都保护了,这是写保护的定义。

选项字节擦除

在这里插入图片描述
选项字节擦除:
第一步,其实也是解锁闪存,这里文字并没有写。

第二步,这里文字版的流程多了一步,检查SR的BSY位,以确认没有其他正在进行的闪存操作,这个实际上就是事前等待,如果当前已经在忙了,我先等一下。

第三步,解锁CR的OPTWRE(Option Write Enable)位,这一步是选项字节的解锁,选项字节里面还有一个单独的锁,在解锁闪存后,还需要再解锁选项字节的锁,之后才能操作选项字节。

解锁选项字节:看(前面闪存模块组织图),整个闪存的锁是KEYR,里面选项字节的小锁是下面的OPTKEYR(Option Key Register),解锁这个小锁也是类似的流程,我们需要在OPTKEYR里先写入KEY1,再写入KEY2,这样就能解锁选项字节的小锁了。

第四步,继续解除小锁之后,设置CR的OPTER(Option Erase)位为1,表示即将擦除选项字节。

第五步,设置CR的STRT位为1,触发芯片开始干活,这样芯片就会启动擦除选项字节的工作。

第六步,之后等待BUSY位变为0,擦除选项字节就完成了。
在这里插入图片描述

选项字节编程

在这里插入图片描述
先检测BSY,
然后解除小锁,
之后设置CR的OPTPG(Option Programming)位为1,表示即将写入选项字节,
再之后写入要编程的半字到指定的地址,这个是指针写入操作,
最后等待忙,这样写入选项字节就完成了。

器件电子签名

在这里插入图片描述
在这里插入图片描述

电子签名其实就是STM32的ID号,它的存放区域是系统存储器,它不仅有BOOTLOADER程序,还有几个字节的ID号,系统存储器起始地址是1FFFF000。

  • 第一个是闪存容量存储器,基地址是1FFF
    F7E0,通过地址也可以确定它的位置,就是系统存储器,这个存储器的大小是16位,它的值就是闪存的容量单位是KB。

    第二个是产品唯一身份标识寄存器,就是每个芯片的身份证号,这个数据存放的基地址是1FFFF7E8,大小是96位,每一个芯片的这96位数据,都是不一样的。
    使用这个唯一ID号,可以做一些加密的操作:比如你想写入一段程序,只能在指定设备运行,那也可以在程序的多处,加入ID号判断,如果不是指定设备的ID号,就不执行程序功能。这样即使你的程序被盗,在别的设备上也难以运行,这是STM32的电子签名。

闪存编程手册

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在编程过程中,任何读写闪存的操作都会使CPU暂停,直到此闪存编程结束。

这是读写内部闪存存储数据的一个弊端,忙的时候代码执行会暂停,因为执行代码需要读闪存,闪存在忙没法读,所以CPU也就没法运行了,程序就会暂停。这会导致,假如你使用内部闪存存储数据,同时你的中断代码又在频繁执行,这样读写闪存的时候,中断代码就无法执行了,这可能会导致中断无法及时响应。

选项字节编程
在这里插入图片描述

闪存控制寄存器(FLASH_CR)
在这里插入图片描述
在这里插入图片描述

相关文章:

FLASH闪存

FLASH闪存 程序现象: 1、读写内部FLASH 这个代码的目的,就是利用内部flash程序存储器的剩余空间,来存储一些掉电不丢失的参数。所以这里的程序是按下K1变换一下测试数据,然后存储到内部FLASH,按下K2把所有参数清0&…...

GPT-5智能新纪元的曙光

在美国达特茅斯工程学院周四公布的采访中,OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布,给出了肯定答案并表示将在一年半后发布。穆拉蒂在采访中还把GPT-4到GPT-5的飞跃描述为高中生到博士生的成长。 这一爆炸性的消息,震动了整体…...

Qt | QPalette 类(调色版)

01、简介 1、需要用到 QWidget类中的如下属性 palette:QPalette 访问函数:const QPalette &palette() const; void setPalette(const QPalette&);  该属性描述了部件的调色板。在渲染标准部件时,窗口部件的样式会使用调色板,而且不同的平台或不同的样式通常具…...

Linux操作系统进程同步的几种方式及基本原理

1,进程同步的几种方式 1.1信号量 用于进程间传递信号的一个整数值。在信号量上只有三种操作可以进行:初始化,P操作和V操作,这三种操作都是原子操作。 P操作(递减操作)可以用于阻塞一个进程,V操作(增加操作)可以用于…...

android 责任链模式

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。这种模式将这些对象连成一条链,并沿着这条链传递请求,直到有一…...

【可控图像生成系列论文(四)】IP-Adapter 具体是如何训练的?1公式篇

系列文章目录 【可控图像生成系列论文(一)】 简要介绍了 MimicBrush 的整体流程和方法;【可控图像生成系列论文(二)】 就MimicBrush 的具体模型结构、训练数据和纹理迁移进行了更详细的介绍。【可控图像生成系列论文&…...

堆的实现详解

目录 1. 堆的概念和特点2. 堆的实现2.1 堆向下调整算法2.2堆的创建2.3 建堆时间复杂度2.4 堆的插入2.5 堆的删除2.6 堆的代码实现2.6.1 结构体2.6.2 初始化2.6.3 销毁2.6.4 插入2.6.5 删除2.6.6 获取堆顶2.6.7 判空2.6.8 个数2.6.9 向上调整2.6.10 向下调整3. 堆的实现测试测试…...

iptables配置NAT实现端口转发

加载防火墙的内核模块 modprobe ip_tables modprobe ip_nat_ftp modprobe ip_conntrack 1.开启路由转发功能 echo net.ipv4.ip_forward 1 >> /etc/sysctl.conf sysctl -p2、将本地的端口转发到本机端口 将本机的 7777 端口转发到 6666 端口。 iptables -t nat -A PR…...

【启明智显产品介绍】Model3C工业级HMI芯片详解专题(一)芯片性能

【启明智显产品介绍】工业级HMI芯片Model3C详解(一)芯片性能 Model3C 是一款基于 RISC-V 的高性能、国产自主、工业级高清显示与智能控制 MCU,配置平头哥E907,主频400MHz,强大的 2D 图形加速处理器、PNG/JPEG 解码引擎…...

Socket编程【个人简单】

介绍 Socket是计算机网络中的一种通信端点,通过它应用程序可以在网络上发送和接收数据。它可以是基于TCP(传输控制协议)的流套接字,也可以是基于UDP(用户数据报协议)的数据报套接字。 TCP、UDP、HTTP和We…...

java入门 grpc测试案例

一、 参考资料 参考孙帅suns教程 https://www.bilibili.com/video/BV13M41157gU/?p3&spm_id_from333.880.my_history.page.click&vd_source4cd1b6f268e2a29a11bea5d2568836ee 二、 服务端 项目目录 maven构建项目 pom.xml <project xmlns"http://maven.a…...

【操作系统】信号处理与阻塞函数|时序竞态问题

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ 关于阻塞函数和…...

go语言day4 引入第三方依赖 整型和字符串转换 进制间转换 指针类型 浮点数类型 字符串类型

Golang依赖下载安装失败解决方法_安装go依赖超时怎么解决-CSDN博客 go安装依赖包&#xff08;go get, go module&#xff09;_go 安装依赖-CSDN博客 目录 go语言项目中如何使用第三方依赖&#xff1a;&#xff08;前两步可以忽略&#xff09; 一、安装git&#xff0c;安装程序…...

IOS Swift 从入门到精通:闭包第二部分,高级闭包

文章目录 当闭包接受参数时使用闭包作为参数当闭包返回值时使用闭包作为参数简写参数名称高级闭包: 具有多个参数的闭包高级闭包:从函数返回闭包高级闭包:捕获值总结当闭包接受参数时使用闭包作为参数 这是闭包开始变得有点像线路噪声的地方:传递给函数的闭包也可以接受它…...

爬虫超详细介绍

爬虫&#xff08;Spider&#xff09;是一种自动化程序&#xff0c;用于在互联网上获取信息。 其工作原理主要可以分为以下几个步骤&#xff1a; 发起请求&#xff1a; 爬虫首先需要向目标网站发起HTTP请求&#xff0c;以获取网页的内容。这个请求可以包含一些额外的信息&…...

双向长短期记忆神经网络BiLSTM

先说一下LSTM LSTM 是一种特殊的 RNN&#xff0c;它通过引入门控机制来解决传统 RNN 的长期依赖问题。 LSTM 的结构包含以下几个关键组件&#xff1a; 输入门&#xff08;input gate&#xff09;&#xff1a;决定当前时间步的输入信息对细胞状态的影响程度。遗忘门&#xff…...

python基础篇(4):range语句

1 功能介绍 range语句的功能是获得一个数字序列&#xff08;可迭代类型的一种&#xff09; 2 语法 语法1&#xff1a; range(num) 获取一个从0开始&#xff0c;到num结束的数字序列&#xff08;不含num本身&#xff09; 如range(5)取得的数据是&#xff1a;[0, 1, 2, 3, 4…...

基于STM32的简易计算器proteus仿真设计(仿真+程序+设计报告+讲解视频)

基于STM32的简易计算器proteus仿真设计 讲解视频1.主要功能2. 仿真3. 程序4. 设计报告5. 资料清单&下载链接 基于STM32的简易计算器proteus仿真设计(仿真程序设计报告讲解视频&#xff09; 仿真图proteus 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a;C语言 …...

小程序onLoad 和 onShow

onLoad 和 onShow 是小程序页面的生命周期函数&#xff0c;它们在不同的时机触发&#xff0c;具有不同的用途和执行顺序 1.onLoad: &#xff08;1&#xff09;onLoad 在页面加载时触发&#xff0c;仅执行一次。 &#xff08;2&#xff09;用于页面的初始化操作&#xff0c;例如…...

抖音直播违规规定有哪些?(直播违禁词汇总表)

全民直播的同时也有不少新手直播玩家处处碰壁,直播间没人气,直播不知道说什么甚至直播间被封。 收到直播封禁通知的朋友,轻者封禁直播账号两三天,严重着可能永久封禁直播间! 今天我们重点来说说直播间被封是怎么回事?如何避免抖音直播间被封?抖音直播间违规规定有哪些?抖音…...

安卓 jetpack compose

以下是 Jetpack Compose 中常用的一些组件的列表&#xff1a; 组件名称描述Text用于显示文本内容。Button可点击的按钮组件&#xff0c;常用于触发事件。TextField用于输入文本的文本框组件。Image用于展示图片。Column垂直布局容器&#xff0c;可以在其中垂直排列子组件。Row…...

JavaWeb系列十九: jQuery的DOM操作 上

查找节点, 修改属性 查找属性节点: 查找到所需要的元素之后, 可以调用jQuery对象的attr()方法用来 设置/返回 它的各种属性值 设置属性值 $(“img”).attr(“width”, “300”);返回属性值 $(“img”).attr(“width”); 创建节点 创建节点: 使用jQuery的工厂函数$(): $(html标…...

JavaWeb系列十一: Web 开发会话技术(Cookie, Session)

韩sir Cookie技术Cookie简单示意图Cookie常用方法Cookie创建Cookie读取JSESSIONID读取指定Cookie Cookie修改Cookie生命周期Cookie的有效路径Cookie作业布置Cookie注意事项Cookie中文乱码问题 Session技术Session原理示意图Session常用方法Session底层机制Session生命周期Sessi…...

【激光雷达使用记录】—— 如何在ubuntu中利用ros自带的rviz工具实时可视化雷达点云的数据

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、查看雷达数据的 frame_id1. 查看雷达数据的话题2. 查看数据的frame_id 二、可视化雷达数据总结 前言 RViz&#xff08;ROS Visualization&#xff09;是机…...

运行项目报错(java: 无效的目标发行版: 17)项目jdk版本不兼容,修改Java编译器配置

...

一道session文件包含题

目录 环境说明 session文件包含getshell 审计源码 session包含 base64在session中的解码分析 题目&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Q0BN08b8gWiVE4tOnirpTA?pwdcate 提取码&#xff1a;cate 环境说明 这里我用的是linux&#xff0c;也可以用p…...

vuex数据持久化

清空原因&#xff1a; 刷新页面vuex的数据会丢失属于正常现象&#xff0c;因为JS的数据都是保存在浏览器的堆栈内存里面的&#xff0c;刷新浏览器页面&#xff0c;以前堆栈申请的内存被释放&#xff0c;这就是浏览器的运行机制&#xff0c;那么堆栈里的数据自然就清空了。 解…...

MySQL之复制(十)

复制 改变主库 确定期望的日志位置 如果有备库和新主库的位置不相同&#xff0c;则需要找到该备库最后一条执行的时间在新主库的二进制日志中相应的位置&#xff0c;然后再执行CHANGE MASTER TO.可以通过mysqlbinlog工具来找到备库执行的最后一条查询&#xff0c;然后在主库上…...

Spring MVC数据绑定和响应——简单数据绑定(一)默认类型数据绑定

一、Spring MVC常见的默认类型 当使用Spring MVC默认支持的数据类型作为处理器的形参类型时&#xff0c;Spring MVC的参数处理适配器会默认识别这些类型并进行赋值。Spring MVC常见的默认类型如下所示。 • HttpServletRequest&#xff1a;获取请求信息。 • HttpServlet…...

短视频平台自动化插件编写需要用到的源代码分享!

随着短视频平台的蓬勃发展&#xff0c;自动化插件的需求也日益增长&#xff0c;这些插件能够帮助用户更高效地管理内容、分析数据、优化发布策略等。 一、登录验证模块 登录验证是自动化插件的基础功能之一&#xff0c;确保用户能够安全地访问平台并执行相关操作&#xff0c;…...