CW32实时时钟(RTC)介绍_rtc 上午 下午-程序员宅基地

技术标签: stm32  实时音视频  Powered by 金山文档  单片机  

实时时钟(RTC)是一个专用的计数器 / 定时器,可提供日历信息,包括小时、分钟、秒、日、月份、年份以及星期。RTC 具有两个独立闹钟,时间、日期可组合设定,可产生闹钟中断,并通过引脚输出;支持时间戳功能,可通过引脚触发,记录当前的日期和时间,同时产生时间戳中断;支持周期中断;支持自动唤醒功能,可产生中断并通过引脚输出;支持1Hz 方波和RTCOUT 输出功能;支持内部时钟校准补偿。

CW32L083 内置经独立校准的 32kHz 频率的 RC 时钟源,为 RTC 提供驱动时钟,RTC 可在深度休眠模式下运行, 适用于要求低功耗的应用场合。

RTC功能框图

RTC 时钟源RTCCLK 通过CR1寄存器进行选择,可选源为LSE、LSI和 HSE分频时钟。

主要功能

实时时钟 (RTC) 主要由专用的高精度 RTC 定时器组成,时钟源可选择外部低速时钟 LSE 或内部低速时钟 LSI,当选择外部高速时钟 HSE 时,因精度受限只能用作一般定时 / 计数器。

时间寄存器 RTC_TIME 和日期寄存器 RTC_DATE,以 BCD 码格式分别记录当前的时间和日期值,在对其写入时会自动进行合法性检查,任何非法的时间或日期值将不能被写入,如 32 日、2A 时、61 秒、13 月等。

日期寄存器 RTC_DATE 中,YEAR 位域表示年,有效值 0 ~ 99;MONTH 位域表示月,有效值 1 ~ 12;DAY 位域表 示日,有效值 1 ~ 31;WEEK 位域表示星期,有效值 0 ~ 6,其中 0 表示星期日,1 ~ 6 表示星期一至星期六。

时间寄存器 RTC_TIME 中,SECOND 位域表示秒,有效值 0 ~ 59;MINUTE 位域表示分,有效值 0 ~ 59;HOUR 位域代表小时,有效值为 1 ~ 12 或 0 ~ 23;HOUR 位域的最高位代表 AM/PM(上午 / 下午):- ‘0’表示 AM - ‘1’表示 PM HOUR。控制寄存器 RTC_CR0 的 H24 位域用于选择 12 或 24 小时制:• H24 为‘1’时,选择 24 时制 • H24 为‘0’时,选择 12 时制。HOUR位域值含义详细见下表:

其他功能

1.闹钟 A 和闹钟 B

RTC 支持 2 个独立闹钟(闹钟 A 和闹钟 B),可在一周内任意时刻产生闹钟事件,并产生闹钟中断,同时将闹钟匹配事件通过外部 RTC_OUT 引脚输出。设置控制寄存器 RTC_CR2 的 ALARMAEN 和 ALARMBEN 位域为 1,可分别单独使能闹钟 A 和闹钟 B。通过设置闹钟 A、B 控制寄存器(RTC_ALARMA 和 RTC_ALARMB)的时、分、秒匹配控制位 HOUREN、 MINUTEEN、SECONDEN 和时、分、秒计数值 HOUR、MINUTE、SECOND,可设定闹钟在‘xx 时 xx 分 xx 秒’, 或‘xx 分 xx 秒’或‘xx 时 xx 分’或‘xx 时’等多种组合产生闹钟事件;闹钟星期使能控制位 WEEKMASK,可选择一周中的任意一天产生闹钟事件,bit0 代表星期日,bit1 ~ 6 代表星期一至星期六。采用 12 或 24 小时制,闹钟控制寄存器 RTC_ALARMx(x = A, B) 的设置值可能不同,示例如下表:

2.周期中断功能:RTC 内置周期中断模块,可产生固定周期的中断信号。

3.自动唤醒功能

自动唤醒定时器是一个 16 位可编程自动重载减法计数器,计数时钟源为RTCCLK或者RTC1HZ时钟。定时范围为:61μs ~ 145h。当计数器溢出时,可产生自动唤醒中断,并将溢出标志通过 RTC_OUT 引脚输出。设置控制寄存器 RTC_CR2 的 AWTEN 位域为 1 使能自动唤醒功能,该功能专为低功耗应用场合而设计,可工作于 MCU 的全部工作模式。

