(41)STM32——外部SRAM实验笔记

news/2024/5/1 13:07:20/文章来源:https://blog.csdn.net/weixin_66578482/article/details/126914767

目录

学习目标

成果展示  

硬件知识

特点

功能框图

读时序

​编辑写时序

FSMC驱动 

寄存器

闪存片选控制寄存器

硬件

 配置

代码 

总结 


学习目标

        今天我们要学习的是有关外部SRAM实验,其实F4内部也是有一个192K字节的SRAM的,相比于51的512个字节来说,实在是好太多了,但是因为32可能需要跑一些需要大内存的场景的话可能就不够用了。所以我们就需要使用外部SRAM芯片来实现相应功能,这里我们使用的是IS62WV51216,容量为1M,这样就能满足大多数情况了。个人觉得手机电脑什么的内存应该也是使用这样的方式来组成的,但是没有过多了解,只是一个猜测。

成果展示  

硬件知识

        IS62WV51216 是 ISSI(Integrated Silicon Solution, Inc)公司生产的一颗 16 位宽 512K(512*16 ,即 1M 字节)容量的 CMOS 静态内存芯片。

特点

  1. 高速。具有 45ns/55ns 访问速度。
  2. 低功耗。
  3. TTL 电平兼容。
  4. 全静态操作。不需要刷新和时钟电路。
  5. 三态输出。
  6. 字节控制功能。支持高/低字节控制。

功能框图

        图中 A0~18 为地址线,总共 19 根地址线(即 2^19=512K,1K=1024);IO0~15 为数据线,总共 16 根数据线。CS2 和 CS1 都是片选信号,不过 CS2 是高电平有效 CS1 是低电平有效(不过我们没有用到CS2,只使用了CS1);OE是输出使能信号(读信号);WE 为写使能信号;UB 和 LB 分别是高字节控制和低字节控制信号,这个到后面会有所介绍。

读时序

        我们重点来介绍一下其中几个时序,首先是读周期时序(tRC),我们是55ns,然后地址建立时间(tAA)为55ns(Max),tDOE为25ns(Max)。我们使用的是55ns的芯片,其他时间的具体值如下表所示: 

写时序

        这个和前面一样,就不做过多介绍了。写周期时间(tWC),地址建立时间(tSA),WE脉宽(tPWE)。

