ESP32中定时计数器的使用

2023-11-01

一、GPIO常用函数

esp_err_t gpio_reset_pin(gpio_num_tgpio_num)

将 gpio 重置为默认状态(选择 gpio 功能、启用上拉并禁用输入和输出)。备注此功能还将此引脚的 IOMUX 配置为 GPIO 功能,并断开通过 GPIO 矩阵配置的任何其他外设输出。参数gpio_num – GPIO 编号。返回始终返回ESP_OK。

esp_err_t gpio_set_intr_type(gpio_num_tgpio_num,gpio_int_type_tintr_type)

GPIO 设置中断触发器类型。参数gpio_num – GPIO 编号。如果要设置触发器类型,例如 GPIO16,则应gpio_num GPIO_NUM_16 (16);intr_type– 中断类型,从gpio_int_type_t中选择返回ESP_OK成功ESP_ERR_INVALID_ARG 参数错误

esp_err_t gpio_intr_enable(gpio_num_tgpio_num)

启用 GPIO 模块中断信号。备注ESP32:在启用睡眠模式的情况下使用 ADC 或 Wi-Fi 和蓝牙时,请不要使用 GPIO36 和 GPIO39 的中断。请参考评论。有关此问题的说明,请参阅ESP32 ECO 和 Bug 的解决方法3.11 节。解决方法是在应用中调用 adc_power_acquire()。这将导致更高的功耗(~1mA),但将消除GPIO36和GPIO39上的毛刺。adc1_get_raw参数gpio_num – GPIO 编号。如果要在 GPIO16 上启用中断,则应GPIO_NUM_16 (16) gpio_num;返回ESP_OK成功ESP_ERR_INVALID_ARG 参数错误

esp_err_t gpio_intr_disable(gpio_num_tgpio_num)

禁用 GPIO 模块中断信号。备注当在 ISR 上下文中禁用缓存时,允许通过启用CONFIG_GPIO_CTRL_FUNC_IN_IRAM参数gpio_num – GPIO 编号。如果要禁用例如 GPIO16 的中断,则应GPIO_NUM_16 (16) gpio_num;返回ESP_OK成功ESP_ERR_INVALID_ARG 参数错误

esp_err_t gpio_set_level(gpio_num_tgpio_num,uint32_t级)

GPIO 设置输出电平。备注当在 ISR 上下文中禁用缓存时,允许通过启用CONFIG_GPIO_CTRL_FUNC_IN_IRAM参数gpio_num – GPIO 编号。如果要设置输出电平,例如 GPIO16,则应gpio_num GPIO_NUM_16 (16);级别 – 输出级别。0: 低 ;1:高返回ESP_OK成功ESP_ERR_INVALID_ARG GPIO 编号错误

int gpio_get_level(gpio_num_tgpio_num)

GPIO 获取输入级别。警告如果未为输入(或输入和输出)配置焊盘,则返回值始终为 0。参数gpio_num – GPIO 编号。如果要获得例如引脚GPIO16的逻辑电平,则应gpio_num GPIO_NUM_16(16);返回0 GPIO 输入电平为 01 GPIO 输入电平为 1

esp_err_tgpio_isr_register(void(*fn)(void*),void*arg,int intr_alloc_flags,gpio_isr_handle_t* handle)

注册 GPIO 中断处理程序,处理程序是 ISR。处理程序将附加到运行此函数的同一 CPU 内核。每当发生任何 GPIO 中断时,都会调用此 ISR 函数。请参阅替代 gpio_install_isr_service() 和 gpio_isr_handler_add() API,以使驱动程序支持每个 GPIO ISR。若要禁用或删除 ISR,请将返回的句柄传递给中断分配函数。参数fn – 中断处理程序函数。arg– 处理程序函数的参数intr_alloc_flags– 用于分配中断的标志。一个或多个 (ORred) ESP_INTR_FLAG_* 值。有关详细信息,请参阅 esp_intr_alloc.h。句柄 – 指向返回句柄的指针。如果非 NULL,则将在此处返回中断的句柄。返回ESP_OK成功 ;ESP_ERR_INVALID_ARG GPIO 错误ESP_ERR_NOT_FOUND 未找到具有指定标志的空闲中断

无效gpio_uninstall_isr_service(无效)

卸载驱动程序的 GPIO ISR 服务,释放相关资源。