自动唤醒定时器计数周期由计数时钟源和重载寄存器 RTC_AWTARR 决定,定时时长计算公式为:自动唤醒定时器定时周期 =(RTC_AWTARR+1)/ 唤醒定时器计数时钟频率 最短定时:( 0+1 ) / 16384Hz = 61μs 最长定时:(65535+1) / 0.125Hz = 524288s = 8738min ≈ 145.63h 通过 RTC 中断使能寄存器 RTC_IER 的 AWTIMER 位域,可选择自动唤醒定时器溢出时是否产生中断请求。

4.时间戳功能

RTC 支持时间戳功能,即通过 RTC_TAMP 引脚触发,将当前时间和日期分别保存到时间戳日期寄存器 RTC_TAMPDATE 和时间戳时间寄存器 RTC_TAMPTIM,同时可产生时间戳中断。控制寄存器 RTC_CR2 的 TAMPEDGE 位域用来选择触发时间戳的信号是上升沿还是下降沿有效,RTC_CR2 寄存 器的 TAMPEN 位域用于使能时间戳功能。用户可灵活选择触发引脚 RTC_TAMP,并需配置该引脚为数字输入和复用功能,具体 RTC_TAMP 引脚请参考数据手册引脚定义。当发生时间戳事件时,时间戳事件标志位 RTC_ISR.TAMP 会被置 1,如果设置了时间戳中断使能位 RTC_IER.TAMP 为 1,将产生中断请求。如果发生第一次时间戳事件后,未通过软件清除 RTC_ISR.TAMP 标志位,又产生了第二次时间戳事件,时间戳溢出标志位 RTC_ISR.TAMPOV 会被置 1,如果设置了时间戳溢出中断使能位 RTC_IER.TAMPOV 为 1,将产生中断请求。

实际例程操作——RTC初始化,日期时间读取,间隔中断,闹钟设置

1.系统时钟初始化设置

void RCC_Configuration(void)
{
RCC_HSI_Enable(RCC_HSIOSC_DIV6);   //设置系统时钟为8M
RCC_LSE_Enable(RCC_LSE_MODE_OSC, RCC_LSE_AMP_NORMAL, RCC_LSE_DRIVER_NORMAL); 
// 打开LSE时钟,作为RTC的计数时钟
RCC_APBPeriphClk_Enable1(RCC_APB1_PERIPH_RTC, ENABLE);  //打开RTC模块工作时钟
}

2.配置输出时间所需GPIO口以及串口UART配置

void LogInit(void)
{
    SerialInit(LOG_SERIAL_BPS);
}
static void SerialInit(uint32_t BaudRate)
{
    uint32_t PCLK_Freq;
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    UART_InitTypeDef UART_InitStructure = {0};
    PCLK_Freq = SystemCoreClock >> pow2_table[CW_SYSCTRL->CR0_f.HCLKPRS];
    PCLK_Freq >>= pow2_table[CW_SYSCTRL->CR0_f.PCLKPRS];

    // 调试串口使用UART5//    PB8->TX//  PB9<-RX// 时钟使能
    __RCC_GPIOB_CLK_ENABLE();
    __RCC_UART5_CLK_ENABLE();
// 先设置UART TX RX 复用,后设置GPIO的属性,避免口线上出现毛刺
    PB08_AFx_UART5TXD();
    PB09_AFx_UART5RXD();
    PIO_InitStructure.Pins = GPIO_PIN_8;
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_Init(CW_GPIOB, &GPIO_InitStructure);
    GPIO_InitStructure.Pins = GPIO_PIN_9;
    GPIO_InitStructure.Mode = GPIO_MODE_INPUT;
    GPIO_Init(CW_GPIOB, &GPIO_InitStructure);

    UART_InitStructure.UART_BaudRate = BaudRate;// 波特率
    UART_InitStructure.UART_Over = UART_Over_16;// 采样方式
    UART_InitStructure.UART_Source = UART_Source_PCLK;// 传输时钟源UCLK
    UART_InitStructure.UART_UclkFreq = PCLK_Freq;// 传输时钟UCLK频率
    UART_InitStructure.UART_StartBit = UART_StartBit_FE;// 起始位判定方式
    UART_InitStructure.UART_StopBits = UART_StopBits_1;// 停止位长度
    UART_InitStructure.UART_Parity = UART_Parity_No;// 校验方式
UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;
//硬件流控  
UART_InitStructure.UART_Mode = UART_Mode_Rx | UART_Mode_Tx; // 发送/接收使能
    UART_Init(CW_UART5, &UART_InitStructure);
}

