安徽网站建设案例/长沙百度搜索排名优化
一、RTC振荡器
PY32F003F18实时时钟的振荡器是内部RC振荡器,频率为32.768KHz。它也可以使用HSE时钟,不建议使用。HAL库提到LSE振荡器,但PY32F003F18实际上没有这个振荡器。
缺点:CPU掉电后,需要重新配置RTC,这个确实不太友好,有点像是鸡肋,在要求不严格的场合,凑合使用吧。
RTC时钟框图如下:
二、RTC的HAL库有一个不是很严重的bug
PY32F003F18的HAL库润年函数中有一个BUG,不是很严重,因为2400年是一个闰年,它把年定义为字节型变量,是没有办法分辨出是不是闰年。
闰年的计算方法:年数能被4整除,但不能被100年整除,为闰年;若年数能400年整除,也为闰年。
HAL库确实不大好,它喜欢用全局变量来实现其功能,让人受不了。我改了,让它适合自己需要的。HAL处的好处,就是我们可以从中抠出自己需要的部分,修修改改,就可以了,比HAL库的灵活多了。时刻不忘黑它一把,因为人云亦云的人太多了。
三、非完全HAL库测试程序
如果你觉得HAL库,就用HAL中的程序,也是可以的。
#include "RTC.h"
#include "LED.h"
#include "stdio.h" //getchar(),putchar(),scanf(),printf(),puts(),gets(),sprintf()uint8_t Century;//世纪,21世纪用20表示
RTC_DateTypeDef RTC_DateStructureure;//用来保存读到的"年月日"
RTC_TimeTypeDef RTC_TimeStructureure;//用来保存读到的"时分秒"
RTC_AlarmTypeDef RTC_AlarmStructureure;void RTC_Init(void);
void RTC_Display(void);//函数功能:读"RTC计数寄存器"
uint32_t Read_RTC_Time_Counter(void)
{uint16_t high1 = 0U, high2 = 0U, low = 0U;uint32_t timecounter = 0U;high1 = READ_REG(RTC->CNTH & RTC_CNTH_RTC_CNT);//读"RTC计数寄存器高位RTC_CNTH"low = READ_REG(RTC->CNTL & RTC_CNTL_RTC_CNT);//读"RTC计数寄存器低位RTC_CNTL"high2 = READ_REG(RTC->CNTH & RTC_CNTH_RTC_CNT);//读"RTC计数寄存器高位RTC_CNTH"if (high1 != high2){//读"RTC计数寄存器低位RTC_CNTL"时,发现"RTC计数寄存器高位RTC_CNTH"中的数据发生改变了//In this case the counter roll over during reading of CNTL and CNTH registers,//read again CNTL register then return the counter valuetimecounter = (((uint32_t) high2 << 16U) | READ_REG(RTC->CNTL & RTC_CNTL_RTC_CNT));}else{//No counter roll over during reading of CNTL and CNTH registers, //counter value is equal to first value of CNTL and CNTHtimecounter = (((uint32_t) high1 << 16U) | low);}return timecounter;
}//函数功能:
//等待RTC写操作结束
//返回0,表示退出RTC配置模式,开始更新RTC寄存器
HAL_StatusTypeDef Enter_RTC_Init_Mode(void)
{uint32_t tickstart = 0U;tickstart = HAL_GetTick();/* Wait till RTC is in INIT state and if Time out is reached exit */while ( (RTC->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET ){//读"RTC控制寄存器RTC_CRL"中的RTOFF,若RTOFF=0,则上一次对RTC寄存器的写操作仍在进行if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE){//RTC_TIMEOUT_VALUE=2000,最大等待时间为2000msreturn HAL_TIMEOUT;}}_HAL_RTC_WRITEPROTECTION_DISABLE(RTC);//将"RTC控制寄存器RTC_CRL"中的CNF=0,退出配置模式,开始更新RTC寄存器//Disable the write protection for RTC registersreturn HAL_OK;
}//函数功能:
//等待RTC写操作结束
//返回0,表示RTC写操作结束
HAL_StatusTypeDef Exit_RTC_Init_Mode(void)
{uint32_t tickstart = 0U;_HAL_RTC_WRITEPROTECTION_ENABLE(RTC);//将"RTC控制寄存器RTC_CRL"中的CNF=1,进入RTC配置模式tickstart = HAL_GetTick();while ((RTC->CRL & RTC_CRL_RTOFF) == RTC_CRL_RTOFF){//读"RTC控制寄存器RTC_CRL"中的RTOFF,若RTOFF=1,则上一次对RTC寄存器的写操作已经完成if ((HAL_GetTick() - tickstart) > RTC_RTOFF_RESET_TIMEOUT_VALUE){//RTC_RTOFF_RESET_TIMEOUT_VALUE=4,最大等待时间为4msbreak;}}tickstart = HAL_GetTick();while ((RTC->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET){//读"RTC控制寄存器RTC_CRL"中的RTOFF,若RTOFF=0,则上一次对RTC寄存器的写操作仍在进行if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE){//RTC_TIMEOUT_VALUE=2000,最大等待时间为2000msreturn HAL_TIMEOUT;}}return HAL_OK;
}//函数功能:将TimeCounter写入"RTC计数寄存器"
HAL_StatusTypeDef Write_RTC_Time_Counter( uint32_t TimeCounter )
{HAL_StatusTypeDef status = HAL_OK;if (Enter_RTC_Init_Mode() != HAL_OK){//等待RTC写操作结束//返回0,表示退出RTC配置模式,开始更新RTC寄存器status = HAL_ERROR;}else{WRITE_REG(RTC->CNTH, (TimeCounter >> 16U));//写"RTC计数寄存器高位RTC_CNTH"//Set RTC COUNTER MSB wordWRITE_REG(RTC->CNTL, (TimeCounter & RTC_CNTL_RTC_CNT));//写"RTC计数寄存器低位RTC_CNTL"//Set RTC COUNTER LSB wordif (Exit_RTC_Init_Mode() != HAL_OK){//等待RTC写操作结束status = HAL_ERROR;}}return status;
}//函数功能:读"RTC闹钟寄存器"
uint32_t Read_RTC_Alarm_Counter(void)
{uint16_t high1 = 0U, low = 0U;high1 = READ_REG(RTC->ALRH & RTC_CNTH_RTC_CNT);//读"RTC闹钟寄存器高位RTC_ALRH"low = READ_REG(RTC->ALRL & RTC_CNTL_RTC_CNT);//读"RTC闹钟寄存器低位RTC_ALRL"return (((uint32_t) high1 << 16U) | low);
}//函数功能:将AlarmCounter写入"RTC闹钟寄存器"
HAL_StatusTypeDef Write_RTC_Alarm_Counter( uint32_t AlarmCounter)
{HAL_StatusTypeDef status = HAL_OK;/* Set Initialization mode */if (Enter_RTC_Init_Mode() != HAL_OK){//等待RTC写操作结束//返回0,表示退出RTC配置模式,开始更新RTC寄存器status = HAL_ERROR;}else{WRITE_REG(RTC->ALRH, (AlarmCounter >> 16U));//写"RTC闹钟寄存器高位RTC_ALRH",Set RTC COUNTER MSB wordWRITE_REG(RTC->ALRL, (AlarmCounter & RTC_ALRL_RTC_ALR));//写"RTC闹钟寄存器低位RTC_ALRL",Set RTC COUNTER LSB word/* Wait for synchro */if (Exit_RTC_Init_Mode() != HAL_OK){//等待RTC写操作结束status = HAL_ERROR;}}return status;
}//函数功能:返回0表示闰年
uint8_t Is_LeapYear(uint16_t nYear)
{uint16_t y;y=Century;//2023年9月26日y=y*100;//2023年9月26日nYear=y+nYear;//2023年9月26日if ((nYear % 4U) != 0U){return 0U;}if ((nYear % 100U) != 0U){return 1U;}if ((nYear % 400U) == 0U){return 1U;}else{return 0U;}
}//函数功能;读取星期几的值
uint8_t Read_RTC_WeekDay(uint32_t nYear, uint8_t nMonth, uint8_t nDay)
{uint32_t year = 0U, weekday = 0U;year = 2000U + nYear;if (nMonth < 3U){/*D = { [(23 x month)/9] + day + 4 + year + [(year-1)/4] - [(year-1)/100] + [(year-1)/400] } mod 7*/weekday = (((23U * nMonth) / 9U) + nDay + 4U + year + ((year - 1U) / 4U) - ((year - 1U) / 100U) + ((year - 1U) / 400U)) % 7U;}else{/*D = { [(23 x month)/9] + day + 4 + year + [year/4] - [year/100] + [year/400] - 2 } mod 7*/weekday = (((23U * nMonth) / 9U) + nDay + 4U + year + (year / 4U) - (year / 100U) + (year / 400U) - 2U) % 7U;}return (uint8_t)weekday;
}void Update_RTC_Date(RTC_DateTypeDef *update_RTCDate, uint32_t DayElapsed)
{uint32_t year = 0U, month = 0U, day = 0U;uint32_t loop = 0U;/* Get the current year*/year = update_RTCDate->Year;/* Get the current month and day */month = update_RTCDate->Month;day = update_RTCDate->Date;for (loop = 0U; loop < DayElapsed; loop++){if ((month == 1U) || (month == 3U) || (month == 5U) || (month == 7U) || \(month == 8U) || (month == 10U) || (month == 12U)){if (day < 31U){day++;}/* Date structure member: day = 31 */else{if (month != 12U){month++;day = 1U;}/* Date structure member: day = 31 & month =12 */else{month = 1U;day = 1U;year++;}}}else if ((month == 4U) || (month == 6U) || (month == 9U) || (month == 11U)){if (day < 30U){day++;}/* Date structure member: day = 30 */else{month++;day = 1U;}}else if (month == 2U){if (day < 28U){day++;}else if (day == 28U){if (Is_LeapYear(year))//不闰年{//返回0表示闰年day++;}else //闰年{month++;day = 1U;}}else if (day == 29U){month++;day = 1U;}}}if(year>=100)//2023年9月26日{Century++;year=year-100;}/* Update year */update_RTCDate->Year = year;/* Update day and month */update_RTCDate->Month = month;update_RTCDate->Date = day;/* Update day of the week */update_RTCDate->WeekDay = Read_RTC_WeekDay(year, month, day);//读取星期几的值
}HAL_StatusTypeDef Read_RTC_Time(RTC_DateTypeDef *update_RTCDate, RTC_TimeTypeDef *sTime)
{uint32_t counter_time = 0U, counter_alarm = 0U, days_elapsed = 0U, hours = 0U;counter_time = Read_RTC_Time_Counter();//读"RTC计数寄存器",总秒数hours = counter_time / 3600U;//计算有多少小时sTime->Minutes = (uint8_t)((counter_time % 3600U) / 60U);//计算分钟数值sTime->Seconds = (uint8_t)((counter_time % 3600U) % 60U);//计算秒数值if (hours >= 24U){days_elapsed = (hours / 24U);//计算"天"sTime->Hours = (hours % 24U);//计算今天的"小时时间"counter_alarm = Read_RTC_Alarm_Counter();//读"RTC闹钟寄存器"//Read Alarm counter in RTC registers/* Calculate remaining time to reach alarm (only if set and not yet expired)*/if ((counter_alarm != 0xFFFFFFFF) && (counter_alarm > counter_time)){//RTC_ALARM_RESETVALUE=0xFFFFFFFFUcounter_alarm -= counter_time;//计算"距离报警时间的差值"}else{/* In case of counter_alarm < counter_time *//* Alarm expiration already occurred but alarm not deactivated */counter_alarm = 0xFFFFFFFF;//RTC_ALARM_RESETVALUE=0xFFFFFFFFU}/* Set updated time in decreasing counter by number of days elapsed */counter_time -= (days_elapsed * 24U * 3600U);//计算"今天的总秒数"/* Write time counter in RTC registers */if (Write_RTC_Time_Counter(counter_time) != HAL_OK){//将"今天的总秒数"counter_time写入"RTC计数寄存器"return HAL_ERROR;}/* Set updated alarm to be set */if (counter_alarm != 0xFFFFFFFF){//RTC_ALARM_RESETVALUE=0xFFFFFFFFUcounter_alarm += counter_time;//报警时间 = "距离报警时间的差值" + "今天的总秒数"if (Write_RTC_Alarm_Counter(counter_alarm) != HAL_OK){//将AlarmCounter写入"RTC闹钟寄存器"return HAL_ERROR;}}else{/* Alarm already occurred. Set it to reset values to avoid unexpected expiration */if (Write_RTC_Alarm_Counter(counter_alarm) != HAL_OK){//将AlarmCounter写入"RTC闹钟寄存器"return HAL_ERROR;}}/* Update date */Update_RTC_Date(update_RTCDate, days_elapsed);}else{sTime->Hours = hours;}return HAL_OK;
}HAL_StatusTypeDef Read_RTC_Date(RTC_DateTypeDef *update_RTCDate,RTC_DateTypeDef *sDate)
{RTC_TimeTypeDef stime = {0U};/* Call HAL_RTC_GetTime function to update date if counter higher than 24 hours */if (Read_RTC_Time(update_RTCDate, &stime) != HAL_OK){return HAL_ERROR;}/* Fill the structure fields with the read parameters */sDate->WeekDay = update_RTCDate->WeekDay;sDate->Year = update_RTCDate->Year;sDate->Month = update_RTCDate->Month;sDate->Date = update_RTCDate->Date;return HAL_OK;
}void RTC_Init(void)
{RTC_HandleTypeDef RTC_HandleStructureure;RCC_OscInitTypeDef RCC_OscInit_Structureure;RCC_PeriphCLKInitTypeDef PeriphClkInit_Structureure;Century=20;//世纪,21世纪用20表示RTC_HandleStructureure.Instance = RTC; //选择RTCRTC_HandleStructureure.Init.AsynchPrediv = RTC_AUTO_1_SECOND; //RTC一秒时基自动计算//HAL_RTC_MspInit函数开始//RCC_OscInit_Structureure.OscillatorType = RCC_OSCILLATORTYPE_LSI;RCC_OscInit_Structureure.LSIState = RCC_LSI_ON;HAL_RCC_OscConfig(&RCC_OscInit_Structureure);PeriphClkInit_Structureure.PeriphClockSelection = RCC_PERIPHCLK_RTC;PeriphClkInit_Structureure.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit_Structureure);__HAL_RCC_RTCAPB_CLK_ENABLE();//使能RTC APB外部设备时钟,Enable RTC peripheral Clocks__HAL_RCC_RTC_ENABLE();//使能RTC时钟,Enable RTC ClockHAL_NVIC_SetPriority(RTC_IRQn, 0x01, 0);//设置RTC中断优先级为0x01,0无意义NVIC_EnableIRQ(RTC_IRQn);//使能RTC中断__HAL_RTC_OVERFLOW_ENABLE_IT(&RTC_HandleStructureure, RTC_IT_OW);//使能溢出中断,Overflow interrupt__HAL_RTC_ALARM_ENABLE_IT(&RTC_HandleStructureure, RTC_IT_ALRA);//使能报警中断,Alarm interrupt__HAL_RTC_SECOND_ENABLE_IT(&RTC_HandleStructureure, RTC_IT_SEC);//使能秒中断,Second interrupt
//HAL_RTC_MspInit函数结束//HAL_RTC_Init(&RTC_HandleStructureure);//RTC初始化/设置日期: 2023/9/27 星期三/RTC_DateStructureure.Year = 23;RTC_DateStructureure.Month =9;RTC_DateStructureure.Date = 27;RTC_DateStructureure.WeekDay = RTC_WEEKDAY_WEDNESDAY;HAL_RTC_SetDate(&RTC_HandleStructureure, &RTC_DateStructureure, RTC_FORMAT_BIN);//设置RTC日期/设置时间: 09:00:00/RTC_TimeStructureure.Hours = 9;RTC_TimeStructureure.Minutes =00;RTC_TimeStructureure.Seconds = 00;HAL_RTC_SetTime(&RTC_HandleStructureure, &RTC_TimeStructureure, RTC_FORMAT_BIN);//设置RTC时间/设置RTC闹钟,时间到09:01:00产生中断/RTC_AlarmStructureure.AlarmTime.Hours = 9;RTC_AlarmStructureure.AlarmTime.Minutes = 1;RTC_AlarmStructureure.AlarmTime.Seconds = 00;HAL_RTC_SetAlarm_IT(&RTC_HandleStructureure, &RTC_AlarmStructureure, RTC_FORMAT_BIN);
}void RTC_Display(void)
{Read_RTC_Time(&RTC_DateStructureure,&RTC_TimeStructureure);
// Read_RTC_Date(&RTC_DateStructureure,&RTC_DateStructureure);// RTC_HandleTypeDef RTC_HandleStructureure;// RTC_HandleStructureure.Instance = RTC;//选择RTC
// printf("RTC_IT_SEC\r\n");
// HAL_RTC_GetTime(&RTC_HandleStructureure, &RTC_TimeStructureure, RTC_FORMAT_BIN);//读取"RTC时间"
// HAL_RTC_GetDate(&RTC_HandleStructureure, &RTC_DateStructureure, RTC_FORMAT_BIN);//读取"RTC日期"printf("%02d%02d-%02d-%02d %02d:%02d:%02d\r\n", Century,RTC_DateStructureure.Year,RTC_DateStructureure.Month,RTC_DateStructureure.Date,RTC_TimeStructureure.Hours, RTC_TimeStructureure.Minutes, RTC_TimeStructureure.Seconds);//显示时间格式为 : YY-MM-DD hh:mm:ssif(RTC_DateStructureure.WeekDay==RTC_WEEKDAY_SUNDAY) printf("Sunday\r\n");if(RTC_DateStructureure.WeekDay==RTC_WEEKDAY_MONDAY) printf("Monday\r\n");if(RTC_DateStructureure.WeekDay==RTC_WEEKDAY_TUESDAY) printf("Tuesday\r\n");if(RTC_DateStructureure.WeekDay==RTC_WEEKDAY_WEDNESDAY) printf("Wednesday\r\n");if(RTC_DateStructureure.WeekDay==RTC_WEEKDAY_THURSDAY) printf("Thursday\r\n");if(RTC_DateStructureure.WeekDay==RTC_WEEKDAY_FRIDAY) printf("Friday\r\n");if(RTC_DateStructureure.WeekDay==RTC_WEEKDAY_SATURDAY) printf("Saturday\r\n");
}//函数功能;RTC中断服务函数
void RTC_IRQHandler(void)
{if (_HAL_RTC_SECOND_GET_FLAG(RTC,RTC_FLAG_SEC)){if (_HAL_RTC_SECOND_GET_FLAG(RTC, RTC_FLAG_OW)){//RTC计数器溢出中断
/HAL_RTCEx_RTCEventCallback函数开始/printf("%s","\r\nRTC Overflow!!!\r\n");
/HAL_RTCEx_RTCEventCallback函数结束/_HAL_RTC_OVERFLOW_CLEAR_FLAG(RTC, RTC_FLAG_OW);//清除溢出中断}else{//RTC产生秒中断
/HAL_RTCEx_RTCEventCallback函数开始/MCU_LED_Toggle();
/HAL_RTCEx_RTCEventCallback函数结束/}_HAL_RTC_SECOND_CLEAR_FLAG(RTC, RTC_FLAG_SEC);}if (_HAL_RTC_ALARM_GET_FLAG(RTC, RTC_FLAG_ALRAF) != (uint32_t)RESET){//RTC产生报警中断
/HAL_RTC_AlarmAEventCallback函数开始/printf("%s","\r\nRTC Alarm!!!\r\n");
/HAL_RTC_AlarmAEventCallback函数结束/_HAL_RTC_ALARM_CLEAR_FLAG(RTC, RTC_FLAG_ALRAF);//Clear the Alarm interrupt pending bit}
}
#ifndef __RTC_H
#define __RTC_H#include "py32f0xx_hal.h"#define _HAL_RTC_SECOND_GET_FLAG(__INSTANCE__, __FLAG__) (((((__INSTANCE__)->CRL) & (__FLAG__)) != RESET)? SET : RESET)
#define _HAL_RTC_OVERFLOW_CLEAR_FLAG(__INSTANCE__, __FLAG__) ((__INSTANCE__)->CRL) = ~(__FLAG__)
#define _HAL_RTC_SECOND_CLEAR_FLAG(__INSTANCE__, __FLAG__) ((__INSTANCE__)->CRL) = ~(__FLAG__)
#define _HAL_RTC_ALARM_GET_FLAG(__INSTANCE__, __FLAG__) (((((__INSTANCE__)->CRL) & (__FLAG__)) != RESET)? SET : RESET)
#define _HAL_RTC_ALARM_CLEAR_FLAG(__INSTANCE__, __FLAG__) ((__INSTANCE__)->CRL) = ~(__FLAG__)
//#define _HAL_RTC_ALARM_ENABLE_IT(__INSTANCE__, __INTERRUPT__) SET_BIT((__INSTANCE__)->CRH, (__INTERRUPT__))#define _HAL_RTC_WRITEPROTECTION_ENABLE(__INSTANCE__) CLEAR_BIT((__INSTANCE__)->CRL, RTC_CRL_CNF)
//将"RTC控制寄存器RTC_CRL"中的CNF=1,进入RTC配置模式#define _HAL_RTC_WRITEPROTECTION_DISABLE(__INSTANCE__) SET_BIT((__INSTANCE__)->CRL, RTC_CRL_CNF)
//将"RTC控制寄存器RTC_CRL"中的CNF=0,退出配置模式,开始更新RTC寄存器
extern void RTC_Init(void);
extern void RTC_Display(void);#endif /* __RTC_H */
#include "py32f0xx_hal.h"
#include "SystemClock.h"
#include "delay.h"
#include "LED.h"
#include "SystemClock.h"
#include "USART2.h"
#include "stdio.h" //getchar(),putchar(),scanf(),printf(),puts(),gets(),sprintf()
#include "string.h" //使能strcpy(),strlen(),memset()
#include "RTC.h"const char CPU_Reset_REG[]="\r\nCPU reset!\r\n";
int main(void)
{HSE_Config();
// HAL_Init();//systick初始化delay_init();HAL_Delay(1000);USART2_Init(115200);
//PA0是为USART2_TX,PA1是USART2_RX
//中断优先级为0x01
//波特率为115200,数字为8位,停止位为1位,无奇偶校验,允许发送和接收数据,只允许接收中断,并使能串口printf("%s",CPU_Reset_REG);MCU_LED_Init();RTC_Init();while (1){delay_ms(1000);RTC_Display();}
}
四、误差分析
误差: 每10分钟误差6秒。1%的误差,还行。
相关文章:
![](https://img-blog.csdnimg.cn/0c3395ddbdee4ad994eaa74d267c328a.png)
PY32F003F18之RTC
一、RTC振荡器 PY32F003F18实时时钟的振荡器是内部RC振荡器,频率为32.768KHz。它也可以使用HSE时钟,不建议使用。HAL库提到LSE振荡器,但PY32F003F18实际上没有这个振荡器。 缺点:CPU掉电后,需要重新配置RTCÿ…...
![](https://img-blog.csdnimg.cn/18d3a366037146deb3f8f1273f30036b.png#pic_center)
redis主从从,redis-7.0.13
redis主从从,redis-7.0.13 下载redis安装redis安装redis-7.0.13过程报错1、没有gcc,报错2、没有python3,报错3、[adlist.o] 错误 127 解决安装报错安装完成 部署redis 主从从结构redis主服务器配置redis启动redis登录redisredis默认是主 redi…...
![](https://img-blog.csdnimg.cn/d5e3d32d36784c698ba22f192866a917.png)
力扣-338.比特位计数
Idea 直接暴力做法:计算从0到n,每一位数的二进制中1的个数,遍历其二进制的每一位即可得到1的个数 AC Code class Solution { public:vector<int> countBits(int n) {vector<int> ans;ans.emplace_back(0);for(int i 1; i < …...
![](https://img-blog.csdnimg.cn/635aedf581d244e6956f148d006de010.png)
【Leetcode】 17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits "23" 输出&…...
![](https://img-blog.csdnimg.cn/6dce793361b44c8d8a56ce4e8339f0d0.png)
洛谷P1102 A-B 数对题解
目录 题目A-B 数对题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示传送门 代码解释亲测 题目 A-B 数对 题目背景 出题是一件痛苦的事情! 相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 AB Problem,改用 …...
![](https://img-blog.csdnimg.cn/img_convert/9a221328830cd48b58acfa3cb2dbe653.png)
【Linux进行时】进程地址空间
进程地址空间 例子引入: 我们在讲C语言的时候,老师给大家画过这样的空间布局图,但是我们对它不了解 我们写一个代码来验证Linux进程地址空间 #include<stdio.h> #include<assert.h> #include<unistd.h> int g_value100; …...
![](https://img-blog.csdnimg.cn/img_convert/565de9d561dc5d1ec33fb46d066e024b.png)
批量将文件名称符合要求的文件自动复制到新文件夹:Python实现
本文介绍基于Python语言,读取一个文件夹,并将其中每一个子文件夹内符合名称要求的文件加以筛选,并将筛选得到的文件复制到另一个目标文件夹中的方法。 本文的需求是:现在有一个大的文件夹,其中含有多个子文件夹&#x…...
![](https://img-blog.csdnimg.cn/02938b4c658f41128f6b3ae104f26fef.png)
TensorFlow入门(一、环境搭建)
一、下载安装Anaconda 下载地址:http://www.anaconda.comhttp://www.anaconda.com 下载完成后运行exe进行安装 二、下载cuda 下载地址:http://developer.nvidia.com/cuda-downloadshttp://developer.nvidia.com/cuda-downloads 下载完成后运行exe进行安装 安装后winR cmd进…...
![](https://img-blog.csdnimg.cn/34eadac4e6dc4307a171edcb58563371.png)
90、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->Hash 相关命令
本次讲解要点: Hash 相关命令:是指value中的数据类型 启动redis服务器: 打开小黑窗: C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.exe red…...
![](https://www.ngui.cc/images/no-images.jpg)
我开源了一个加密算法仓库,支持18种算法!登录注册业务可用!
文章目录 仓库地址介绍安装用法SHA512HMACBcryptScryptAESRSAECC 仓库地址 仓库地址:https://github.com/palp1tate/go-crypto-guard 欢迎star和fork! 介绍 此存储库包含用 Go 编写的全面的密码哈希库。该库支持多种哈希算法,它允许可定制…...
![](https://img-blog.csdnimg.cn/img_convert/fcfc4d9ae635392255c2ed229c33ab0e.png)
FPGA设计时序约束二、输入延时与输出延时
目录 一、背景 二、set_input_delay 2.1 set_input_delay含义 2.2 set_input_delay参数说明 2.3 使用样例 三、set_output_delay 3.1 set_output_delay含义 3.2 set_output_delay参数说明 3.3 使用样例 四、样例工程 4.1 工程代码 4.2 时序报告 五、参考资料 一、…...
![](https://img-blog.csdnimg.cn/3ffc499f046544f19edf4a69f60411e0.png#pic_center)
电阻的基础与应用
文章目录 电阻的基础与应用电阻的介绍与分类电阻介绍电阻的分类碳膜/金属膜电阻厚膜/薄膜电阻功能性电阻(光敏/热敏/压敏)特殊电阻(绕线电阻/水泥电阻/铝壳电阻) 电阻的主要厂家与介绍国外厂家VISHAY(威世)KOA(兴亚)Kyocera(京瓷)…...
![](https://www.ngui.cc/images/no-images.jpg)
5.html表格
<table><tr><th>列1标题</th><th>列2标题</th><th>列3标题</th></tr><tr><td>行1列1</td><td>行1列2</td><td>行1列3</td></tr><tr><td>行2列1</td>…...
![](https://img-blog.csdnimg.cn/18fd3e7af62b4a6da379f0fcfa4c73ad.png)
飞桨EasyDL-Mac本地部署离线SDK-Linux集成Python
前言:本文对使用飞桨EasyDL桌面版实现本地部署物体检测做一下说明 一、训练模型 如何使用飞桨EasyDL桌面版这里就不再赘述,直接参照官方文档进行物体检测模型训练。 飞桨EasyDL桌面版-用零代码开发实现物体检测https://ai.baidu.com/ai-doc/EASYDL/Tl2…...
![](https://www.ngui.cc/images/no-images.jpg)
【kubernetes】Kubernetes中的DaemonSet使用
目录 1 为什么需要DaemonSet2 DaemonSet的Yaml的关键字段3 DaemonSet的使用4 一种自行控制Pod更新的方式5 总结 1 为什么需要DaemonSet Deployment可以用于部署无状态的应用,例如系统的接口层或者逻辑层,而多个Pod可以用于负载均衡和容灾。如果有这样一…...
![](https://img-blog.csdnimg.cn/img_convert/b04cca13733e2b92955eb791f7645a14.jpeg#pic_center)
《 新手》web前端(axios)后端(java-springboot)对接简解
文章目录 <font color red>1.何为前后端对接?2.对接中关于http的关键点2.1. 请求方法2.2. 请求参数设置简解: 3.对接中的跨域(CROS)问题**为什么后端处理跨域尽量在业务之前进行?**3.总结 1.何为前后端对接? “前后端对接” 是指前端和后端两个…...
![](https://img-blog.csdnimg.cn/da5db259884c41b49811b5bb76ec376f.png)
第七章 查找 十、散列查找
一、哈希表(散列表) 哈希表的数据元素的关键字与其存储地址直接相关。 二、解决冲突的方法 三、散列表中元素的查找 总共对比了3个关键字,所以查找长度为3. 四、查找效率计算 (1)成功的概率 需要对比一次的关键字为…...
![](https://www.ngui.cc/images/no-images.jpg)
第一章 C语言知识补充
求字节数运算符:sizeof 强制类型转换运算符:(类型) 下标运算符:[ ] 函数调用运算符:( ) 算术移位指令 算术移位指令有:算术左移SAL和算术右移SAR。算术移位指令的功能描述如下:…...
![](https://www.ngui.cc/images/no-images.jpg)
【Book And Paper 】
【paper Interactive Segmentation of Radiance Fields 算法设计: 电子版...
![](https://img-blog.csdnimg.cn/42cfbdfb7ea3483dae12a00e17409fb4.png#pic_center)
计算机竞赛 深度学习疲劳检测 驾驶行为检测 - python opencv cnn
文章目录 0 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习加…...
![](https://www.ngui.cc/images/no-images.jpg)
代码随想录 动态规划 13
300. 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子…...
![](https://img-blog.csdnimg.cn/6a8fffae84a14147b2a2738bd152ed62.png)
lv6 嵌入式开发-Flappy bird项目
目录 1 项目功能总结 2 知识储备: 3 项目框图 4 Ncurses库介绍 做Flappy bird项目有什么用? 1. 复习、巩固c语言知识 2. 培养做项目的逻辑思维能力 3. 具备开发简单小游戏的能力 学会了Flappy bird项目,贪吃蛇和推房子两款小游戏也可…...
![](https://www.ngui.cc/images/no-images.jpg)
【Java】方法重写
概述 子类中出现了和父类一模一样的方法 当子类需要父类的功能,而功能主体中,子类有自己独特的内容,就可以通过重写父类中的方法,这样即延续了父类的功能,又定义了自己的特有内容 Override 是一个注解,可以…...
![](https://img-blog.csdnimg.cn/d0d2ba140ea9444597be4b6b3931f925.png#pic_center)
艺术表现形式
abstract expressionism 抽象表现主义 20世纪中期的一种艺术运动,包括多种风格和技巧,特别强调艺术家通过非传统和通常非具象的手段表达态度和情感的自由。 抽象表现主义用有力的笔触和滴落的颜料来表达情感和自发性。 简单地结合“abstract expression…...
![](https://www.ngui.cc/images/no-images.jpg)
PHP 反序列化漏洞:手写序列化文本
文章目录 参考环境序列化文本Scalar Type整数浮点数布尔值字符串 Compound Type数组数据结构序列化文本 对象数据结构序列化文本 Special TypeNULL数据结构序列化文本 手写序列化文本过程中的注意事项个数描述须于现实相符序列化文本前缀的大小写变化符号公共属性 参考 项目描…...
![](https://img-blog.csdnimg.cn/0e3b6bbbee2348a9bcf190695c3bb9d3.png)
react.js在visual code 下的hello World
想学习reacr.js ,就开始做一个hello world。 我的环境是visual code ,所以我找这个环境下的例子。参照: https://code.visualstudio.com/docs/nodejs/reactjs-tutorial 要学习react.js ,还得先安装node.js,我在visual …...
![](https://img-blog.csdnimg.cn/b5081ccda01d4f679770fab6d051f74d.png#pic_center)
CocosCreator3.8研究笔记(二十四)CocosCreator 动画系统-动画编辑器实操-关键帧实现动态水印动画效果
上一篇,我们介绍了动画编辑器相关功能面板说明,感兴趣的朋友可以前往阅读: CocosCreator3.8研究笔记(二十三)CocosCreator 动画系统-动画编辑器相关功能面板说明。 熟悉了动画编辑器的基础操作,那么再使用动…...
![](https://img-blog.csdnimg.cn/08841096280d4d64bbf560096c9e3249.gif)
第1篇 目标检测概述 —(3)YOLO系列算法
前言:Hello大家好,我是小哥谈。YOLO(You Only Look Once)系列算法是一种目标检测算法,主要用于实时物体检测。相较于传统的目标检测算法,YOLO具有更快的检测速度和更高的准确率。YOLO系列算法的核心思想是将…...
![](https://img-blog.csdnimg.cn/0f63d729b1894679a65afb023a0b07ec.png)
SpringBoot整合数据库连接
JDBC 1、SQL准备 DROP TABLE IF EXISTS t_book;CREATE TABLE t_book (book_id int(11) NOT NULL,book_name varchar(255) DEFAULT NULL,price int(11) DEFAULT NULL,stock int(11) DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;/*Data for the table t_book */insert…...
![](https://img-blog.csdnimg.cn/a5b09608bef64a07ade8612a79f68de3.png)
uni-app:canvas-绘制图形4(获取画布宽高,根据画布宽高进行图形绘制)
效果 代码 var width ; var height ; const query uni.createSelectorQuery(); //获取宽度 query.select(#firstCanvas).fields({ size: true }, (res) > { width res.width; height res.height; }).exec(); console.log(宽度width); console.log(高…...
![](http://common.cnblogs.com/images/copycode.gif)
wordpress 注册体验/石家庄市人民政府官网
在EXT的SDK中包含有一篇文章写的很好,可以作为广大初学EXT的ITer们的必读文章,因为全文都是英文,读起来非常不方便,所以在这里将该篇文章用本人的语言压缩成以下的博文:(仅供参考) 原文地址请参…...
![](https://img-blog.csdnimg.cn/20210108144410994.png)
wordpress 打卡/如何制作网站和网页
OpenSSH 是安全 Shell (SSH) 工具的开放源代码版本,Linux 及其他非 Windows 系统的管理员使用此类工具跨平台管理远程系统。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据。 Microsoft官方说明:OpenSSH 已…...
![](/images/no-images.jpg)
手机游戏网站建设/全网推广怎么做
子曰:“学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎?” 曾子曰:“吾日三省吾身:为人谋而不忠乎?与朋友交而不信乎?传不习乎?” 子曰…...
![](https://img-blog.csdnimg.cn/img_convert/db6582a2b5a11642db3530141cf9af84.png)
余姚网站建设 熊掌号/seo网站推广费用
大家好,我们今日讲解“利用XMLHTTP抓取百度查询关键词结果的个数”,这节内容是“VBA信息获取与处理”教程中第六个专题“VBA中利用XMLHTTP完成网抓数据”的第二节。第二节 利用XMLHTTP抓取百度查询关键词结果的个数在上一讲中我们讲解了一些常用的概念,以…...
![](/images/no-images.jpg)
b站推广计划/最新百度关键词排名
我必须在表target_table中插入/更新一些RECORDS.这些记录来了一个source_table.我正在使用MERGE来更新/插入到target_table中.查询如下MERGEINTO target_table tgtUSING source_table srcON ( src.column1 tgt.column1 andsrc.column2 tgt.column2)WHEN MATCHEDTHENUPDATESET…...
![](/images/no-images.jpg)
怎么做拍卖网站/最近新闻小学生摘抄
Kafka事务 说到事务,我们都知道传统数据库,比如Oracle和Mysql,都是支持事务的,在一个事务中的所有的数据库操作,要么全部成功,要么全部失败,先看一下下面的伪代码: begin transacti…...