嵌入式板级系统设计【课设】

news2024/11/25 2:33:45

笔记【嵌入式板级系统设计】

  • 前言
  • 版权
  • 笔记【嵌入式板级系统设计】
    • 资料学习
      • 面包板焊接注意
      • 焊接教程
    • 焊接电路板
    • 基础代码
      • GPIO 外部中断 定时中断 三合一
      • 串口
    • 综合实验 风扇控制系统
    • 下板
      • 三合一
      • 窗口
      • 综合实验
  • 最后

前言

2023-11-20 08:49:57

以下内容源自《【创作模板五】》
仅供学习交流使用

版权

禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是https://jsss-1.blog.csdn.net
禁止其他平台发布时删除以上此话

笔记【嵌入式板级系统设计】

资料学习

面包板焊接注意

在这里插入图片描述

P1:mini USB
JP4:usb转串口
U1:电源
U3:
R1~7:电阻 规格 (型号阻值)
LED1~4:灯 正负极
按钮:正反

焊接教程

老司机焊接纯干货分享,让你焊接不迷路,很适合零基础小白

焊接电路板

基础代码

GPIO 外部中断 定时中断 三合一

/****************************************  2015-05-28  **************************************************
**                               
**                               				XY Embeded Lib.
**                               
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2015-05-28
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			ZQL
** Created date:		2015-05-28
** Version:					1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:			ZQL
** Modified date:		2015-05-28
** Version:
** Descriptions:		GPIO输出实验,控制LED1闪烁。
**
********************************************************************************************************/
#include "lpc213x.h"
#include "TypeDef.h"
extern	void IRQEnable(void);
extern	void IRQDisable(void);
extern	void FIQEnable(void);
extern	void FIQDisable(void);

const uint32 LED1 = (1 << 17);	// P1.18控制LED1,低电平点亮 
const uint32 LED2 = (1 << 18);	// P1.18控制LED1,低电平点亮 
const uint32 LED3 = (1 << 19);	// P1.18控制LED1,低电平点亮 
const uint32 LED4 = (1 << 20);	// P1.18控制LED1,低电平点亮
const uint32 LEDS = LED1 | LED2 | LED3 | LED4;	// P1.18控制LED1,低电平点亮
const uint32 LEDS1 = LED1 | LED3;
const uint32 LEDS2 = LED2 | LED4;

const uint32 KEY1 = (1 << 16);	// P1.18控制LED1,低电平点亮 
const uint32 KEY2 = (1 << 14);	// P1.18控制LED1,低电平点亮 
const uint32 KEY3 = (1 << 15);	// P1.18控制LED1,低电平点亮 
const uint32 KEYS = (0x07<<14);

uint32 j;

//定时器
#define Fosc  11059200					// 开发板外时钟频率
#define Fcclk (5*Fosc)				// Keil 默认的CPU时钟设置
#define Fpclk (Fcclk/4)				// Keil 默认的DEV时钟设置

/*
*********************************************************************************************************
** 函数名称 :DelayNS()
** 函数功能 :长软件延时
** 入口参数 :dly	延时参数,值越大,延时越久
** 出口参数 :无
*********************************************************************************************************
*/
void DelayNS (uint32 dly)
{
	uint32 i;
	
	for ( ; dly>0; dly--)
		for (i=0; i<50000; i++);
}

void __irq IRQ_Eint0_ISR (void)
{
	volatile uint32 Vkey=0;
	IO0SET = LEDS;
		
	/* 	等待外部中断信号恢复为高电平,若信号保持为低电平,中断标志会一直置位。*/
	while ((EXTINT & 0x01) != 0)//循环检测外部中断信号是否恢复为高电平,若信号保持为低电平,中断标志位会一直置位。
	{
		EXTINT = 0x01;				/* 清除EINT0中断标志		*/
	}
	
	VICVectAddr = 0;				/* 向量中断结束				*/
}