3.设置输出时间日期格式

void ShowTime(void)
{
    RTC_TimeTypeDef RTC_TimeStruct = {0};
    RTC_DateTypeDef RTC_DateStruct = {0};
    static uint8_t *WeekdayStr[7]= {"SUN","MON","TUE","WED","THU","FRI","SAT"};
    static uint8_t *H12AMPMStr[2][2]= {
    {"AM","PM"},{"",""}};

    RTC_GetDate(&RTC_DateStruct);// 取用当前日期,BCD格式
    RTC_GetTime(&RTC_TimeStruct);// 获取当前时间,BCD格式
printf(".Date is 20%02x/%02x/%02x(%s).Time is %02x%s:%02x:%02x\r\n", RTC_DateStruct.Year, RTC_DateStruct.Month, RTC_DateStruct.Day, WeekdayStr[RTC_DateStruct.Week], RTC_TimeStruct.Hour, H12AMPMStr[RTC_TimeStruct.H24][RTC_TimeStruct.AMPM],RTC_TimeStruct.Minute, RTC_TimeStruct.Second);//串口打印数据
}

Void RTC_GetDate(RTC_DateTypeDef* RTC_Date)
{
    uint32_t RegTmp = 0;

    RegTmp = CW_RTC->DATE;
    while (RegTmp != CW_RTC->DATE)
    {
        RegTmp = CW_RTC->DATE;    // 连续两次读取的内容一致,认为读取成功
    }
    RTC_Date->Day = (uint8_t)(RegTmp & RTC_DATE_DAY_Msk);
    RTC_Date->Month = (uint8_t)((RegTmp & RTC_DATE_MONTH_Msk) >> 8);
    RTC_Date->Year = (uint8_t)((RegTmp & RTC_DATE_YEAR_Msk) >> 16);
    RTC_Date->Week = (uint8_t)((RegTmp & RTC_DATE_WEEK_Msk) >> 24);
}

Void RTC_GetTime(RTC_TimeTypeDef* RTC_TimeStruct)
{
    uint32_t RegTmp = 0;
    RTC_TimeStruct->H24 = CW_RTC->CR0_f.H24;  // 读CR0是否需要连读两次,待硬件检测
    RegTmp = CW_RTC->TIME;
    while (RegTmp != CW_RTC->TIME)
    {
        RegTmp = CW_RTC->TIME;    // 连续两次读取的内容一致,认为读取成功
    }
    RTC_TimeStruct->Hour = (uint8_t)((RegTmp & RTC_TIME_HOUR_Msk) >> 16);
    RTC_TimeStruct->Minute = (uint8_t)((RegTmp & RTC_TIME_MINUTE_Msk) >> 8);
    RTC_TimeStruct->Second = (uint8_t)(RegTmp & RTC_TIME_SECOND_Msk);
    if (RTC_TimeStruct->H24 == RTC_HOUR12)
    {
        RTC_TimeStruct->AMPM = RTC_TimeStruct->Hour >> 5;
        RTC_TimeStruct->Hour &= 0x1f;
    }
}

4.RTC模块初始化,ErrorStatus 返回值为SUCCESS或ERROR

ErrorStatus RTC_Init(RTC_InitTypeDef* RTC_InitStruct)
{
    CW_SYSCTRL->APBEN1_f.RTC = 1;            //  启动RTC外设时钟,使能RTC模块
    if ((RCC_GetAllRstFlag() & SYSCTRL_RESETFLAG_POR_Msk) != RCC_FLAG_PORRST)  //不是上电复位,直接退出
    {    
        RCC_ClearRstFlag(RCC_FLAG_ALLRST);        
        return SUCCESS;    
    }
    RTC_Cmd(DISABLE);                        //  停止RTC,保证正确访问RTC寄存器
    RTC_SetClockSource(RTC_InitStruct->RTC_ClockSource);        // 设置RTC时钟源, 用户需首先启动RTC时钟源!!!
    RTC_SetDate(&RTC_InitStruct->DateStruct);// 设置日期,DAY、MONTH、YEAR必须为BCD方,星期为0~6,代表星期日,星期一至星期六
    RTC_SetTime(&RTC_InitStruct->TimeStruct); //时间,HOUR、MINIUTE、SECOND必须为BCD方式,用户须保证HOUR、AMPM、H24之间的关联正确性
    RTC_Cmd(ENABLE);
    RCC_ClearRstFlag(RCC_FLAG_ALLRST);  
    return SUCCESS;
}

