004-Zynq实现SD卡存储灰度图片(彩色图片存储正点已开源)

news2024/9/28 13:24:42

文章目录

  • 前言
  • 一、为什么参考ov7725照相机实验存储不了灰度?
  • 二、SD卡实现步骤
    • 1.配置Zynq核中的SD卡接口
    • 2.PS端勾选xilffs
    • 3.PS端代码
    • 4.读卡器读取SD卡结果呈现
  • 总结


前言

最近在弄SD卡存储灰度图片,参考了正点原子的OV7725照相机实验,但发现最终存储出来打不开,用专门的软件去看发现其中的数据全部乱码。后面发现正点原子存储的是彩色24位深度的图片,与我存储灰度图片不符合,到网上搜了一下灰度bmp图片的存储格式,加上自己查看了一下灰度图片的二进制数据解析,最终解决了问题。


一、为什么参考ov7725照相机实验存储不了灰度?

按照我的理解,原因其实很简单。存储彩色图片时通过BMP文件的文件头已经告诉了这张图片是彩图,彩图是由24位RGB数据组成的,那么总共就有256256256种颜色数据,这个颜色数据事先电脑就已经知道了,而且通用的存储也是按照这个来的,所以我们不需要把每一个颜色数据录入进去。

但灰度图片不一样,搜索才知道八位的灰度图存储需要在BMP的文件头后面添加像素表,才能够正常存储。这个像素表就是按照0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00这种格式写在BMP的头文件后面,一直写到0xff,0xff,0xff,0x00才结束,这样整个BMP的文件头就有256*4+原先的54位文件头数据=1078个八进制数据。后面的存储格式就按照彩色文件存储的格式来就行了,解决了这个问题以后灰度图片就能够顺利存储。

二、SD卡实现步骤

1.配置Zynq核中的SD卡接口

直接点击SD0或者点击MIO Configuration进入配置界面即可
在这里插入图片描述
根据你的需求选择SD卡对应电平,我的板载上是1.8V的电平,MIO40…45引脚都是必选的,至于CD引脚,查阅资料可知是对SD卡是否插入进行检测的引脚,如果你有检测的需求,且板子上也把这个引脚连接到了对应的MIO引脚上,那么你就可以把CD引脚进行一个检测,一般来说CD引脚是上拉到电源处。一旦接入到外壳里面,就会短接到地,通过检测低电平可以判断SD卡是否插入(具体还请看你自己的板子原理图,一般是这样的)。我的板载上面并没有对CD引脚进行检测,故此处不勾选,其他两个WP是检测你的SD卡是否处于写保护状态,如果是高电平就没有办法写入数据进去,power是电源,一般不用设置。
在这里插入图片描述
设置完这一切以后就进入到PS端的设置界面。

2.PS端勾选xilffs

右键你的bsp文件,选择board support package settings,就进入到了这个设计界面,勾选xilffs,同时点击左上角standalone里面的xilffs,进行更详细的配置。
在这里插入图片描述
我一般都是默认配置,但是今天忘记这个茬了,移植的时候发现出不来存储的图像。这个use_lfn默认是0,或者说是false。他这个玩意儿的作用是当你的文件命名字符超过8个字符或者中文字符特殊字符啥的以后,如果为false的话,图片就存储不了。如果这个为true或者1的时候,那么就没什么问题,今天移植的时候查出来最后的问题就是这个。配置完了以后就是咱们的代码单元了。
在这里插入图片描述

3.PS端代码

先引用两个头文件

#include "ff.h"
#include "xdevcfg.h"

把该定义的定义了,image_addr就是你想拍照的图片地址。bmp_addr就是我们拍照的图片地址+偏移的地址,这样相当于开辟出了一个新的存储空间。作用就是防止我们去写入的时候要拍照的那张图片被原先的数据覆盖。