FSMC驱动 

        这个其实在LCD屏的时候介绍过,在此就简单的介绍一下,FSMC驱动外部SRAM时,外部SRAM的控制一般有: 地址线(如A0~A25数据线(如D0~D15)、写信号(WE,即WR)、读信号(OE,即RD)、片选信号(CS),如果SRAM支持字节控制,那么还有UB/LB信号。
        而IS62WV51246的信号我们在前面介绍过,包括: I/O0~I/O15、A0~A18、OE、WE、CS、UB、LB等,我们将这些信号依次连接STM32 FSMC接口的D0~D15、A0~A18、OE、WE、CS、UB、LB等信号即可。

        STM32F4 的 FSMC 支持 8/16/32 位数据宽度,我们这里用到的 LCD 是 16 位宽度的,所以在设置的时候,选择 16 位宽就 OK 了。我们再来看看 FSMC 的外部设备地址映像,STM32F4 的 FSMC 将外部存储器划分为固定大小为 256M 字节的四个存储块,如图所示:

        这里 HADDR 是内部 AHB 地址 总线,其 中 HADDR[25:0] 来自外部存储器地址 FSMC_A[25:0],而 HADDR[26:27]对 4 个区进行寻址。如表所示: 

        当 Bank1 接的是 16 位宽度存储器的时候:HADDR[25:1]-> FSMC_A [24:0]。 当 Bank1 接的是 8 位宽度存储器的时候:HADDR[25:0]-> FSMC_A [25:0]。

 

 

        这个是读写时序,就不做详细介绍,LCD里面都有。  

寄存器

        也不做详细介绍,就讲解几个重要寄存器。

闪存片选控制寄存器

硬件

  • A[0:18]接 FMSC_A[0:18](不过顺序错乱了)
  • D[0:15]接 FSMC_D[0:15]
  • UB 接 FSMC_NBL1
  • LB 接 FSMC_NBL0
  • OE 接 FSMC_OE
  • WE 接 FSMC_WE
  • CS 接 FSMC_NE3

 配置

  1. 使能 FSMC 时钟,并配置 FSMC 相关的 IO 及其时钟使能。
  2. 设置 FSMC BANK1 区域 3 的相关寄存器。
  3. 使能 BANK1 区域 3。

代码 

// sram.c
#include "sram.h"	  
#include "usart.h"	     	 //使用NOR/SRAM的 Bank1.sector3,地址位HADDR[27,26]=10 
//对IS61LV25616/IS62WV25616,地址线范围为A0~A17 
//对IS61LV51216/IS62WV51216,地址线范围为A0~A18
#define Bank1_SRAM3_ADDR    ((u32)(0x68000000))	//初始化外部SRAM
void FSMC_SRAM_Init(void)
{	GPIO_InitTypeDef  GPIO_InitStructure;FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;FSMC_NORSRAMTimingInitTypeDef  readWriteTiming; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOG, ENABLE);//使能PD,PE,PF,PG时钟  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);//使能FSMC时钟  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//PB15 推挽输出,控制背光GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化 //PB15 推挽输出,控制背光GPIO_InitStructure.GPIO_Pin = (3<<0)|(3<<4)|(0XFF<<8);//PD0,1,4,5,8~15 AF OUTGPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化  GPIO_InitStructure.GPIO_Pin = (3<<0)|(0X1FF<<7);//PE0,1,7~15,AF OUTGPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化  GPIO_InitStructure.GPIO_Pin = (0X3F<<0)|(0XF<<12); 	//PF0~5,12~15GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化  GPIO_InitStructure.GPIO_Pin =(0X3F<<0)| GPIO_Pin_10;//PG0~5,10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化 GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_FSMC);//PD0,AF12GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_FSMC);//PD1,AF12GPIO_PinAFConfig(GPIOD,GPIO_PinSource4,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOD,GPIO_PinSource8,GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOD,GPIO_PinSource9,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource10,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource11,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource13,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC);//PD15,AF12GPIO_PinAFConfig(GPIOE,GPIO_PinSource0,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource1,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource7,GPIO_AF_FSMC);//PE7,AF12GPIO_PinAFConfig(GPIOE,GPIO_PinSource8,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource10,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource11,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource12,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource13,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource14,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOE,GPIO_PinSource15,GPIO_AF_FSMC);//PE15,AF12GPIO_PinAFConfig(GPIOF,GPIO_PinSource0,GPIO_AF_FSMC);//PF0,AF12GPIO_PinAFConfig(GPIOF,GPIO_PinSource1,GPIO_AF_FSMC);//PF1,AF12GPIO_PinAFConfig(GPIOF,GPIO_PinSource2,GPIO_AF_FSMC);//PF2,AF12GPIO_PinAFConfig(GPIOF,GPIO_PinSource3,GPIO_AF_FSMC);//PF3,AF12GPIO_PinAFConfig(GPIOF,GPIO_PinSource4,GPIO_AF_FSMC);//PF4,AF12GPIO_PinAFConfig(GPIOF,GPIO_PinSource5,GPIO_AF_FSMC);//PF5,AF12GPIO_PinAFConfig(GPIOF,GPIO_PinSource12,GPIO_AF_FSMC);//PF12,AF12GPIO_PinAFConfig(GPIOF,GPIO_PinSource13,GPIO_AF_FSMC);//PF13,AF12GPIO_PinAFConfig(GPIOF,GPIO_PinSource14,GPIO_AF_FSMC);//PF14,AF12GPIO_PinAFConfig(GPIOF,GPIO_PinSource15,GPIO_AF_FSMC);//PF15,AF12GPIO_PinAFConfig(GPIOG,GPIO_PinSource0,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOG,GPIO_PinSource1,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOG,GPIO_PinSource2,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOG,GPIO_PinSource3,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOG,GPIO_PinSource4,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOG,GPIO_PinSource5,GPIO_AF_FSMC);GPIO_PinAFConfig(GPIOG,GPIO_PinSource10,GPIO_AF_FSMC);// 读写时序	  readWriteTiming.FSMC_AddressSetupTime = 0x00;	 //地址建立时间(ADDSET)为1个HCLK 1/36M=27nsreadWriteTiming.FSMC_AddressHoldTime = 0x00;	 //地址保持时间(ADDHLD)模式A未用到	readWriteTiming.FSMC_DataSetupTime = 0x08;		 数据保持时间(DATAST)为9个HCLK 6*9=54ns	 	 readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;readWriteTiming.FSMC_CLKDivision = 0x00;readWriteTiming.FSMC_DataLatency = 0x00;readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;	 //模式A FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;//  这里我们使用NE3 ,也就对应BTCR[4],[5]。FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 地址复用没用到FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM;  //SRAM   FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//存储器数据宽度为16bit  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;// 低电平有效FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;   FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;	//存储器写使能 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; // 读写使用相同的时序FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming;FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &readWriteTiming; //读写同样时序FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //初始化FSMC配置FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);  // 使能BANK1区域3										  }//在指定地址(WriteAddr+Bank1_SRAM3_ADDR)开始,连续写入n个字节.
//pBuffer:字节指针
//WriteAddr:要写入的地址
//n:要写入的字节数
void FSMC_SRAM_WriteBuffer(u8* pBuffer,u32 WriteAddr,u32 n)
{for(;n!=0;n--)  {										    *(vu8*)(Bank1_SRAM3_ADDR+WriteAddr)=*pBuffer;	  WriteAddr++;pBuffer++;}   
}																			    
//在指定地址((WriteAddr+Bank1_SRAM3_ADDR))开始,连续读出n个字节.
//pBuffer:字节指针
//ReadAddr:要读出的起始地址
//n:要写入的字节数
void FSMC_SRAM_ReadBuffer(u8* pBuffer,u32 ReadAddr,u32 n)
{for(;n!=0;n--)  {											    *pBuffer++=*(vu8*)(Bank1_SRAM3_ADDR+ReadAddr);    ReadAddr++;}  
} 

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"  
#include "sram.h"   //测试用数组,定义一个数组,每个数占4个字节,数组包含250000个值,采用绝对地址定义,数组的起始地址在0x68000000。
u32 testsram[250000] __attribute__((at(0X68000000)));//外部内存测试(最大支持1M字节内存测试)	    
void fsmc_sram_test(u16 x,u16 y)
{  u32 i=0;  	  u8 temp=0;	   u8 sval=0;	//在地址0读到的数据	  				   printf ("Ex Memory Test:   0KB"); printf ("\r\n\r\n");//每隔4K字节,写入一个数据,总共写入256个数据,刚好是1M字节for(i=0;i<1024*1024;i+=4096){FSMC_SRAM_WriteBuffer(&temp,i,1);temp++;}//依次读出之前写入的数据,进行校验		  for(i=0;i<1024*1024;i+=4096) {FSMC_SRAM_ReadBuffer(&temp,i,1);if(i==0)sval=temp;else if(temp<=sval)break;//后面读出的数据一定要比第一次读到的数据大.	   		   printf ("Ex Memory Test:   %d KB",(u16)(temp-sval+1)*4);//显示内存容量  printf ("\r\n\r\n");}					 
}	int main(void)
{        u8 key;		 u8 i=0;	     u32 ts=0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168);  //初始化延时函数uart_init(115200);		//初始化串口波特率为115200LED_Init();					//初始化LEDKEY_Init();					//按键初始化 FSMC_SRAM_Init();			//初始化外部SRAM    printf ("KEY0:Test Sram");printf ("KEY1:TEST Data"); for(ts=0;ts<250000;ts++)testsram[ts]=ts;//预存测试数据	 while(1){	key=KEY_Scan(0);//不支持连按	if(key==KEY0_PRES)fsmc_sram_test(60,170);//测试SRAM容量else if(key==KEY1_PRES)//打印预存测试数据{for(ts=0;ts<250000;ts++){printf ("%d",testsram[ts]);//显示测试数据	printf ("\r\n\r\n");}				}else delay_ms(10);   i++;if(i==20)//DS0闪烁.{i=0;LED0=!LED0;}}
}