esp_err_t gpio_isr_handler_add(gpio_num_tgpio_num,gpio_isr_tisr_handler,void*args)

为相应的 GPIO 引脚添加 ISR 处理程序。使用 gpio_install_isr_service() 安装驱动程序的 GPIO ISR 处理程序服务后调用此函数。引脚 ISR 处理程序不再需要使用 IRAM_ATTR 声明,除非您在 gpio_install_isr_service() 中分配 ISR 时传递 ESP_INTR_FLAG_IRAM 标志。将从 ISR 调用此 ISR 处理程序。因此存在堆栈大小限制(可在菜单配置中配置为“ISR 堆栈大小”)。与全局 GPIO 中断处理程序相比,由于间接寻址级别增加,此限制较小。参数gpio_num– GPIO 编号isr_handler – 相应 GPIO 编号的 ISR 处理程序函数。args– ISR 处理程序的参数。返回ESP_OK成功ESP_ERR_INVALID_STATE 状态错误,则 ISR 服务尚未初始化。ESP_ERR_INVALID_ARG 参数错误

esp_err_t gpio_isr_handler_remove(gpio_num_tgpio_num)

删除相应 GPIO 引脚的 ISR 处理程序。参数gpio_num– GPIO 编号返回ESP_OK成功ESP_ERR_INVALID_STATE 状态错误,则 ISR 服务尚未初始化。ESP_ERR_INVALID_ARG 参数错误

struct gpio_config_t

用于gpio_config功能的GPIO垫的配置参数。公共成员

uint64_tpin_bit_mask    //GPIO 引脚:使用位掩码设置,每个位映射到一个 GPIO
gpio_mode_t mode     //GPIO 模式:设置输入/输出模式
gpio_pullup_t pull_up_en    //GPIO 上拉
gpio_pulldown_t pull_down_en    //GPIO 下拉
gpio_int_type_t intr_type

二、定时器函数

通用硬件定时器介绍

esp_err_t esp_timer_early_init(无效)

esp_timer的最小初始化。此函数可以在启动过程的早期调用,在此调用之后只能使用esp_timer_get_time函数。备注此函数从启动代码调用。应用程序在使用其他 esp_timer API 之前不需要调用此函数。返回关于成功的ESP_OK

esp_err_t esp_timer_init(无效)

初始化esp_timer库。备注此函数从启动代码调用。应用程序在使用其他 esp_timer API 之前不需要调用此函数。在调用此函数之前,esp_timer_early_init必须由启动代码调用。返回关于成功的ESP_OKESP_ERR_NO_MEM分配是否失败ESP_ERR_INVALID_STATE(如果已初始化)中断分配器的其他错误

esp_err_t esp_timer_deinit(无效)

取消初始化esp_timer库。备注通常不应从应用程序调用此函数返回关于成功的ESP_OKESP_ERR_INVALID_STATE(如果尚未初始化)

esp_err_tesp_timer_create(常量esp_timer_create_args_t*create_args,esp_timer_handle_t*out_handle)

创建esp_timer实例。备注使用完计时器后,使用esp_timer_delete功能将其删除。参数create_args– 指向具有计时器创建参数的结构的指针。不由库保存,可以在堆栈上分配。out_handle–[out]输出,指向esp_timer_handle_t变量的指针,该变量将保存创建的计时器句柄。返回关于成功的ESP_OKESP_ERR_INVALID_ARG某些create_args是否无效ESP_ERR_INVALID_STATE库是否尚未初始化esp_timerESP_ERR_NO_MEM内存分配失败

esp_err_t esp_timer_start_once(esp_timer_handle_t小时,uint64_t timeout_us)

启动单次计时器。调用此函数时,计时器不应运行。参数计时器 – 使用esp_timer_create创建的计时器句柄timeout_us– 计时器超时,以相对于当前时刻的微秒为单位返回关于成功的ESP_OKESP_ERR_INVALID_ARG句柄是否无效ESP_ERR_INVALID_STATE计时器是否已运行

esp_err_t esp_timer_start_periodic(esp_timer_handle_t定时器,uint64_t周期)

启动定期计时器。调用此函数时,计时器不应运行。此函数将启动计时器,该计时器将触发每“周期”微秒。参数计时器 – 使用esp_timer_create创建的计时器句柄周期 – 计时器周期,以微秒为单位返回关于成功的ESP_OKESP_ERR_INVALID_ARG句柄是否无效ESP_ERR_INVALID_STATE计时器是否已运行