/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :用P1.18控制LED1,让LED1闪烁。
** 调试说明 :需将跳线JP12和LED1短接。
*********************************************************************************************************
*/
int main (void)
{
//	PINSEL1 = 0x00000000;			// 设置管脚连接GPIO,此行可省掉-----复位默认P0[31:16]连接GPIO
	volatile uint32 Vkey=0;
	
	PINSEL0 = PINSEL0 & (~0xf0000000);	// P1[25:16]连接GPIO,此行可省掉-----复位默认P1[25:16]连接GPIO
	PINSEL1 = 0x00000001;	// P1[25:16]连接GPIO,此行可省掉-----复位默认P1[25:16]连接GPIO
	IO0DIR  |= LEDS;
	
//中断程序
	EXTMODE = 0x00;					/* 设置EINT0为'低电平'方式触发。				*/
	EXTPOLAR = 0x00; 
	
//	EXTMODE = 0x00;					/* 设置EINT0为负沿方式触发。				*/
//	EXTPOLAR = 0x00;
													/* 极性寄存器使用默认值0 */
	
	IRQEnable();					// 使能IRQ中断
	
	//IRQDisable();						// 禁能IRQ中断
						
	/* 打开EINT0中断(使用向量中断) */
	VICIntSelect   = 0x00000000;	/* 设置所有中断分配为IRQ中断*/
	
	VICVectCntl0   = 0x20 | 0x0e;	/* 分配外部中断0到向量中断0	*/
	VICVectAddr0   = (uint32)IRQ_Eint0_ISR;		/* 设置中断服务程序地址	*/
	EXTINT         = 0x01;				/* 清除EINT0中断标志				*/
	VICIntEnable   = 1 << 0x0e;		/* 使能EINT0中断						*/

/* 定时器0初始化 */
	T0CTCR &= 0xf0; 			// Set T0 as Timer mode
	T0TC   = 0;						// 定时器设置为0	
	T0PR   = 0;						// 时钟不分频

	T0MCR  = 0x03;				// 设置T0MR0匹配后复位T0TC,并产生中断标志
	//T0MR0  = Fpclk / 2;		// 0.5秒钟定时 --- 匹配目标值
	T0MR0  = Fpclk/4 ;			// 0.25秒钟定时 --- 匹配目标值
	
	T0TCR  = 0x01;				// 启动定时器	
	
/* 定时器1初始化 */	
	T1CTCR &= 0xf0; 			// Set T0 as Timer mode
	T1TC   = 0;						// 定时器设置为0	
	T1PR   = 0;						// 时钟不分频

	T1MCR  = 0x03;				// 设置T0MR0匹配后复位T0TC,并产生中断标志
	//T0MR0  = Fpclk / 2;		// 0.5秒钟定时 --- 匹配目标值
	T1MR0  = Fpclk/2 ;			// 0.5秒钟定时 --- 匹配目标值
	
	T1TCR  = 0x01;				// 启动定时器	
	
	
	while(1){
		Vkey = (IO0PIN & KEYS);
		//读取开关
		if ((Vkey & KEY2) == 0)
			j=2;
		else if ((Vkey & KEY3) == 0)
			j=3;

		if(j == 3){
			//定时
			int temp = 10;
				while (temp--)
				{
					if ((T0IR & 0x01) == 0x01)
					{
						if ((IO0SET & LEDS1) == 0)
							IO0SET = LEDS1;			// 关闭BEEP	
						else
							IO0CLR = LEDS1;
				
						T0IR = 0x01;					// 清除中断标志	
					}
					
					if ((T1IR & 0x01) == 0x01)
					{
						if ((IO0SET & LEDS2) == 0)
							IO0SET = LEDS2;			// 关闭BEEP	
						else
							IO0CLR = LEDS2;
				
						T1IR = 0x01;					// 清除中断标志	
					}
					
					DelayNS(25);
				}
		}
		else if(j == 2){
			//流水灯
		
				IO0CLR = LED1;
				DelayNS(25);
				IO0SET = LED1;			
				DelayNS(25);
				IO0CLR = LED2;
				DelayNS(25);
				IO0SET = LED2;			
				DelayNS(25);
				IO0CLR = LED3;
				DelayNS(25);
				IO0SET = LED3;			
				DelayNS(25);
				IO0CLR = LED4;
				DelayNS(25);
				IO0SET = LED4;			
				DelayNS(25);
			
		}
		else {
			//全亮
			IO0CLR = LEDS;
		}
	}
	
    //return 0;
	
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

串口

/****************************************  2015-05-28  **************************************************
**                               
**                               				XY Embeded Lib.
**                              			 QQ: 646938309
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2015-05-28
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Zhao QuanLiang
** Created date:		2015-05-28
** Version:					1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:			Zhao QuanLiang
** Modified date:		2015-05-28
** Version:
** Descriptions:		UART0 monitor the data input and send the data back.
**                  本例程中修改了startup.s 的 128th 行,as ‘PLLCFG_Val EQU 0x23’ 原为 0x24
**									(0x23 --- Fcclk 4*Fosc, 0x24 ---- Fcclk 5*Fosc, Fosc = 11059200Hz)
********************************************************************************************************/

#include "lpc213x.h"
#include "TypeDef.h"

extern	void IRQEnable(void);
extern	void IRQDisable(void);
extern	void FIQEnable(void);
extern	void FIQDisable(void);

#define Fpclk 11059200			// 


#define LINE_L 8			// 行长
#define PAGE_L 2			// 段长

/* 定义串口模式设置数据结构 */
typedef struct UartMode
{
	uint8 datab;		// 字长度,5/6/7/8可选
	uint8 stopb;		// 停止位,1/2可选
	uint8 parity;		// 奇偶校验位,0-无校验,1-奇校验,2-偶校验
}UARTMODE;

volatile uint8 rcv_buf[8];		// UART0数据接收缓冲区
volatile uint8 rcv_new;			// 接收新数据标志
volatile uint8 zql_U0IIR;
volatile uint8 zql_chNum;
	
/*
*********************************************************************************************************
** 函数名称 :IRQ_UART0()
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void __irq IRQ_UART0 (void)
{
	uint8 i=0;
	rcv_new = 1;			// 设置接收到新的数据标志
	
	zql_U0IIR = (U0IIR >> 1) & 0x07;
    
  switch (zql_U0IIR){ 	    // 分析中断源 
	case 0x02:
		for (i=0; i<8; i++)
			rcv_buf[i] = U0RBR;		// 读取FIFO的数据,并清除中断	
		break;
	case 0x06:
		while((U0LSR & 0x01) == 0x01)
			{
				rcv_buf[i] = U0RBR;		// 读取FIFO的数据,并清除中断
				i++;
			}
		break;
	}	
	
	zql_chNum=i;
	zql_U0IIR=U0IIR;
	
	VICVectAddr = 0x00;			// 中断处理结束
}

/*
*********************************************************************************************************
** 函数名称 :UART0_SendByte()
** 函数功能 :向串口0发送1字节数据
** 入口参数 :dat	要发送的数据
** 出口参数 :无
*********************************************************************************************************
*/
void UART0_SendByte (uint8 dat)
{
	U0THR = dat;	// 要发送的数据
}

/*
*********************************************************************************************************
** 函数名称 :UART0_SendBuf()
** 函数功能 :向串口发送8字节数据
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void UART0_SendBuf (void)
{
	uint8 i;
	
	for (i=0; i<zql_chNum; i++)
		UART0_SendByte(rcv_buf[i]);
	
	UART0_SendByte(0x0d);
	UART0_SendByte(0x0a);
		
	while ((U0LSR & 0x20) == 0);	// 等待数据发送完毕
}

/*
*********************************************************************************************************
** 函数名称 :UART0_Init()
** 函数功能 :串口初始化,设置工作模式和波特率。
** 入口参数 :baud	波特率
**			  set	模式设置(UARTMODE数据结构)
** 出口参数 :1-初始化成功,  0-初始化失败
*********************************************************************************************************
*/
int8 UART0_Init (uint32 baud, UARTMODE set)
{
	uint32 bak;
	
	/* 参数检查与过滤 */
	if ((baud ==0 ) || (baud > 115200))	return (0);
	if ((set.datab <5) || (set.datab > 8))	return (0);
	if ((set.stopb == 0) || (set.stopb > 2)) 	return (0);
	if (set.parity > 4)	return (0);
	
	/* 设置串口波特率 */
	U0LCR = 0x80;						// DLAB = 1	
	bak   = (Fpclk >> 4) / baud;
	U0DLM = bak >> 8;
	U0DLL = bak & 0xFF;
	
	/* 设置串口模式 */
	bak   = set.datab - 5;				// 设置字长-----准备 UxLCR[1:0] 数据
	if (set.stopb == 2)					// 设置停止位长-----准备 UxLCR[2:2] 数据
		bak |= 0x04;	// 判断是否为2位停止位
	
	if (set.parity != 0)				// 设置有无'奇偶校验'-----准备 UxLCR[3:3] 数据
	{
		set.parity = set.parity - 1;
		bak |= 0x08;
	}
	bak |= set.parity << 4;				// 设置奇偶校验-----准备 UxLCR[3:3] 数据
	
	U0LCR = bak;		// 装载UxLCR,  且UxLCR[7:7]=0 , 即 位 DLAB=0
	
	return (1);
}


/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :从串口UART0接收字符串"ABCDEFGH",并发送回上位机显示。
** 调试说明 :需要PC串口显示终端软件如EasyARM.exe。
*********************************************************************************************************
*/
int main (void)
{
	UARTMODE set;

	set.datab  = 8;
	set.stopb  = 1;
	set.parity = 0;
	
	rcv_new = 0;
	zql_chNum=0;
	
	PINSEL0 = 0x00000005;				// 设置GPIO_0[1:0]连接到UART0
	
	UART0_Init(115200, set);			// 串口初始化
	U0FCR = 0x81;						// 使能FIFO,并设置触发点为8字节
	//U0FCR = 0x01;						// 使能FIFO,并设置触发点为1字节
	//U0IER = 0x01;						// 允许RBR中断,即接收中断
	U0IER = 0x05;						// 允许RBR和字符超时中断,即接收中断
	
	IRQEnable();						// 使能IRQ中断
	
	/* 使能UART0中断 */
	VICIntSelect = 0x00000000;			// 设置所有的通道为IRQ中断
	VICVectCntl0 = 0x20 | 0x06;			// UART0分配到IRQ slot0,即最高优先级
	VICVectAddr0 = (uint32)IRQ_UART0;	// 设置UART0向量地址
	VICIntEnable = 1 << 0x06;			// 使能UART0中断

	while (1)
	{
		if (rcv_new == 1)				// 如果有UART接收,则转发
		{	
			rcv_new =0;
			UART0_SendBuf();
		}
	}
  //  return 0;
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

综合实验 风扇控制系统

#include "lpc213x.h"
#include "TypeDef.h"
extern void IRQEnable(void);
extern void IRQDisable(void);
extern void FIQEnable(void);
extern void FIQDisable(void);

const uint32 INA = (1 << 17);    // P0.17控制INA,控制风扇转速的输入信号线
const uint32 INB = (1 << 18);    // P0.18控制INB,控制风扇转向的输入信号线。

const uint32 LEDS = INA | INB;    // P1.18控制LED1和LED2,低电平点亮
const uint32 LEDS1 = INA;
const uint32 LEDS2 = INB;

const uint32 KEY1 = (1 << 16);    // P1.16控制KEY1,低电平按下
const uint32 KEY2 = (1 << 14);    // P1.14控制KEY2,低电平按下
const uint32 KEY3 = (1 << 15);    // P1.15控制KEY3,低电平按下
const uint32 KEYS = (0x07 << 14);

uint32 j;

//定时器
#define Fosc  11059200                  // 开发板外时钟频率
#define Fcclk (5*Fosc)              // Keil 默认的CPU时钟设置
#define Fpclk (Fcclk/4)             // Keil 默认的DEV时钟设置

/*
*********************************************************************************************************
** 函数名称 :DelayNS()
** 函数功能 :长软件延时
** 入口参数 :dly    延时参数,值越大,延时越久
** 出口参数 :无
*********************************************************************************************************
*/
void DelayNS(uint32 dly)
{
    uint32 i;

    for (; dly > 0; dly--)
        for (i = 0; i < 50000; i++)
            ;
}

void __irq IRQ_Eint0_ISR(void)
{
    volatile uint32 Vkey = 0;
	
		//全灭
		IO0SET=LEDS;

    /*     等待外部中断信号恢复为高电平,若信号保持为低电平,中断标志会一直置位。*/
    while ((EXTINT & 0x01) != 0) //循环检测外部中断信号是否恢复为高电平,若信号保持为低电平,中断标志位会一直置位。
    {
        EXTINT = 0x01;                 /* 清除EINT0中断标志        */
    }

    VICVectAddr = 0;                /* 向量中断结束                */
}

/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :用P1.18控制LED1,让LED1闪烁。
** 调试说明 :需将跳线JP12和LED1短接。
*********************************************************************************************************
*/
int main(void)
{
    volatile uint32 Vkey = 0;

    PINSEL0 = PINSEL0 & (~0xf0000000); // P1[25:16]连接GPIO,此行可省掉-----复位默认P1[25:16]连接GPIO
    PINSEL1 = 0x00000001;               // P1[25:16]连接GPIO,此行可省掉-----复位默认P1[25:16]连接GPIO
    IO0DIR |= LEDS;

    //中断程序
    EXTMODE = 0x00;                 /* 设置EINT0为'低电平'方式触发。                */
    EXTPOLAR = 0x00;

    VICIntSelect = 0x00000000;    /* 设置所有中断分配为IRQ中断*/

    VICVectCntl0 = 0x20 | 0x0e;    /* 分配外部中断0到向量中断0 */
    VICVectAddr0 = (uint32)IRQ_Eint0_ISR;    /* 设置中断服务程序地址    */
    EXTINT = 0x01;                /* 清除EINT0中断标志                */
    VICIntEnable = 1 << 0x0e;    /* 使能EINT0中断                        */

    /* 定时器0初始化 */
    T0CTCR &= 0xf0;          // Set T0 as Timer mode
    T0TC = 0;                     // 定时器设置为0
    T0PR = 0;                     // 时钟不分频

    T0MCR = 0x03;                // 设置T0MR0匹配后复位T0TC,并产生中断标志
    T0MR0 = Fpclk / 4;            // 0.25秒钟定时 --- 匹配目标值

    T0TCR = 0x01;                // 启动定时器

    while (1) {
        Vkey = (IO0PIN & KEYS);
        //读取开关
        if ((Vkey & KEY2) == 0)
            j = 2;                  
        else if ((Vkey & KEY3) == 0)
            j = 3;
        else
            j = 0;

        if (j == 2) {
					  
            //风扇转动
            IO0SET = INB;
            if ((T0IR & 0x01) == 0x01)
            {
               if ((IO0SET & LEDS1) == 0)
                    IO0SET = LEDS1;            // 关闭BEEP
							 else
                    IO0CLR = LEDS1;

               T0IR = 0x01;                    // 清除中断标志
             }
        }
        else if (j == 3) {
            //定时
            int temp = 10;
            while (temp--)
            {
                IO0SET = INB;
                if ((T0IR & 0x01) == 0x01)
                {
                    if ((IO0SET & LEDS1) == 0)
                        IO0SET = LEDS1;            // 关闭BEEP
                    else
                        IO0CLR = LEDS1;

                    T0IR = 0x01;                    // 清除中断标志
                }

                DelayNS(25);
            }
        
            IO0CLR = LEDS;
      
        }
       
    }
}

下板

三合一

K1 控制 外部中断 按下四个灯全灭
K2 流水灯
K3 定时中断 K1和K3 0.25秒闪烁 K2和K4 0.5秒闪烁

窗口

打开XCOM
设置波特率9600
打开窗口
发送文字,会接受文字

综合实验

初始 Led1和Led2全量 风扇不转
K1 外部中断 使Led1和Led2 灭
K2 使得Led1亮 Led2灭 风扇转动
K3 使得风扇转动一段时间,就停

最后

2023-12-7 20:01:13

我们都有光明的未来
不必感谢我,也不必记得我

祝大家考研上岸
祝大家工作顺利
祝大家得偿所愿
祝大家如愿以偿
点赞收藏关注哦

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

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

相关文章

通过K8S安装人大金仓数据库

1. 离线下载镜像&#xff0c;请点击 2. 官网下载镜像 https://www.kingbase.com.cn/xzzx/index.htm&#xff0c;根据自己的需求下载对应版本。 3. K8S需要的yaml清单 cat > kingbase.yaml << EOF apiVersion: apps/v1 kind: Deployment metadata:name: kingbase-…

将图像增广应用于Mnist数据集

将图像增广应用于Mnist数据集 不用到cifar-10的原因是要下载好久。。我就直接用在Mnist上了&#xff0c;先学会用 首先我们得了解一下图像增广的基本内容&#xff0c;这是我的一张猫图片&#xff0c;以下为先导入需要的包和展示图片 import time import torch from torch im…

javaTCP协议实现一对一聊天

我们首先要完成服务端&#xff0c;不然出错&#xff0c;运行也要先运行服务端&#xff0c;如果不先连接服务端&#xff0c;就不监听&#xff0c;那客户端不知道连接谁 服务端 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.Actio…

超越GPT-4!谷歌发布最强多模态大模型—Gemini

12月7日凌晨&#xff0c;谷歌在官网发布了全新最强多模态大模型——Gemini。 据悉&#xff0c;Gemini有Ultra、Pro、Nano三个版本&#xff0c;可自动生成文本、代码、总结内容等&#xff0c;并能理解图片、音频和视频内容。在MMLU、DROP 、HellaSwag、GSM8K等主流评测中&#…

JVM虚拟机(已整理,已废弃)

# JVM组成 ## 简述程序计数器 线程私有&#xff0c;内部保存class字节码的行号。用于记录正在执行的字节码指令的地址。 线程私有-每个线程都有自己的程序计数器PC&#xff0c;用于记录当前线程执行哪个行号 ## 简述堆 ## 简述虚拟机栈 ## 简述堆栈区别 ## 方法内局部变量是…

【前端架构】清洁前端架构

探索前端架构&#xff1a;概述与干净的前端架构相关的一些原则&#xff08;SOLID、KISS、DRY、DDD等&#xff09;。 在我之前的一篇帖子中&#xff0c;我谈到了Signals和仍然缺少的内容[1]。现在&#xff0c;我想谈谈一个更通用的主题&#xff0c;即Clean Frontend Architectu…

python+paddleocr 进行图像识别、找到文字在屏幕中的位置

目录 前言 1、安装paddleocr 2、安装PIL 3、安装numpy 4、 安装pyautogui 5、进行文本识别 6、识别结果 7、获取文字在图片/屏幕中的位置 8、pyautoguipaddleocr鼠标操作 9、完整代码 前言 最近在做自动化测试&#xff0c;因为是处理过的界面&#xff0c;所以使用pyw…

Vue3项目调用腾讯地图服务(地址解析 地址转坐标)及使用axios的跨域问题

一,需求 根据传入的文本地址 将其转换为坐标 显示地图点位在腾讯地图上 二,使用axios发送请求 import axios from axios; //引入axiosaxios({url:https://apis.map.qq.com/ws/geocoder/v1,method:get//参数 地址和key值}).then((data)>{console.log(data)});但是使用完报跨…

猫咪瘦弱的原因是什么?适合给消瘦猫咪长肉吃的猫罐头分享

很多小猫咪吃得很多&#xff0c;但是还是很瘦&#xff0c;这让很多猫主人感到困惑&#xff0c;猫咪瘦弱的原因是什么呢&#xff1f;铲屎那么多年&#xff0c;还是有点子养猫知识在身上的。那么&#xff0c;小猫咪瘦弱的原因是什么呢&#xff1f;让我们看看是不是这些原因导致的…

为什么有些程序员宁愿在国内 35 岁被辞退,也不愿意去国外工作?

我发现IT圈和电竞圈有一个共性&#xff1a;菜是原罪。 为什么有些程序员35岁就会被辞退&#xff1f;因为菜。 为什么有些程序员不愿意去国外工作&#xff1f;因为菜。 当然&#xff0c;我这里指的菜不是烂泥扶不上墙的那种菜&#xff0c;而是不够拔尖。那么这个问题也就分为了三…

【项目日记(一)】高并发内存池项目介绍

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:项目日记-高并发内存池⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 项目日记 1. 前言2. 什么是高并发内存池…

基于ssm vue个人需求和地域特色的外卖推荐系统源码和论文

首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计。本项…

9种伪原创工具推荐,快速提升创作效率

如何让自己的文章在海量信息中脱颖而出&#xff0c;成为一个备受关注的焦点&#xff0c;成为许多创作者迫切思考的问题。在这篇文章中&#xff0c;我将向大家介绍9种伪原创工具&#xff0c;这些工具可以让你的文章轻松升级&#xff0c;更具创意和吸引力。 1.Spinbot&#xff08…

simulink中 Data store memory、write和read模块及案例介绍

目录 1.Data store memory模块 2.data store write模块 3.data store read模块 4.仿真分析 4.1简单使用三个模块 4.2 模块间的调用顺序剖析 1.Data store memory模块 向右拖拉得到Data store read模块&#xff0c;向左拉得到Data write模块 理解&#xff1a;可视为定义变量…

C++ 函数详解

目录 函数概述 函数的分类 函数的参数 函数的调用 函数的嵌套调用 函数的链式访问 函数声明和定义 函数递归 函数概述 函数——具有某种功能的代码块。 一个程序中我们经常会用到某种功能&#xff0c;如两数相加&#xff0c;如果每次都在需要用到时实现&#xff0c;那…

矩阵学习相关——(待完善)

线性代数基础知识之–矩阵&#xff08;Matrix&#xff09; 矩阵概念————&#xff08;基础知识&#xff09; 矩阵理论基础知识 矩阵理论基础知识 矩阵入门 写给有编程基础的人 初学讲义之高中数学二十七&#xff1a;矩阵和行列式 直观理解&#xff01;你一定要读…

C++多态(详解)

一、多态的概念 1.1、多态的概念 多态&#xff1a;多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 举个例子&#xff1a;比如买票这个行为&#xff0c;当普通人买票时&#xff0c;是全价买票&#xff1b;学生买票时&am…

JavaScript实现手写签名,可触屏手写,支持移动端与PC端双端保存

目录 1.HTML模板 2.获取DOM元素和定义变量 3.创建两个canvas元素&#xff0c;并设置它们的宽度和高度 4.绑定触摸事件&#xff1a;touchstart, touchmove, touchend和click 5.实现触摸事件回调函数&#xff1a;startDrawing, draw和stopDrawing 6.实现绘制线段的函数&…

C# WPF上位机开发(带配置文件的倒计时软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们写了倒计时软件&#xff0c;但是不知道大家有没有发现&#xff0c;这个软件起始有一个缺点&#xff0c;那就是倒计时的起始时间都是硬编码…

stl库之map与例题

map是一种关联式容器&#xff0c;它允许将键&#xff08;key&#xff09;映射到值&#xff08;value&#xff09;&#xff0c;所以我们习惯称map为映射 每个元素都是一个键值对&#xff0c;其中键是唯一的 创建map map<key类型, value类型> 变量名; 创建一个键为int&…