5.RTC周期中断时间设置

int RTC_SetInterval(uint8_t Period)
{
    uint16_t timeout = 0xffff;

    RTC_UNLOCK();
    if (IS_RTC_START())         // 如果RTC正在运行,则使用WINDOWS、ACCESS访问
    {
        CW_RTC->CR1_f.ACCESS = 1;        
        while ((!CW_RTC->CR1_f.WINDOW) && timeout--);
        if (timeout == 0) return 1;

    }
    CW_RTC->CR0_f.INTERVAL = Period;
    CW_RTC->CR1_f.ACCESS = 0;
    RTC_LOCK();
    return 0;
}

6.设置时钟中断使能

int RTC_ITConfig(uint32_t RTC_IT, FunctionalState NewState)
{
    uint16_t timeout = 0xffff;
    
    RTC_UNLOCK();
    CW_RTC->CR1_f.ACCESS = 1;
    while ((!CW_RTC->CR1_f.WINDOW) && timeout--);
    if (timeout == 0) return 1;
    if (!NewState)
    {
        CW_RTC->IER &= ~RTC_IT;
    }
    else
    {
        CW_RTC->IER |= RTC_IT;
    }
    CW_RTC->CR1_f.ACCESS = 0;
    RTC_LOCK();
    return 0;
}