总结 

        个人感觉这块知识应该还可以再深入学习一点,目前感觉就是皮毛。 

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本周大新闻|索尼PS VR2体验首次公开;Meta Quest Pro开箱视频曝光

本周大新闻&#xff0c;AR方面&#xff0c;沃尔玛App加入AR试穿功能&#xff1b;谷歌搜索AR新增60个行星、卫星模型&#xff1b;Niantic宣布与漫威娱乐合作打造新款LBS AR游戏&#xff1b;AR眼镜ActiveLook打通Apple Watch。 VR方面&#xff0c;索尼PS VR2体验首次公开&#x…

2022年笔试知识总结展望

应届生的笔试知识总结&#xff0c;温故而知新&#xff0c;看看知识加深印象&#xff0c;希望学得更好&#xff0c;有个好结果。 目录 1. TCP的拥塞控制 2. position属性 3. [‘1‘, ‘2‘, ‘3‘].map(parseInt) 输出结果 4. 排序算法的稳定性分析 1&#xff09;稳定的排…

事件研究法与其应用(2)---Excel实操步骤

我们借着学习事件研究法的应用,可以用Excel和Stata等软件进行操作。 今天这主要是利用EXCEL计算累积异常收益率。 在正式开展实操之前,我们先回顾一下事件研究法的步骤(尤其是我们写作论文的时候): 事件研究法计算步骤: 1. 获取数据,定义事件期 2.计算估计期间个股与市…