#define image_addr 0x01000000
static FATFS fatfs;
//BMP图片文件头,八位的灰度图需要像素表才行
u8 bmp_head[1078] = {
     0x42,0x4d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x28,0x0,
	 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x08,0x0,0x0,0x0,
	 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x01,
	 0x0,0x0,0x0,0x0,0x0,0x0,0x00,0x00,0x00,0x00,
	 0x01,0x01,0x01,0x00,0x02,0x02,0x02,0x00,0x03,0x03,0x03,0x00,0x04,0x04,0x04,0x00,
	 0x05,0x05,0x05,0x00,0x06,0x06,0x06,0x00,0x07,0x07,0x07,0x00,0x08,0x08,0x08,0x00,
	 0x09,0x09,0x09,0x00,0x0A,0x0A,0x0A,0x00,0x0B,0x0B,0x0B,0x00,0x0C,0x0C,0x0C,0x00,
	 0x0D,0x0D,0x0D,0x00,0x0E,0x0E,0x0E,0x00,0x0F,0x0F,0x0F,0x00,0x10,0x10,0x10,0x00,
	 0x11,0x11,0x11,0x00,0x12,0x12,0x12,0x00,0x13,0x13,0x13,0x00,0x14,0x14,0x14,0x00,
	 0x15,0x15,0x15,0x00,0x16,0x16,0x16,0x00,0x17,0x17,0x17,0x00,0x18,0x18,0x18,0x00,
	 0x19,0x19,0x19,0x00,0x1A,0x1A,0x1A,0x00,0x1B,0x1B,0x1B,0x00,0x1C,0x1C,0x1C,0x00,
	 0x1D,0x1D,0x1D,0x00,0x1E,0x1E,0x1E,0x00,0x1F,0x1F,0x1F,0x00,0x20,0x20,0x20,0x00,
	 0x21,0x21,0x21,0x00,0x22,0x22,0x22,0x00,0x23,0x23,0x23,0x00,0x24,0x24,0x24,0x00,
	 0x25,0x25,0x25,0x00,0x26,0x26,0x26,0x00,0x27,0x27,0x27,0x00,0x28,0x28,0x28,0x00,
	 0x29,0x29,0x29,0x00,0x2A,0x2A,0x2A,0x00,0x2B,0x2B,0x2B,0x00,0x2C,0x2C,0x2C,0x00,
	 0x2D,0x2D,0x2D,0x00,0x2E,0x2E,0x2E,0x00,0x2F,0x2F,0x2F,0x00,0x30,0x30,0x30,0x00,
	 0x31,0x31,0x31,0x00,0x32,0x32,0x32,0x00,0x33,0x33,0x33,0x00,0x34,0x34,0x34,0x00,
	 0x35,0x35,0x35,0x00,0x36,0x36,0x36,0x00,0x37,0x37,0x37,0x00,0x38,0x38,0x38,0x00,
	 0x39,0x39,0x39,0x00,0x3A,0x3A,0x3A,0x00,0x3B,0x3B,0x3B,0x00,0x3C,0x3C,0x3C,0x00,
	 0x3D,0x3D,0x3D,0x00,0x3E,0x3E,0x3E,0x00,0x3F,0x3F,0x3F,0x00,0x40,0x40,0x40,0x00,
	 0x41,0x41,0x41,0x00,0x42,0x42,0x42,0x00,0x43,0x43,0x43,0x00,0x44,0x44,0x44,0x00,
	 0x45,0x45,0x45,0x00,0x46,0x46,0x46,0x00,0x47,0x47,0x47,0x00,0x48,0x48,0x48,0x00,
	 0x49,0x49,0x49,0x00,0x4A,0x4A,0x4A,0x00,0x4B,0x4B,0x4B,0x00,0x4C,0x4C,0x4C,0x00,
	 0x4D,0x4D,0x4D,0x00,0x4E,0x4E,0x4E,0x00,0x4F,0x4F,0x4F,0x00,0x50,0x50,0x50,0x00,
	 0x51,0x51,0x51,0x00,0x52,0x52,0x52,0x00,0x53,0x53,0x53,0x00,0x54,0x54,0x54,0x00,
	 0x55,0x55,0x55,0x00,0x56,0x56,0x56,0x00,0x57,0x57,0x57,0x00,0x58,0x58,0x58,0x00,
	 0x59,0x59,0x59,0x00,0x5A,0x5A,0x5A,0x00,0x5B,0x5B,0x5B,0x00,0x5C,0x5C,0x5C,0x00,
	 0x5D,0x5D,0x5D,0x00,0x5E,0x5E,0x5E,0x00,0x5F,0x5F,0x5F,0x00,0x60,0x60,0x60,0x00,
	 0x61,0x61,0x61,0x00,0x62,0x62,0x62,0x00,0x63,0x63,0x63,0x00,0x64,0x64,0x64,0x00,
	 0x65,0x65,0x65,0x00,0x66,0x66,0x66,0x00,0x67,0x67,0x67,0x00,0x68,0x68,0x68,0x00,
	 0x69,0x69,0x69,0x00,0x6A,0x6A,0x6A,0x00,0x6B,0x6B,0x6B,0x00,0x6C,0x6C,0x6C,0x00,
	 0x6D,0x6D,0x6D,0x00,0x6E,0x6E,0x6E,0x00,0x6F,0x6F,0x6F,0x00,0x70,0x70,0x70,0x00,
	 0x71,0x71,0x71,0x00,0x72,0x72,0x72,0x00,0x73,0x73,0x73,0x00,0x74,0x74,0x74,0x00,
	 0x75,0x75,0x75,0x00,0x76,0x76,0x76,0x00,0x77,0x77,0x77,0x00,0x78,0x78,0x78,0x00,
	 0x79,0x79,0x79,0x00,0x7A,0x7A,0x7A,0x00,0x7B,0x7B,0x7B,0x00,0x7C,0x7C,0x7C,0x00,
	 0x7D,0x7D,0x7D,0x00,0x7E,0x7E,0x7E,0x00,0x7F,0x7F,0x7F,0x00,0x80,0x80,0x80,0x00,
	 0x81,0x81,0x81,0x00,0x82,0x82,0x82,0x00,0x83,0x83,0x83,0x00,0x84,0x84,0x84,0x00,
	 0x85,0x85,0x85,0x00,0x86,0x86,0x86,0x00,0x87,0x87,0x87,0x00,0x88,0x88,0x88,0x00,
	 0x89,0x89,0x89,0x00,0x8A,0x8A,0x8A,0x00,0x8B,0x8B,0x8B,0x00,0x8C,0x8C,0x8C,0x00,
	 0x8D,0x8D,0x8D,0x00,0x8E,0x8E,0x8E,0x00,0x8F,0x8F,0x8F,0x00,0x90,0x90,0x90,0x00,
	 0x91,0x91,0x91,0x00,0x92,0x92,0x92,0x00,0x93,0x93,0x93,0x00,0x94,0x94,0x94,0x00,
	 0x95,0x95,0x95,0x00,0x96,0x96,0x96,0x00,0x97,0x97,0x97,0x00,0x98,0x98,0x98,0x00,
	 0x99,0x99,0x99,0x00,0x9A,0x9A,0x9A,0x00,0x9B,0x9B,0x9B,0x00,0x9C,0x9C,0x9C,0x00,
	 0x9D,0x9D,0x9D,0x00,0x9E,0x9E,0x9E,0x00,0x9F,0x9F,0x9F,0x00,0xA0,0xA0,0xA0,0x00,
	 0xA1,0xA1,0xA1,0x00,0xA2,0xA2,0xA2,0x00,0xA3,0xA3,0xA3,0x00,0xA4,0xA4,0xA4,0x00,
	 0xA5,0xA5,0xA5,0x00,0xA6,0xA6,0xA6,0x00,0xA7,0xA7,0xA7,0x00,0xA8,0xA8,0xA8,0x00,
	 0xA9,0xA9,0xA9,0x00,0xAA,0xAA,0xAA,0x00,0xAB,0xAB,0xAB,0x00,0xAC,0xAC,0xAC,0x00,
	 0xAD,0xAD,0xAD,0x00,0xAE,0xAE,0xAE,0x00,0xAF,0xAF,0xAF,0x00,0xB0,0xB0,0xB0,0x00,
	 0xB1,0xB1,0xB1,0x00,0xB2,0xB2,0xB2,0x00,0xB3,0xB3,0xB3,0x00,0xB4,0xB4,0xB4,0x00,
	 0xB5,0xB5,0xB5,0x00,0xB6,0xB6,0xB6,0x00,0xB7,0xB7,0xB7,0x00,0xB8,0xB8,0xB8,0x00,
	 0xB9,0xB9,0xB9,0x00,0xBA,0xBA,0xBA,0x00,0xBB,0xBB,0xBB,0x00,0xBC,0xBC,0xBC,0x00,
	 0xBD,0xBD,0xBD,0x00,0xBE,0xBE,0xBE,0x00,0xBF,0xBF,0xBF,0x00,0xC0,0xC0,0xC0,0x00,
	 0xC1,0xC1,0xC1,0x00,0xC2,0xC2,0xC2,0x00,0xC3,0xC3,0xC3,0x00,0xC4,0xC4,0xC4,0x00,
	 0xC5,0xC5,0xC5,0x00,0xC6,0xC6,0xC6,0x00,0xC7,0xC7,0xC7,0x00,0xC8,0xC8,0xC8,0x00,
	 0xC9,0xC9,0xC9,0x00,0xCA,0xCA,0xCA,0x00,0xCB,0xCB,0xCB,0x00,0xCC,0xCC,0xCC,0x00,
	 0xCD,0xCD,0xCD,0x00,0xCE,0xCE,0xCE,0x00,0xCF,0xCF,0xCF,0x00,0xD0,0xD0,0xD0,0x00,
	 0xD1,0xD1,0xD1,0x00,0xD2,0xD2,0xD2,0x00,0xD3,0xD3,0xD3,0x00,0xD4,0xD4,0xD4,0x00,
	 0xD5,0xD5,0xD5,0x00,0xD6,0xD6,0xD6,0x00,0xD7,0xD7,0xD7,0x00,0xD8,0xD8,0xD8,0x00,
	 0xD9,0xD9,0xD9,0x00,0xDA,0xDA,0xDA,0x00,0xDB,0xDB,0xDB,0x00,0xDC,0xDC,0xDC,0x00,
	 0xDD,0xDD,0xDD,0x00,0xDE,0xDE,0xDE,0x00,0xDF,0xDF,0xDF,0x00,0xE0,0xE0,0xE0,0x00,
	 0xE1,0xE1,0xE1,0x00,0xE2,0xE2,0xE2,0x00,0xE3,0xE3,0xE3,0x00,0xE4,0xE4,0xE4,0x00,
	 0xE5,0xE5,0xE5,0x00,0xE6,0xE6,0xE6,0x00,0xE7,0xE7,0xE7,0x00,0xE8,0xE8,0xE8,0x00,
	 0xE9,0xE9,0xE9,0x00,0xEA,0xEA,0xEA,0x00,0xEB,0xEB,0xEB,0x00,0xEC,0xEC,0xEC,0x00,
	 0xED,0xED,0xED,0x00,0xEE,0xEE,0xEE,0x00,0xEF,0xEF,0xEF,0x00,0xF0,0xF0,0xF0,0x00,
	 0xF1,0xF1,0xF1,0x00,0xF2,0xF2,0xF2,0x00,0xF3,0xF3,0xF3,0x00,0xF4,0xF4,0xF4,0x00,
	 0xF5,0xF5,0xF5,0x00,0xF6,0xF6,0xF6,0x00,0xF7,0xF7,0xF7,0x00,0xF8,0xF8,0xF8,0x00,
	 0xF9,0xF9,0xF9,0x00,0xFA,0xFA,0xFA,0x00,0xFB,0xFB,0xFB,0x00,0xFC,0xFC,0xFC,0x00,
	 0xFD,0xFD,0xFD,0x00,0xFE,0xFE,0xFE,0x00,0xFF,0xFF,0xFF,0x00
};
//BMP图片各参数偏移地址
UINT *bf_size    = (UINT *)(bmp_head + 0x2);
UINT *bmp_width  = (UINT *)(bmp_head + 0x12);
UINT *bmp_height = (UINT *)(bmp_head + 0x16);
UINT *bmp_size   = (UINT *)(bmp_head + 0x22);
//BMP图片编号
int  pic_cnt = 0;