esp_err_t esp_timer_stop(esp_timer_handle_t 小时)

停止计时器。此函数停止之前使用 esp_timer_start_once 或 esp_timer_start_periodic 启动的计时器。参数计时器 – 使用esp_timer_create创建的计时器句柄返回关于成功的ESP_OKESP_ERR_INVALID_STATE计时器是否未运行

esp_err_t esp_timer_delete(esp_timer_handle_t小时))

删除esp_timer实例。删除前必须停止计时器。已过期的单次计时器不需要停止。参数计时器 – 使用 esp_timer_create 分配的计时器句柄返回关于成功的ESP_OKESP_ERR_INVALID_STATE计时器是否正在运行

int64_t esp_timer_get_time(无效)

获取自启动以来的时间(以微秒为单位)。返回自基础计时器启动以来的微秒数

使用方法流程:

单个计时器由esp_timer_handle_t类型表示。计时器有一个与之关联的回调函数。每次计时器经过时,都会从任务中调用此回调函数。esp_timer

请注意,调用 esp_timer_start_once() 或 esp_timer_start_periodic()  时计时器不得运行。要重新启动正在运行的计时器,请先调用 esp_timer_stop(), 然后调用其中一个启动函数。

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/gpio.h"
#include "driver/timer.h"
#include "esp_timer.h"

#define gpio_pin 25

esp_timer_handle_t esp_timer_handle_t1 = 0;


/*定时器中断函数*/
void esp_timer_cb(void *arg){
    /*设置gpio输出高低电平*/
    gpio_set_level(gpio_pin, 1-gpio_get_level(gpio_pin));
}

void gpio_init(void){
    gpio_config_t io_conf;
    //禁止中断
    io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
    //输入输出模式
    io_conf.mode = GPIO_MODE_INPUT_OUTPUT;
    //配置要设置的引脚
    io_conf.pin_bit_mask = (unsigned long long)1<<gpio_pin;
    //禁止下拉
    io_conf.pull_down_en = 0;
    //禁止上拉
    io_conf.pull_up_en = 0;
    //配置gpio(不设置上下拉默认输出低电平)
    gpio_config(&io_conf);

}

void app_main(void)
{ 
    gpio_init();//初始化gpio

    //定时器结构体初始化
    esp_timer_create_args_t esp_timer_create_args_t1 = {
        .callback = &esp_timer_cb, //定时器回调函数
        .arg = NULL, //传递给回调函数的参数
        .name = "esp_timer" //定时器名称
    };

    /*创建定时器*/                      //初始化参数              //定时器句柄,用于后期对定时器做其它操作
    esp_err_t err = esp_timer_create(&esp_timer_create_args_t1, &esp_timer_handle_t1);
    /*以循环方式启动定时器*/           //定时器句柄       //us级定时,1000*1000就是1s
    err = esp_timer_start_periodic(esp_timer_handle_t1, 1000 * 1000);
    /*单次启动*/
    //err = esp_timer_start_once(esp_timer_handle_t1, 1000 * 1000)
    if(err == ESP_OK){
        printf("ok!\r\n");
    }
}

三、计数器函数

xTimerStart(xTimer,xTicksToWait)

BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait );计时器功能由定时服务/守护程序任务提供。许多公共 FreeRTOS 计时器 API 函数通过称为计时器命令队列的队列将命令发送到定时服务任务。timer 命令队列是内核本身的专用代码,应用程序代码无法直接访问。计时器命令队列的长度由configTIMER_QUEUE_LENGTH配置常量设置。xTimerStart() 启动以前使用 xTimerCreate() API 函数创建的计时器。如果计时器已经启动并且已经处于活动状态,则 xTimerStart() 具有与 xTimerReset() API 函数等效的功能。启动计时器可确保计时器处于活动状态。如果计时器同时未停止、删除或重置,则在调用 xTimerStart() 后,与计时器关联的回调函数将调用“n”个时钟周期,其中“n”是计时器定义的时间段。在调度程序启动之前调用 xTimerStart() 是有效的,但是当这样做时,计时器在调度程序启动之前不会实际启动,并且计时器到期时间将相对于调度程序启动的时间,而不是相对于调用 xTimerStart() 的时间。configUSE_TIMERS配置常量必须设置为 1 才能使用 xTimerStart()。用法示例:请参阅 xTimerCreate() API 函数示例使用场景。