npm yarn 报错

目录npm yarn报错yarn: 无法加载文件 npm yarn报错 yarn: 无法加载文件 win10系统,yarn : 无法加载文件 C:\Users\丽丽小可爱\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 ... 导致此错误的原因是,PowerShell 执行策略,默认设置为Rest…

JSON 数据类型转换工具

简介 本文介绍一款数据类型转换工具&#xff0c;可以将JSON格式数据转换成YAML、MYSQL、XML、TOML、JavaScript等数据类型。 背景 在日常的开发工程中&#xff0c;我们经常使用JSON表达数据&#xff0c;但有些时候我们需要使用YAML、JavaScript等语言表达数据。因此&#xf…

HTML + HTTP请求 +CSS知识点

文章目录HTML1.HTML元素2.HTML页面3.常见元素1&#xff09;文本2&#xff09;多媒体3&#xff09;表单作用与语法常见表单项案例体验4.HTTP请求1&#xff09;请求组成2&#xff09; 请求方式与数据格式get 请求示例post 请求&#xff08;默认格式&#xff09;示例json 请求&…

Python必知必会 os 模块详解

文章目录Python os 模块os模块的常用操作os.path模块os.open()模块Python os 模块 os是“operating system”的缩写&#xff0c;os模块提供各种 Python 程序与操作系统进行交互的接口&#xff0c;使用os模块&#xff0c;一方面可以方便地与操作系统进行交互&#xff0c;另一方…

【SLAM】4李群李代数

文章目录4.1.基础群李代数的引出李代数李代数so(3)\mathfrak{so}(3)so(3)李代数se(3)\mathfrak{se}(3)se(3)4.2.指数与对数映射4.2.1.SO(3)SO(3)SO(3)指数映射4.2.2.SE(3)SE(3)SE(3)的指数映射4.3.李代数求导与扰动模型4.3.1.BCH公式&近似形式4.3.2.李代数求导4.3.4.扰动模…

redis下载与安装(Linux环境下)

用的是阿里云的深度os Linux系统 一&#xff0c;下载 键入命令&#xff1a; wget http://download.redis.io/releases/redis-6.2.1.tar.gz 检查时候有gcc环境 gcc --version 若有gcc环境会有类似于下图的提示 没有则执行&#xff1a; yum install gcc 下载完毕之后&…