//抓拍的图片显存地址
unsigned int const bmp_addr = (image_addr + 0x10000000);
//frame buffer的起始地址
unsigned int const frame_buffer_addr = image_addr;
//将显存图像以BMP格式写入SD卡
void write_sd_bmp(u8 *frame);

写入图片到SD卡的函数write_sd_bmp为

//向SD卡中写BMP图片
void write_sd_bmp(u8 *frame)
{
	FIL 	fil;			//文件对象
	UINT 	bw;				//写文件函数返回已写入的字节数
	char    pic_name[20];	//字符串,用于存储BMP文件名
	//给BMP图片的文件名编号
	sprintf(pic_name,"picture %04u.bmp",pic_cnt);
	//打开BMP文件,如果不存在则创建该文件
	f_open(&fil,pic_name,FA_CREATE_ALWAYS | FA_WRITE);
	//移动文件读写指针到文件开头
	f_lseek(&fil,0);
	//写入BMP文件头
	f_write(&fil,bmp_head,1078,&bw);
	//写入抓拍的图片
	f_write(&fil,frame,*bmp_size,&bw);
	//关闭文件
	f_close(&fil);
	xil_printf("write %s done! \n\r",pic_name);
}

所有的代码已经准备完毕,接下来就是到我们的主函数中调用。在主函数的初始化中,我们需要初始化以下的函数。这些初始化的内容是添加到你自己的初始化前面,加入进去即可。