参数xTimer– 正在启动/重新启动的计时器的句柄。xTicksToWait– 指定调用任务应保持在“已阻止”状态以等待启动命令成功发送到计时器命令队列的时间(以刻度为单位),如果调用 xTimerStart() 时队列已满。如果在调度程序启动之前调用了 xTimerStart(),则忽略 xTicksToWait。

返回如果启动命令无法发送到计时器命令队列,即使 xTicksToWait 时钟周期已过去,也将返回 pdFAIL。如果命令已成功发送到计时器命令队列,将返回 pdPASS。实际处理命令的时间将取决于定时服务/守护程序任务相对于系统中其他任务的优先级,尽管计时器到期时间相对于实际调用 xTimerStart() 的时间。定时服务/守护程序任务优先级由configTIMER_TASK_PRIORITY配置常量设置。

xTimerStop(xTimer,xTicksToWait)

BaseType_txTimerStop( TimerHandle_t xTimer, TickType_t xTicksToWait );计时器功能由定时服务/守护程序任务提供。许多公共 FreeRTOS 计时器 API 函数通过称为计时器命令队列的队列将命令发送到定时服务任务。timer 命令队列是内核本身的专用代码,应用程序代码无法直接访问。计时器命令队列的长度由configTIMER_QUEUE_LENGTH配置常量设置。xTimerStop() 停止以前使用 xTimerStart()、xTimerReset()、xTimerStartFromISR()、xTimerResetFromISR()、xTimerChangePeriod() 或 xTimerChangePeriodFromISR() API 函数启动的计时器。停止计时器可确保计时器不处于活动状态。configUSE_TIMERS配置常量必须设置为 1 才能使用xTimerStop()。用法示例:请参阅 xTimerCreate() API 函数示例使用场景。

参数xTimer– 正在停止的计时器的句柄。xTicksToWait– 指定调用任务应保持在“已阻止”状态以等待停止命令成功发送到计时器命令队列的时间(以刻度为单位),如果调用xTimerStop() 时队列已满。如果在调度程序启动之前调用了 xTimerStop(),则忽略 xTicksToWait。

返回如果停止命令无法发送到计时器命令队列,即使 xTicksToWait 时钟周期已经过去了,也会返回 pdFAIL。如果命令已成功发送到计时器命令队列,将返回 pdPASS。实际处理命令的时间将取决于定时服务/守护程序任务相对于系统中其他任务的优先级。定时服务/守护程序任务优先级由configTIMER_TASK_PRIORITY配置常量设置。

xTimerDelete(xTimer,xTicksToWait)

BaseType_t xTimerDelete( TimerHandle_t xTimer, TickType_t xTicksToWait );计时器功能由定时服务/守护程序任务提供。许多公共 FreeRTOS 计时器 API 函数通过称为计时器命令队列的队列将命令发送到定时服务任务。timer 命令队列是内核本身的专用代码,应用程序代码无法直接访问。计时器命令队列的长度由configTIMER_QUEUE_LENGTH配置常量设置。xTimerDelete() 删除以前使用 xTimerCreate() API 函数创建的计时器。configUSE_TIMERS配置常量必须设置为 1 才能使用 xTimerDelete()。用法示例:请参阅 xTimerChangePeriod() API 函数示例使用场景。

参数xTimer– 要删除的计时器的句柄。xTicksToWait– 指定调用任务应保持在“已阻止”状态以等待删除命令成功发送到计时器命令队列的时间(以刻度为单位),前提是调用 xTimerDelete() 时队列已满。如果在调度程序启动之前调用 xTimerDelete(),则忽略 xTicksToWait。

返回如果删除命令无法发送到计时器命令队列,即使 xTicksToWait 时钟周期已经过去了,也会返回 pdFAIL。如果命令已成功发送到计时器命令队列,将返回 pdPASS。实际处理命令的时间将取决于定时服务/守护程序任务相对于系统中其他任务的优先级。定时服务/守护程序任务优先级由configTIMER_TASK_PRIORITY配置常量设置。

xTimerReset(xTimer,xTicksToWait)

BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait );计时器功能由定时服务/守护程序任务提供。许多公共 FreeRTOS 计时器 API 函数通过称为计时器命令队列的队列将命令发送到定时服务任务。timer 命令队列是内核本身的专用代码,应用程序代码无法直接访问。计时器命令队列的长度由configTIMER_QUEUE_LENGTH配置常量设置。xTimerReset() 重新启动以前使用 xTimerCreate() API 函数创建的计时器。如果计时器已经启动并且已经处于活动状态,则 xTimerReset() 将导致计时器重新评估其到期时间,使其相对于调用 xTimerReset() 的时间。如果计时器处于休眠状态,则 xTimerReset() 具有与 xTimerStart() API 函数等效的功能。重置计时器可确保计时器处于活动状态。如果计时器没有同时停止、删除或重置,则在调用 xTimerReset() 后,与计时器关联的回调函数将被称为 'n' 刻度,其中 'n' 是计时器定义的时间段。在调度程序启动之前调用 xTimerReset() 是有效的,但是当这样做时,计时器在调度程序启动之前不会真正启动,并且计时器到期时间将相对于调度程序启动的时间,而不是相对于调用 xTimerReset() 的时间。configUSE_TIMERS配置常量必须设置为 1 才能使用 xTimerReset()。

参数

xTimer– 正在重置/启动/重新启动的计时器的句柄。xTicksToWait– 指定调用任务应保持在“已阻止”状态以等待重置命令成功发送到计时器命令队列的时间(以刻度为单位),如果在调用 xTimerReset() 时队列已满。如果在调度程序启动之前调用了 xTimerReset(),则忽略 xTicksToWait。

返回

如果重置命令无法发送到计时器命令队列,即使 xTicksToWait 时钟周期已经过去了,也会返回 pdFAIL。如果命令已成功发送到计时器命令队列,将返回 pdPASS。实际处理命令的时间将取决于定时服务/守护程序任务相对于系统中其他任务的优先级,尽管计时器到期时间相对于实际调用 xTimerStart() 的时间。定时服务/守护程序任务优先级由configTIMER_TASK_PRIORITY配置常量设置。

用法示例:

// When a key is pressed, an LCD back-light is switched on.  If 5 seconds pass
 // without a key being pressed, then the LCD back-light is switched off.  In
 // this case, the timer is a one-shot timer.

 TimerHandle_t xBacklightTimer = NULL;

 // The callback function assigned to the one-shot timer.  In this case the
 // parameter is not used.
 void vBacklightTimerCallback( TimerHandle_t pxTimer )
 {
     // The timer expired, therefore 5 seconds must have passed since a key
     // was pressed.  Switch off the LCD back-light.
     vSetBacklightState( BACKLIGHT_OFF );
 }

 // The key press event handler.
 void vKeyPressEventHandler( char cKey )
 {
     // Ensure the LCD back-light is on, then reset the timer that is
     // responsible for turning the back-light off after 5 seconds of
     // key inactivity.  Wait 10 ticks for the command to be successfully sent
     // if it cannot be sent immediately.
     vSetBacklightState( BACKLIGHT_ON );
     if( xTimerReset( xBacklightTimer, 100 ) != pdPASS )
     {
         // The reset command was not executed successfully.  Take appropriate
         // action here.
     }

     // Perform the rest of the key processing here.
 }

 void main( void )
 {
 int32_t x;

     // Create then start the one-shot timer that is responsible for turning
     // the back-light off if no keys are pressed within a 5 second period.
     xBacklightTimer = xTimerCreate( "BacklightTimer",           // Just a text name, not used by the kernel.
                                     ( 5000 / portTICK_PERIOD_MS), // The timer period in ticks.
                                     pdFALSE,                    // The timer is a one-shot timer.
                                     0,                          // The id is not used by the callback so can take any value.
                                     vBacklightTimerCallback     // The callback function that switches the LCD back-light off.
                                   );

     if( xBacklightTimer == NULL )
     {
         // The timer was not created.
     }
     else
     {
         // Start the timer.  No block time is specified, and even if one was
         // it would be ignored because the scheduler has not yet been
         // started.
         if( xTimerStart( xBacklightTimer, 0 ) != pdPASS )
         {
             // The timer could not be set into the Active state.
         }
     }

     // ...
     // Create tasks here.
     // ...

     // Starting the scheduler will start the timer running as it has already
     // been set into the active state.
     vTaskStartScheduler();

     // Should not reach here.
     for( ;; );
 }