void RTC_IRQHandlerCallBack(void)
{
    if (RTC_GetITState(RTC_IT_ALARMA))
    {
        RTC_ClearITPendingBit(RTC_IT_ALARMA);
        printf("*********Alarm!!!!\r\n");
    }
    if (RTC_GetITState(RTC_IT_INTERVAL))
    {
        RTC_ClearITPendingBit(RTC_IT_INTERVAL);
        ShowTime();
}

void NVIC_Configuration(void)
{
    __disable_irq();
    NVIC_EnableIRQ(RTC_IRQn);
    __enable_irq();
}

7.RTC时钟测试,初始化日历,使用间隔中断0.5秒通过Log输出日期时间

int32_t main(void)
{
    RTC_InitTypeDef RTC_InitStruct = {0};
    RTC_AlarmTypeDef RTC_AlarmStruct = {0};
    /*系统时钟配置*/
    RCC_Configuration();
    /* GPIO 口配置*/
    GPIO_Configuration();
 LogInit();//配置输出时间所需GPIO口以及串口UART配置
    printf("RTC Init...\r\n");
printf(" (RTC CR0:%04x,CR1:%04x,CR2:%04x,RESET FLAG:0x%08x)\r\n",CW_RTC->CR0,CW_RTC->CR1,CW_RTC->CR2,CW_SYSCTRL->RESETFLAG);
RCC_LSE_Enable(RCC_LSE_MODE_OSC, RCC_LSE_AMP_NORMAL, RCC_LSE_DRIVER_NORMAL);  // 选择LSE为RTC时钟
RTC_InitStruct.DateStruct.Day = 0x21;             //日
RTC_InitStruct.DateStruct.Month = RTC_Month_June;//月
RTC_InitStruct.DateStruct.Week = RTC_Weekday_Monday;//星期
RTC_InitStruct.DateStruct.Year = 0x21; //年
//设置日期,DAY、MONTH、YEAR必须为BCD方式,星期为0~6,代表星期日,星期一至星期六
printf("-------Set Date as 20%x/%x/%x\r\n", RTC_InitStruct.DateStruct.Year,RTC_InitStruct.DateStruct.Month,RTC_InitStruct.DateStruct.Day);
//打印日期
RTC_InitStruct.TimeStruct.Hour = 0x11;   //时      
RTC_InitStruct.TimeStruct.Minute = 0x58;//分
RTC_InitStruct.TimeStruct.Second = 0x59;//秒
RTC_InitStruct.TimeStruct.AMPM = 0;
RTC_InitStruct.TimeStruct.H24 = 0; //采用12小时设置
//设置时间,HOUR、MINIUTE、SECOND必须为BCD方式,用户须保证HOUR、AMPM、H24之间的关联正确性
printf("-------Set Time as %02x:%02x:%02x\r\n", RTC_InitStruct.TimeStruct.Hour,RTC_InitStruct.TimeStruct.Minute,RTC_InitStruct.TimeStruct.Second);//打印时间
RTC_InitStruct.RTC_ClockSource = RTC_RTCCLK_FROM_LSE;
RTC_Init(&RTC_InitStruct);    // RTC模块初始化, 用户需选定需要使用的时钟源
printf("=====Set interval period as 0.5s...\r\n");
RTC_SetInterval(RTC_INTERVAL_EVERY_0_5S);
//闹钟为工作日上午的6:45
RTC_AlarmStruct.RTC_AlarmMask = RTC_AlarmMask_WeekMON | RTC_AlarmMask_WeekTUE |
RTC_AlarmMask_WeekWED | RTC_AlarmMask_WeekTHU |RTC_AlarmMask_WeekFRI;
//设定时间为周一到周五
RTC_AlarmStruct.RTC_AlarmTime.Hour = 6;
RTC_AlarmStruct.RTC_AlarmTime.Minute = 0x45;
RTC_AlarmStruct.RTC_AlarmTime.Second = 0;
RTC_SetAlarm(RTC_Alarm_A, &RTC_AlarmStruct);   // 设置闹钟,BCD格式
RTC_AlarmCmd(RTC_Alarm_A, ENABLE);//使能闹钟
printf("=====Enable ALRAMA and INTERVAL IT...\r\n");
RTC_ITConfig(RTC_IT_ALARMA | RTC_IT_INTERVAL, ENABLE);
//设置中断使能
While(1){}
}

8.通过UART串口验证RTC工作正常

以上是CW32L083单片机的RTC设置时间及闹钟部分的介绍,CW32其他型号亦可参考此篇文档。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/whxyMCU/article/details/128630604

智能推荐

从零开始搭建Hadoop_创建一个hadoop项目-程序员宅基地

文章浏览阅读331次。第一部分:准备工作1 安装虚拟机2 安装centos73 安装JDK以上三步是准备工作,至此已经完成一台已安装JDK的主机第二部分:准备3台虚拟机以下所有工作最好都在root权限下操作1 克隆上面已经有一台虚拟机了,现在对master进行克隆,克隆出另外2台子机;1.1 进行克隆21.2 下一步1.3 下一步1.4 下一步1.5 根据子机需要,命名和安装路径1.6 ..._创建一个hadoop项目

心脏滴血漏洞HeartBleed CVE-2014-0160深入代码层面的分析_heartbleed代码分析-程序员宅基地

文章浏览阅读1.7k次。心脏滴血漏洞HeartBleed CVE-2014-0160 是由heartbeat功能引入的,本文从深入码层面的分析该漏洞产生的原因_heartbleed代码分析

java读取ofd文档内容_ofd电子文档内容分析工具(分析文档、签章和证书)-程序员宅基地

文章浏览阅读1.4k次。前言ofd是国家文档标准,其对标的文档格式是pdf。ofd文档是容器格式文件,ofd其实就是压缩包。将ofd文件后缀改为.zip,解压后可看到文件包含的内容。ofd文件分析工具下载:点我下载。ofd文件解压后,可以看到如下内容: 对于xml文件,可以用文本工具查看。但是对于印章文件(Seal.esl)、签名文件(SignedValue.dat)就无法查看其内容了。本人开发一款ofd内容查看器,..._signedvalue.dat

基于FPGA的数据采集系统(一)_基于fpga的信息采集-程序员宅基地

文章浏览阅读1.8w次,点赞29次,收藏313次。整体系统设计本设计主要是对ADC和DAC的使用,主要实现功能流程为:首先通过串口向FPGA发送控制信号,控制DAC芯片tlv5618进行DA装换,转换的数据存在ROM中,转换开始时读取ROM中数据进行读取转换。其次用按键控制adc128s052进行模数转换100次,模数转换数据存储到FIFO中,再从FIFO中读取数据通过串口输出显示在pc上。其整体系统框图如下:图1:FPGA数据采集系统框图从图中可以看出,该系统主要包括9个模块:串口接收模块、按键消抖模块、按键控制模块、ROM模块、D.._基于fpga的信息采集

微服务 spring cloud zuul com.netflix.zuul.exception.ZuulException GENERAL-程序员宅基地

文章浏览阅读2.5w次。1.背景错误信息:-- [http-nio-9904-exec-5] o.s.c.n.z.filters.post.SendErrorFilter : Error during filteringcom.netflix.zuul.exception.ZuulException: Forwarding error at org.springframework.cloud..._com.netflix.zuul.exception.zuulexception

邻接矩阵-建立图-程序员宅基地

文章浏览阅读358次。1.介绍图的相关概念  图是由顶点的有穷非空集和一个描述顶点之间关系-边(或者弧)的集合组成。通常,图中的数据元素被称为顶点,顶点间的关系用边表示,图通常用字母G表示,图的顶点通常用字母V表示,所以图可以定义为:  G=(V,E)其中,V(G)是图中顶点的有穷非空集合,E(G)是V(G)中顶点的边的有穷集合1.1 无向图:图中任意两个顶点构成的边是没有方向的1.2 有向图:图中..._给定一个邻接矩阵未必能够造出一个图

随便推点

MDT2012部署系列之11 WDS安装与配置-程序员宅基地

文章浏览阅读321次。(十二)、WDS服务器安装通过前面的测试我们会发现,每次安装的时候需要加域光盘映像,这是一个比较麻烦的事情,试想一个上万个的公司,你天天带着一个光盘与光驱去给别人装系统,这将是一个多么痛苦的事情啊,有什么方法可以解决这个问题了?答案是肯定的,下面我们就来简单说一下。WDS服务器,它是Windows自带的一个免费的基于系统本身角色的一个功能,它主要提供一种简单、安全的通过网络快速、远程将Window..._doc server2012上通过wds+mdt无人值守部署win11系统.doc

python--xlrd/xlwt/xlutils_xlutils模块可以读xlsx吗-程序员宅基地

文章浏览阅读219次。python–xlrd/xlwt/xlutilsxlrd只能读取,不能改,支持 xlsx和xls 格式xlwt只能改,不能读xlwt只能保存为.xls格式xlutils能将xlrd.Book转为xlwt.Workbook,从而得以在现有xls的基础上修改数据,并创建一个新的xls,实现修改xlrd打开文件import xlrdexcel=xlrd.open_workbook('E:/test.xlsx') 返回值为xlrd.book.Book对象,不能修改获取sheett_xlutils模块可以读xlsx吗

关于新版本selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘等问题_unresolved attribute reference 'find_element_by_id-程序员宅基地

文章浏览阅读8.2w次,点赞267次,收藏656次。运行Selenium出现'WebDriver' object has no attribute 'find_element_by_id'或AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath'等定位元素代码错误,是因为selenium更新到了新的版本,以前的一些语法经过改动。..............._unresolved attribute reference 'find_element_by_id' for class 'webdriver

DOM对象转换成jQuery对象转换与子页面获取父页面DOM对象-程序员宅基地

文章浏览阅读198次。一:模态窗口//父页面JSwindow.showModalDialog(ifrmehref, window, 'dialogWidth:550px;dialogHeight:150px;help:no;resizable:no;status:no');//子页面获取父页面DOM对象//window.showModalDialog的DOM对象var v=parentWin..._jquery获取父window下的dom对象

什么是算法?-程序员宅基地

文章浏览阅读1.7w次,点赞15次,收藏129次。算法(algorithm)是解决一系列问题的清晰指令,也就是,能对一定规范的输入,在有限的时间内获得所要求的输出。 简单来说,算法就是解决一个问题的具体方法和步骤。算法是程序的灵 魂。二、算法的特征1.可行性 算法中执行的任何计算步骤都可以分解为基本可执行的操作步,即每个计算步都可以在有限时间里完成(也称之为有效性) 算法的每一步都要有确切的意义,不能有二义性。例如“增加x的值”,并没有说增加多少,计算机就无法执行明确的运算。 _算法

【网络安全】网络安全的标准和规范_网络安全标准规范-程序员宅基地

文章浏览阅读1.5k次,点赞18次,收藏26次。网络安全的标准和规范是网络安全领域的重要组成部分。它们为网络安全提供了技术依据,规定了网络安全的技术要求和操作方式,帮助我们构建安全的网络环境。下面,我们将详细介绍一些主要的网络安全标准和规范,以及它们在实际操作中的应用。_网络安全标准规范

推荐文章

热门文章

相关标签