int main()
{
	unsigned int rd_fram_addr;	//VDMA读通道操作的帧缓存地址
	//SD卡协议定义
	*bmp_width  = 1280;
	*bmp_height = 720;
	*bmp_size   = 1280 * 720;
	*bf_size    = *bmp_size + 1078;
	//挂载文件系统
	f_mount(&fatfs,"",1);
    return 0;
}

调用的格式为以下,那么这个wr_index_one是我的帧缓存号,我设置了三帧缓存,所以根据wr_index_one的大小,比如为3,代表我正在写入第三帧缓存,这个时候我就去读取前一帧,也就是第二帧。如果为1的话,我就去读第三帧,也就是21280720的一个帧偏移地址,我存储图片的基地址是0x01000000。如果你们有确认的地址了,就直接把确定的地址赋值给rd_fram_addr即可。最终通过write_sd_bmp函数将图片数据写入到bmp文件中,同时pic_cnt加1,相当于图片编号加1。

if(wr_index_one>1)
{
	rd_fram_addr = 0x01000000+(wr_index_one-2)*1280*720;
}
else
{
	rd_fram_addr = 0x01000000+2*1280*720;
}
//将当前帧的图像拷贝到抓拍图片缓存区域
memcpy((void *)bmp_addr,(void *)rd_fram_addr,1280*720);
//将抓拍图片缓存区域中的图像以BMP格式写入SD卡
write_sd_bmp((u8 *)bmp_addr);
pic_cnt++;
xil_printf("image_memory_status_sucess\r\n");