JavaEE基础知识

文章目录前言计算机的基本组成CPUCPU运行程序的过程CPU的构造操作系统操作系统功能常见的操作系统操作系统的具体组成操作系统的进程管理(重点)操作系统安排程序进程PCB(进程管理块)进程调度关于进程的几个属性虚拟地址空间线程(thread [θred] )前言 之前已经学过很多的知识,…

企业薪资系统

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;

PostgreSQL - 基于pg_basebackup实现主从流复制

PostgreSQL - 基于pg_basebackup实现主从流复制1 数据库节点2 安装PostgreSQL2.1 创建postgres用户2.2 安装PostgreSQL3 配置主节点4 配置从节点5 验证主从同步1 数据库节点 节点ip节点角色192.168.163.133主节点192.168.163.134从节点 2 安装PostgreSQL 2.1 创建postgres用户…

计算机网络——数据链路层(滑动窗口协议: 选择重传)(点对点协议 PPP)

目录 滑动窗口协议: 选择重传 选择重传协议 选择重传协议 点对点协议 PPP PPP 的主要特点 PPP 协议有三个组成部分 PPP 协议的帧格式 PPP 有一个 2 个字节的协议字段 透明传输问题 PPP 的字符填充 PPP 的工作状态 滑动窗口协议: 选择重传 选择重传协议 GBN相对简单&a…

【周末闲谈】谈谈数学转码这一年来的体会与反思

——我们走了太远&#xff0c;以至于忘了为何出发 前言 笔者本科读的是数学专业&#xff0c;就是每天和数学分析、高等代数、概率论、随机过程等等这些理论打交道的专业&#xff0c;这个专业出来工作好像一般有两个方向就是金融和计算机&#xff0c;我选择了计算机方向。主要…

2022 第五届 浙江省大学生网络与信息安全竞赛技能赛 预赛 Writeup,5题

文章目录1、Web&#xff1a;nisc_easyweb2、Web&#xff1a;nisc_学校门户网站3、Web&#xff1a;吃豆人吃豆魂4、MISC&#xff1a;好怪哦5、RE&#xff1a;ManyCheck1、Web&#xff1a;nisc_easyweb 题目描述&#xff1a; 打开网站&#xff0c;是一个php的初始页面。 思路…

springboot+微信小程序的点餐系统(开题报告+论文+答辩PPT+源码)

技术架构 SprongBootMysql微信小程序 简介 本点餐小程序是使用Java/JavaScript编程语言开发的&#xff0c;存储数据方面则用到了MySQL数据库。顾客可以使用小程序扫码功能扫描餐厅桌角的二维码就座&#xff0c;也可以点击排号等位由后台工作人员安排就座&#xff1b;通过首页…

通关GO语言10 Context:你必须掌握的多线程并发控制神器

在上一节课中我留了一个作业&#xff0c;也就是让你自己练习使用 sync.Map&#xff0c;相信你已经做出来了。现在我为你讲解 sync.Map 的方法。 Store&#xff1a;存储一对 key-value 值。 Load&#xff1a;根据 key 获取对应的 value 值&#xff0c;并且可以判断 key 是否存在…

GO面试题集锦

GO面试题集锦 目录GO面试题集锦slice 扩容机制slice 为什么不是线程安全的map 底层原理map 扩容机制map 遍历为什么无序map 为什么不是线程安全的Map 如何查找Map 冲突解决方式Map 负载因子为什么是 6.5Map 和 Sync.Map 哪个性能好Channel 底层实现原理Channel 有什么特点Chann…

docker实战教程(七):镜像的分层概念

联合文件系统(UnionFS) 联合文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。联合文件系统是docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像…

Zookeeper简介

文章目录Zookeeper简介zookeeper能做什么zookeeper的数据模型zookeeper工作机制zookeeper集群的选举机制1、第一次启动选举机制2、非第一次启动选举机制搭建zookeeper的集群Zookeeper简介 zookeeper能做什么 master节点选举&#xff1a;主节点挂了以后&#xff0c;从节点就会…