/*定时器中断函数*/
void esp_timer_cb(void *arg){
    printf("TIME start \n");
}
void key_createTimer(){
    TimerHandle_t xTimerBPL ;
    xTimerBPL = xTimerCreate("xTimerCreate"
                                    ,(BPL_CHECK_TIME/portTICK_PERIOD_MS)  //毫秒
                                    ,pdTRUE //周期执行
                                    ,( void * ) BPL_pvTimerID //执行ID
                                    ,esp_timer_cb);
    if( xTimerBPL == NULL ) ESP_LOGE(TAG,"%s",esp_err_to_name(-1));
    if( xTimerStart( xTimerBPL, 0 ) != pdPASS ) ESP_LOGE(TAG,"%s",esp_err_to_name(-1));
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ESP32中定时计数器的使用 的相关文章

  • 树图区块链学习(未完待续)

    树图区块链基本结构 1 每个区块只有一条父边指向父区块 2 每个区块可能有多条关联边指向 happen before 关系的区块 确定区块链的主链 1 从创世区块开始 2 迭代深入选择最重的分支作为主链 比如这个区块链中 子树A所在分支即为
  • torch.mean

    mean 函数的参数 dim 0 按行求平均值 返回的形状是 1 列数 dim 1 按列求平均值 返回的形状是 行数 1 默认不设置dim的时候 返回的是所有元素的平均值 x torch arange 12 view 4 3 注意 在这里使
  • 4G LTE各band对应的频率一览表

    4G LTE各band对应的频率一览表 在调试过程中 有时对band具体的频率不清楚 这里记录一下
  • Django实现media、static静态资源通过url加载访问

    Django实现media static静态资源通过url加载访问 Django项目中一般上传的静态文件会存储在根目录的media文件夹下 template模板使用的静态css js image等文件存在static目录下 所以如何配置me
  • melogin.cn主页登录_melogin.cn登录官网

    问 melogin cn官网登录不进去怎么办 答 请注意 melogin cn 是水星路由器的登录地址 并不是一个能在互联网上访问的网站 如果在设置水星路由器的时候 不能进入melogin cn登录官网页面 请仔细阅读下面的解决办法 温馨提
  • 解释执行和编译执行的区别、基于栈和基于寄存器的指令集区别

    1 解释执行和编译执行的区别 我们在学习java的时候 对class文件都有个疑惑 虚拟机是如何执行发方法中的字节码指令的呢 其实 虚拟机的执行引擎在执行java代码的时候有解释执行和编译执行两种选择 通俗说来 解释执行是通过解释器执行 编

随机推荐

  • Altium Designer 20(AD20)新手小白详细教程

    目录 AD20的操作 控制界面操作 将原理图导入PCB中 添加库文件 放置图标 将连线由90 变为45 在英文状态下按shift 空格可以改变线连接的角度 整体修改标号 设置元件镜像对称快捷键 管脚设置 新建元器件 在同一个原理图库内新建多
  • nginx安装http_ssl_module模块,支持https

    1 进入源码包 如 cd usr local nginx 1 15 0 2 运行nginx V命令查看已经安装的nginx模块 configure arguments 后面表示当前已经安装的nginx模块 如 root izbp11gsqd
  • 高等数学(工本)选择题

    线性运算案例 向量运算案例 求曲面方程 求平面方程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3
  • 最新Python入门基础教程2023

    目录 前言 安装Python 变量和数据类型 运算符 控制流语句 函数 列表 字典 循环 for循环 while循环 条件语句 if语句 if else语句 异常处理 其他基础知识 前言 学习Python的基础知识对于
  • 2022经历裁员之后,我总结了程序员必备的架构能力!

    一 前情回顾 上篇文章 同事老是吐槽我的接口性能差 原来真凶就在这里 聊了一下系统架构中的查询平台 我们采用冷热数据分离 冷数据基于HBase Elasticsearch 纯内存自研的查询引擎 解决了海量历史数据的高性能毫秒级的查询 热数据
  • 华为交换机CE12808导入导出配置文件

    1 创建FTP用户 开启ftp服务 ftp server enable 设置ftp默认文件目录 set default ftp directory flash 进入AAA视图 aaa 设置用户 密码 local user 用户名 passw
  • 代价函数

    一 什么是代价函数 我在网上找了很长时间代价函数的定义 但是准确定义并没有 我理解的代价函数就是用于找到最优解的目的函数 这也是代价函数的作用 二 代价函数作用原理 对于回归问题 我们需要求出代价函数来求解最优解 常用的是平方误差代价函数
  • 普通大专真的可以自学 Java 吗?

    能是肯定能 看数据先 全国范围内搜索Java筛选大专学历 1到 3年工作经验 找到了1177条消息 但是其他条件不变 更改本科呢 全国范围内搜索到了3215条招聘消息 有人说什么90 以上都要本科 确实有点片面了 当然现在也不是招聘旺季 已
  • HashMap的底层实现。(05)

    HASHMAP的简介 通过学习本文档后能够掌握到的知识点 1HashMap的简单介绍 2HashMap的主要方法 3模仿JAVA写一个简单的HASHMAP 子曰 学而不思则罔 思而不学则殆 1 为什么学HASHMAP 作为MAP接口下面一个
  • springboot学习(七)Thymeleaf模板引擎

    模板引擎 springboot我们目前是以jar包的形式打包 实际上我们之前是打成war包 放到tomcat服务器里面 可以用JSP 但是jar包就导致不能用JSP 换一种方式就是springboot推荐的Thymeleaf模板引擎 JSP
  • npm 换淘宝源

    npm config get registry npm config set registry https registry npm taobao org
  • cURL安装和常用实例

    cURL是一个利用URL语法在命令行下工作的文件传输工具 配置后 可以在命令行直接执行各类操作 也可以作为源码包 载入到各类后端开发 为后端提供文件传输能力 安装 下载 演示电脑是win10 64位 下载对应的包 全部下载地址 zip地址
  • Hibernate中枚举Enum类型的映射策略

    在Java中Enum是一种 奇葩 的存在 奇葩 不代表没用 对于这种比较特殊的存在 hibernate会有很多种选择来完成Enum类型字段的映射 首先要说明的是在hibernate都是把Enum类型的字段映射成基本类型的字段 并且我这里不使
  • moviepy音视频开发:音频剪辑基类AudioClip详解

    前往老猿Python博文目录 一 背景知识介绍 1 1 声音三要素 音调 人耳对声音高低的感觉称为音调 也叫音频 音调主要与声波的频率有关 声波的频率高 则音调也高 音量 也就是响度 人耳对声音强弱的主观感觉称为响度 响度和声波振动的幅度有
  • AIGC发展路径思考:大模型工具化普及迎来新机遇

    来源 腾讯科技 摘要 当前 AIGC引发社会关注 尤其是大模型和开源模式的推动 让AIGC有望成为AI应用落地的新领域 一方面大模型和开源加速降低AIGC应用门槛并拓展应用范围 另一方面AI与创新的界限进一步模糊 两者融合的趋势愈发明显 本
  • Python 多线程 run() 与 start()的关系

    先说结论 1 调用多线程时用start 2 start 中会调用run 3 run 不会启动多线程 代码分析 1 首先看run 的代码 def run self Method representing the thread s activi
  • 二阶系统参数用matlab,实验一基于MATLAB的二阶系统动态性能分析

    实验一 基于MATLAB 的二阶系统动态性能分析 一 实验目的 1 观察学习二阶控制系统的单位阶跃响应 脉冲响应 2 记录单位阶跃响应曲线 脉冲响应曲线 3 掌握时间响应分析的一般方法 4 掌握系统阶跃响应曲线与传递函数参数的对应关系 二
  • sqoop入门

    大数据技术之Sqoop 一 Sqoop简介 Sqoop是hdfs hive hbase和RDBMS结构化数据库之间传输大量数据的工具 二 Sqoop原理 将导入或导出命令翻译成mapreduce程序来实现 在翻译出的mapreduce中主要
  • Linux常用命令介绍(一)——文件与文件夹操作相关命令

    今天继续给大家介绍Linux相关操作 本文主要内容是文件和文件夹的基本操作 包括创建 复制 删除 以及压缩和解压缩命令 一 创建文件 夹 mkdir命令用于创建文件夹 在使用时 我们常常跟 p参数 表示强制创建 没有该参数 则必须目标文件夹
  • ESP32中定时计数器的使用

    一 GPIO常用函数 esp err t gpio reset pin gpio num tgpio num 将 gpio 重置为默认状态 选择 gpio 功能 启用上拉并禁用输入和输出 备注此功能还将此引脚的 IOMUX 配置为 GPIO