4.读卡器读取SD卡结果呈现

我大概是以30帧的速率去拍,因此很短的时间内就存储了比较多的图片,可以看到编号是以此递增的,也就是提到的pic_cnt,跟我们的命名规范有关系,你可以根据自己的需求去命名,在这个基础上去改动。
在这里插入图片描述


总结

今天在新板子上把以太网和SD卡移植成功了,好心情。临近正午,太阳火热,就去了食堂吃饭,吃的牛肉+韭菜炒蛋,我发誓,这韭菜炒蛋我再吃我就是猪,难吃死了,破坏我的好心情,下次再也不吃韭菜炒蛋了。又贵,两个加在一起17.5,真是一次不愉快的用餐体验~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1363788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网安入门09-Sql注入(绕过方法梳理)

ByPass SQL注入ByPass是指攻击者通过各种手段绕过应用程序中已经实施的SQL注入防御措施,例如输入恶意数据、修改请求头等方式,绕过过滤、转义、限制等操作,从而成功地执行恶意SQL语句。攻击者使用SQL注入ByPass技术可以让应用程序的防御措施…

为什么Java中“1000==1000”为false,而”100==100“为true?

大家好,我是可乐。 在日常编程中,我们经常遇到一些看似简单却隐藏着复杂逻辑的问题。 比如,你是否想过为什么在 Java 中表达式10001000会返回 false,而 100100 却返回 true 呢? Integer a 100; Integer b 100; Sy…

王国维的人生三境界,这一生至少当一次傻瓜

一、人生三境界 古今之成大事业、大学问者,必经过三种之境界。“昨夜西风凋碧树,独上高楼,望尽天涯路。”此第一境也。“衣带渐宽终不悔,为伊消得人憔悴。”此第二境也。“众里寻他千百度,蓦然回首,那人却…

双向数据绑定详细解析(超详细)

文章目录 一、什么是双向绑定二、双向绑定的原理是什么理解ViewModel 三、实现双向绑定实现编译Compile依赖收集 参考文献 一、什么是双向绑定 我们先从单向绑定切入单向绑定非常简单,就是把Model绑定到View,当我们用JavaScript代码更新Model时&#xf…

永磁同步电机的磁场定向控制

目录 概述 通过系统仿真验证行为 探索模型架构 生成用于集成到嵌入式应用程序的控制器 C 代码 指定控制器模型的参考行为 创建 PIL 实现 准备用于 PIL 测试的控制器模型 测试生成的代码的行为和执行时间 结论 此示例说明从电机控制算法生成 C 代码并验证其编译行为和执…

AcWing 998. 起床困难综合症

原题链接 其实上面这一堆就是想说,输入 n,m以及 n 个数和该数所对应的运算,其中运算包括有 与、或、异或 三种,真正的问题就是在所有不大于 m 的数(非负数)中,对给定的 n 个数都按该数所对应的运算运算一遍…

GFS论文解读(一)——设计概述

介绍 在当今大数据时代,分布式文件系统已经成为处理海量数据的重要工具。而在这个领域中,「GFS(Google File System)」论文无疑是一篇具有里程碑意义的文献。GFS 由 Google 公司发表于 2003 年,它介绍了 Google 公司内…

C练习——肇事卡车车牌号

题目: 一辆卡车违反交通规则,撞人后逃跑。现场有3人目击事件,但没有记住车牌号,只记住了车号的一些特征。 甲说:“牌照前两位数字是相同的”,乙说:“牌照的后两位数字是相同的,但与…

centos通过yum安装redis

1. 安装yum添加epel源(此步根据环境,如果有源则可跳过,在阿里去可跳过) yum install epel-release 2 使用yum安装Redis yum install redis 出现如下图所示的内容 3 Redis配置 vim /etc/redis.conf :set number(显示行号) 61行&#x…

Flume基础知识(十一):Flume自定义接口

1)案例需求 使用 Flume 采集服务器本地日志,需要按照日志类型的不同,将不同种类的日志发往不同的分析系统。 2)需求分析 在实际的开发中,一台服务器产生的日志类型可能有很多种,不同类型的日志可能需要 发送…

在群晖NAS上搭建私有部署笔记软件——Blossom

一、Blossom 简介 Blossom 是一个需要私有部署的笔记软件,虽然本身定位是一个云端软件,但你仍然可以在本地部署,数据和图片都将保存在本地,不依赖任何的图床或者对象存储。 Blossom | Blossom (wangyunf.com)https://www.wangyun…

Zoho SalesIQ:提高品牌在社交媒体上参与度的实用指南

在当今快节奏的数字世界中,品牌参与度变得比以往任何时候都更加重要。社交媒体在企业与客户互动方面发挥着至关重要的作用,了解如何很好地利用社交媒体来增强品牌参与度至关重要。 正如我们在之前的博客中所了解到的,品牌参与是指在品牌与其…

企业数据库安全管理规范

1.目的 为规范数据库系统安全使用活动,降低因使用不当而带来的安全风险,保障数据库系统及相关应用系统的安全,特制定本数据库安全管理规范。 2.适用范围 本规范中所定义的数据管理内容,特指存放在信息系统数据库中的数据。 本…

原文件名自动编号方法:简单易懂的文件重命名规则

当处理大量文件时,例如图片、文档或其他类型的文件,经常要给它们重新命名,以便于管理和查找。一种常见的方法是使用自动编号,这样可以从001开始,一直编号到最后的文件。这种方法既简单又高效,且易于理解。下…

【读书】《白帽子讲web安全》个人笔记Ⅱ-1

目录 第二篇 客户端脚本安全 第2章 浏览器安全 2.1同源策略 2.2浏览器沙箱 2.3恶意网址拦截 2.4高速发展的浏览器安全 第二篇 客户端脚本安全 第2章 浏览器安全 近年来随着互联网的发展,人们发现浏览器才是互联网最大的入口,绝大多数用户使用互联…

UV机-理光G5六彩一白一光油配置

UV机-理光G5六彩一白一光油配置

【Navigation】global_planner 源码解析

全局规划器 global_planner 功能包 文章目录 global_planner 功能包结构1、plan_node.cpp2、planner_core.cpp3、astar.cpp4、dijkstra.cpp5、quadratic_calculator.cpp6、grid_path.cpp7、gradient_path.cpp8、orientation_filter.cpp全局规划大都基于静态地图进行规划,产生路…

加密的手机号如何模糊查询?

1 一次加载到内存 实现这个功能,我们第一个想到的办法可能是:把个人隐私数据一次性加载到内存中缓存起来,然后在内存中先解密,然后在代码中实现模糊搜索的功能。 这样做的好处是:实现起来比较简单,成本非常…

约数个数和约数之和算法总结

知识概览 约数个数 由算数基本定理 可得对于N的任何一个约数d,有 因为N的每一个约数和~的一种选法是一一对应的,根据乘法原理可得, 一个数的约数个数为 约数之和 一个数的约数之和公式为 多项式乘积的每一项为 正好对应的是一个数的每一个约…

计算机Java项目|Springboot疫情网课管理系统

项目编号:L-BS-ZXBS-07 一,环境介绍 语言环境:Java: jdk1.8 数据库:Mysql: mysql5.7 应用服务器:Tomcat: tomcat8.5.31 开发工具:IDEA或eclipse 二,项目简介 疫情网课也都将通过计算机…