[LsSDK][tool] ls_syscfg_gui2.1 and ls_syscfg_debug1.0

news2024/11/16 9:43:20

文章目录

  • 一、简介
    • 1.工具的目的
    • 2. 更新点
      • 下个更新
  • 三、配置文件

一、简介

1.工具的目的

① 可视化选择IO口功能。
② 自由配置IO支持的功能。
③ 适用各类MCU,方便移植和开发。
④ 功能配置和裁剪(选项-syscfg-待完成–需要适配keil语法有些麻烦)
在这里插入图片描述

在这里插入图片描述

ls_syscfg.h 目的更快的配置外设参数和功能,跟专注业务代码开发。

在这里插入图片描述

2. 更新点

① 新增宏名称
② 注释
③ 回调函数(中断回调、按键回调)
④ 变更排序方式,按GPIOA、B、C排序
⑤ 回调函数会在ls_gpio.h生成弱函数,可由外部重新定义。

__WEAK void key0 (key_event_t event) {
    switch (event) {
        case KEY_EVENT_SINGLE_CLICK:
            break;
    }
}

下个更新

  1. syscfg功能
  2. 相应例程更新
  3. 基本完成功能

更多基于工具的项目开源。

三、配置文件

/********************************************************************************
* @file    ls_gpio.h
* @author  jianqiang.xue
* @version V1.3.0
* @date    2023-06-04
* @brief   业务类--GPIO定义
********************************************************************************/
#ifndef __LS_GPIO_H
#define __LS_GPIO_H
#define LS_IO_VERSION "CX32L003_通用模板"

#include "cx32l003_hal.h"
#include "cx32l003_hal_def.h"
#include "bsp_gpio.h"
#include "bsp_exti.h"

/* GPIO_EXTI_INT_EDGE;             // 中断类型 边沿触发
    GPIO_EXTI_INT_LOWFALL;  // 下降沿触发中断
    GPIO_EXTI_INT_HIGHRISE; // 上升沿触发中断
    GPIO_EXTI_INT_FALLRISE; // 下降沿上升沿都触发中断
GPIO_EXTI_INT_LEVEL;            // 中断类型 电平触发
    GPIO_EXTI_INT_LOWFALL;  // 低电平触发中断
    GPIO_EXTI_INT_HIGHRISE; // 高电平触发中断 */

#define GPIO_CLK(GPIO)                              (RCC_HCLKEN_##GPIO##CKEN)
#define GPIO_APBx                                   (0)
/************************************GPIO***********************************/
#define LS_IO_NUM                                   (16)
/* Public Struct -------------------------------------------------------------*/

union io_support_t {
    uint64_t val; // 对外值
    struct {
        uint64_t swo                : 1;

        uint64_t adc0_ch0           : 1;
        uint64_t adc0_ch1           : 1;
        uint64_t adc0_ch2           : 1;
        uint64_t adc0_ch3           : 1;
        uint64_t adc0_ch4           : 1;
        uint64_t adc0_ch5           : 1;
        uint64_t adc0_ch6           : 1;

        uint64_t tim1_ch1           : 1; // PWM0
        uint64_t tim1_ch2           : 1; // PWM1
        uint64_t tim1_ch3           : 1; // PWM2
        uint64_t tim1_ch4           : 1; // PWM3
        uint64_t tim2_ch1           : 1; // PWM4
        uint64_t tim2_ch2           : 1; // PWM5
        uint64_t tim2_ch3           : 1; // PWM6
        uint64_t tim2_ch4           : 1; // PWM7

        uint64_t uart0_tx           : 1;
        uint64_t uart0_rx           : 1;
        uint64_t uart1_tx           : 1;
        uint64_t uart1_rx           : 1;
        uint64_t uart2_tx           : 1;
        uint64_t uart2_rx           : 1;

        uint64_t i2c0_scl           : 1; // 硬件IIC
        uint64_t i2c0_sda           : 1;
        uint64_t i2c_scl_soft       : 1; // 软件IIC
        uint64_t i2c_sda_soft       : 1;

        uint64_t spi0_clk           : 1;
        uint64_t spi0_mosi          : 1;
        uint64_t spi0_miso          : 1;
        uint64_t spi0_nss           : 1;

#if !LS_IO_EXTEND_SUPPORT
        uint64_t reserve            : 34;
#endif
    } bit;
};

typedef enum {
    IO_TYPE_IN_NULL = 0, // 无上下拉
    IO_TYPE_IN_PULLUP,   // 输入,上拉
    IO_TYPE_IN_PULLDOWN, // 输入,下拉

    IO_TYPE_OUT_PP,      // 默认输出 推免输出
    IO_TYPE_OUT_OD,      // 开漏输出
    // 中断输入
    IO_TYPE_INIRQ_LEVEL_LOW,     // 电平触发-低电平
    IO_TYPE_INIRQ_LEVEL_HIGH,    // 电平触发-高电平
    IO_TYPE_INIRQ_EDGE_LOWFALL,  // 边沿触发-下降沿
    IO_TYPE_INIRQ_EDGE_HIGHRISE, // 边沿触发-上降沿
    IO_TYPE_INIRQ_EDGE_FALLRISE, // 边沿触发-任意电平变化

    IO_TYPE_SWO,          // 默认烧录脚
    IO_TYPE_KEY,          // 按键
    IO_TYPE_MATRIX_KEY_X, // 矩阵键盘X轴
    IO_TYPE_MATRIX_KEY_Y, // 矩阵键盘Y轴
    IO_TYPE_W2812X,

    IO_TYPE_ADC0_CH0, // ADC0_0
    IO_TYPE_ADC0_CH1, // ADC0_1
    IO_TYPE_ADC0_CH2, // ADC0_2
    IO_TYPE_ADC0_CH3, // ADC0_3
    IO_TYPE_ADC0_CH4, // ADC0_4
    IO_TYPE_ADC0_CH5, // ADC0_5
    IO_TYPE_ADC0_CH6, // ADC0_6

    IO_TYPE_TIM1_CH1, // PWM0
    IO_TYPE_TIM1_CH2, // PWM1
    IO_TYPE_TIM1_CH3, // PWM2
    IO_TYPE_TIM1_CH4, // PWM3
    IO_TYPE_TIM2_CH1, // PWM4
    IO_TYPE_TIM2_CH2, // PWM5
    IO_TYPE_TIM2_CH3, // PWM6
    IO_TYPE_TIM2_CH4, // PWM7

    IO_TYPE_UART0_TX,   // 串口0,TX
    IO_TYPE_UART0_RX,   // 串口0,RX
    IO_TYPE_UART1_TX,   // 串口1,TX
    IO_TYPE_UART1_RX,   // 串口1,RX
    IO_TYPE_UART2_TX,   // 串口2,TX
    IO_TYPE_UART2_RX,   // 串口2,RX

    IO_TYPE_I2C0_SCL,   // 硬件IIC0
    IO_TYPE_I2C0_SDA,   // 硬件IIC0
    IO_TYPE_I2C_SCL_SOFT, // 软件IIC
    IO_TYPE_I2C_SDA_SOFT, // 软件IIC

    IO_TYPE_SPI0_CLK,     // SPI0_时钟
    IO_TYPE_SPI0_MOSI,    // SPI0_主机输出
    IO_TYPE_SPI0_MISO,    // SPI0_主机输入
    IO_TYPE_SPI0_NSS,     // SPI0_片选

    IO_TYPE_MAX,
} io_type_t;

extern const union io_support_t g_io_support[LS_IO_NUM]; // 引脚支持类型
extern const io_type_t g_io_default_type[LS_IO_NUM];     // 引脚默认类型
extern const bsp_gpio_t g_io_cfg[LS_IO_NUM];             // 引脚配置(时钟中断号)
extern const uint8_t g_io_pin_num[LS_IO_NUM];                   // 数组下标对应的引脚号
#ifdef LS_IO
const uint8_t g_io_pin_num[LS_IO_NUM] = {
    5, 6, 10, 12, 11, 13, 14, 15, 16, 17, 18, 19, 20, 1, 2, 3,
};

const bsp_gpio_t g_io_cfg[LS_IO_NUM] = {
    {(GPIOA), (GPIO_PIN_1), GPIO_CLK(GPIOA), (0), (GPIOA_IRQn)},
    {(GPIOA), (GPIO_PIN_2), GPIO_CLK(GPIOA), (0), (GPIOA_IRQn)},
    {(GPIOA), (GPIO_PIN_3), GPIO_CLK(GPIOA), (0), (GPIOA_IRQn)},
    {(GPIOB), (GPIO_PIN_4), GPIO_CLK(GPIOB), (0), (GPIOB_IRQn)},
    {(GPIOB), (GPIO_PIN_5), GPIO_CLK(GPIOB), (0), (GPIOB_IRQn)},
    {(GPIOC), (GPIO_PIN_3), GPIO_CLK(GPIOC), (0), (GPIOC_IRQn)},
    {(GPIOC), (GPIO_PIN_4), GPIO_CLK(GPIOC), (0), (GPIOC_IRQn)},
    {(GPIOC), (GPIO_PIN_5), GPIO_CLK(GPIOC), (0), (GPIOC_IRQn)},
    {(GPIOC), (GPIO_PIN_6), GPIO_CLK(GPIOC), (0), (GPIOC_IRQn)},
    {(GPIOC), (GPIO_PIN_7), GPIO_CLK(GPIOC), (0), (GPIOC_IRQn)},
    {(GPIOD), (GPIO_PIN_1), GPIO_CLK(GPIOD), (0), (GPIOD_IRQn)},
    {(GPIOD), (GPIO_PIN_2), GPIO_CLK(GPIOD), (0), (GPIOD_IRQn)},
    {(GPIOD), (GPIO_PIN_3), GPIO_CLK(GPIOD), (0), (GPIOD_IRQn)},
    {(GPIOD), (GPIO_PIN_4), GPIO_CLK(GPIOD), (0), (GPIOD_IRQn)},
    {(GPIOD), (GPIO_PIN_5), GPIO_CLK(GPIOD), (0), (GPIOD_IRQn)},
    {(GPIOD), (GPIO_PIN_6), GPIO_CLK(GPIOD), (0), (GPIOD_IRQn)},
};

const union io_support_t g_io_support[LS_IO_NUM] = {
    {0x74A0000}, {0x23452400}, {0x20204000}, {0x23410000}, {0x4821000},
    {0x844404}, {0x488808}, {0x4100000}, {0x8208102}, {0x10080201},
    {0x40001}, {0x10100210}, {0x8012020}, {0x3020100}, {0x10458040},
    {0x88A2280},
};

const io_type_t g_io_default_type[LS_IO_NUM] = {
    IO_TYPE_UART0_RX, IO_TYPE_UART0_TX, IO_TYPE_TIM2_CH3, IO_TYPE_OUT_PP, IO_TYPE_TIM2_CH1,
    IO_TYPE_TIM1_CH3, IO_TYPE_TIM1_CH4, IO_TYPE_OUT_PP, IO_TYPE_ADC0_CH0, IO_TYPE_SWO,
    IO_TYPE_SWO, IO_TYPE_TIM1_CH2, IO_TYPE_TIM2_CH2, IO_TYPE_TIM1_CH1, IO_TYPE_TIM2_CH4,
    IO_TYPE_ADC0_CH6,
};

__weak void app_io_exti_cb(void *gpiox, uint16_t gpio_pin) {
// [中断回调START]
// [中断回调END]
}

#include "ls_key.h"
// __WEAK void xxx (key_event_t event) {
//     switch (event) {
//         case KEY_EVENT_SINGLE_CLICK:
//             break;
//     }
// }

__WEAK const ls_key_cb_t ls_key_cb_list[] = {
// [按键扫描START]
// [按键扫描END]
    {0xFF, NULL} // 必须有
};
#endif // __LS_IO_END


// [引脚宏名称START]
// [引脚宏名称END]
#endif  // __LS_GPIO_H

gitee

1.0版本

  1. ADC
    AT+ADC0_CFG?
    AT+ADC0_TIMER_MS=300
    AT+ADC0_START
    AT+ADC0_STOP
    AT+GET_ADC0_VAL?
    AT+ADC0_CFG=?
    AT+ADC0_CFG=1,10
#include "bsp_adc.h"
extern bsp_adc_cfg_t g_adc0_cfg;
extern os_timer_id OS_TIMER_ID(adc0_collection);
extern uint32_t g_adc0_timer_ms;

static int atcmd_adc0_cfg_help(atcmd_pack_t *pack) {
    char buff[60] = {0};
    snprintf(buff, 60, "AT+ADC0_CFG=<clk_sel(0-7)>,<sample_num(0-255)>\r\n");
    strcat(buff, AT_OK);
    pack->reply((uint8_t*)buff, strlen(buff));
    return 0;
}

static int atcmd_get_adc0_cfg(atcmd_pack_t *pack) {
    char buff[30] = {0};
    snprintf(buff, 30, "%d,%d\r\n", g_adc0_cfg.clk_sel, g_adc0_cfg.sample_num);
    strcat(buff, AT_OK);
    pack->reply((uint8_t*)buff, strlen(buff));
    return 0;
}

static int atcmd_set_adc0_cfg(atcmd_pack_t *pack) {
    uint32_t argc[2] = {0};
    char buff[20] = {0};
    pack->argc = sscanf((char*)(pack->data), "%d,%d", &argc[0], &argc[1]);
    if (pack->argc != 2) {
        strcat(buff, AT_ARGCERR);
        pack->reply((uint8_t*)buff, strlen(buff));
        return -2;
    }
    bsp_adc0_deinit();
    g_adc0_cfg.clk_sel = (uint8_t)argc[0];
    g_adc0_cfg.sample_num = argc[1];
    if (bsp_adc0_init(&g_adc0_cfg)) {
        strcat(buff, AT_ERROR);
    } else {
        strcat(buff, AT_OK);
    }
    pack->reply((uint8_t*)buff, strlen(buff));
    return 0;
}


static int atcmd_set_adc0_timer_ms(atcmd_pack_t *pack) {
    uint32_t argc[1] = {0};
    uint8_t buff[40] = {0};
    pack->argc = sscanf((char*)(pack->data), "%d", &argc[0]);
    if (pack->argc != 1) return -1;
    // 先停止周期任务,并将任务全部取消。
    OS_TIMER_STOP(adc0_collection);
    if (argc[0]) {
        if (os_timer_restart(OS_TIMER_ID(adc0_collection), argc[0]) != OS_OK)
            strcat((char*)buff, "adc0 timer restart fail");
        g_adc0_timer_ms = argc[0];
    } else {
        if (os_timer_stop(OS_TIMER_ID(adc0_collection)) != OS_OK)
            strcat((char*)buff, "adc0 timer stop fail");
    }
    strcat((char*)buff, AT_OK);
    pack->reply(buff, strlen((char*)buff));
    return 0;
}

static int atcmd_adc0_start(atcmd_pack_t *pack) {
    uint8_t buff[40] = {0};
    if (os_timer_restart(OS_TIMER_ID(adc0_collection), g_adc0_timer_ms) != OS_OK)
        strcat((char*)buff, "adc0 timer restart fail");
    strcat((char*)buff, AT_OK);
    pack->reply(buff, strlen((char*)buff));
    return 0;
}

static int atcmd_adc0_stop(atcmd_pack_t *pack) {
    uint8_t buff[40] = {0};
    if (os_timer_stop(OS_TIMER_ID(adc0_collection)) != OS_OK)
        strcat((char*)buff, "adc0 timer stop fail");
    strcat((char*)buff, AT_OK);
    pack->reply(buff, strlen((char*)buff));
    return 0;
}

static int atcmd_get_adc0_val(atcmd_pack_t *pack) {
    uint8_t buff[60] = {0};
    snprintf((char *)buff, 60, "%d,%d,%d,%d,%d,%d,%d,%d\r\n",
    bsp_adc0_get_ch_val(0), bsp_adc0_get_ch_val(1), bsp_adc0_get_ch_val(2), bsp_adc0_get_ch_val(3),
    bsp_adc0_get_ch_val(4), bsp_adc0_get_ch_val(5), bsp_adc0_get_ch_val(6), bsp_adc0_get_ch_val(7));
    strcat((char*)buff, AT_OK);
    pack->reply(buff, strlen((char*)buff));
    return 0;
}

static int atcmd_get_adc0_designated_val(atcmd_pack_t *pack) {
    uint32_t argc[1];
    uint8_t buff[30] = {0};

    pack->argc = sscanf((char*)(pack->data), "%d", &argc[0]);
    if (pack->argc != 1) return -1;
    snprintf((char *)buff, 30, "%d", bsp_adc0_get_ch_val(argc[0]));
    strcat((char*)buff, AT_OK);
    pack->reply(buff, strlen((char*)buff));
    return 0;
}

ATCMD_INIT("AT+ADC0_TIMER_MS=", atcmd_set_adc0_timer_ms);
ATCMD_INIT("AT+ADC0_START", atcmd_adc0_start);
ATCMD_INIT("AT+ADC0_STOP", atcmd_adc0_stop);
ATCMD_INIT("AT+GET_ADC0_VAL=", atcmd_get_adc0_designated_val);
ATCMD_INIT("AT+GET_ADC0_VAL?", atcmd_get_adc0_val);

ATCMD_INIT("AT+ADC0_CFG=?", atcmd_adc0_cfg_help);
ATCMD_INIT("AT+ADC0_CFG=", atcmd_set_adc0_cfg);
ATCMD_INIT("AT+ADC0_CFG?", atcmd_get_adc0_cfg);
  1. PWM
    AT+PWM=0,10
    AT+TIM1_CFG=7,99,0
    AT+TIM1_CFG=?
    AT+PWM_TASK=
#include "bsp_pwm.h"
#include "bsp_tim.h"
#if LS_TIM1_EN
extern bsp_tim_cfg_t g_tim1_cfg;
static int atcmd_set_tim1_cfg_help(atcmd_pack_t *pack) {
    char buff[85] = {0};
    snprintf(buff, 60, "AT+TIM1_CFG=<prescaler(0-65534)>,<period(0-65534)>,<level_logic(0-1)>\r\n");
    strcat(buff, AT_OK);
    pack->reply((uint8_t*)buff, strlen(buff));
    return 0;
}
static int atcmd_set_tim1_cfg(atcmd_pack_t *pack) {
    uint32_t argc[3] = {0};
    char buff[10] = {0};
    pack->argc = sscanf((char*)(pack->data), "%d,%d,%d", &argc[0], &argc[1], &argc[2]);
    if (pack->argc != 3) {
        strcat(buff, AT_ARGCERR);
        pack->reply((uint8_t*)buff, strlen(buff));
        return -2;
    }
    bsp_tim1_pwm_deinit();
    g_tim1_cfg.prescaler   = (uint16_t)argc[0];
    g_tim1_cfg.period      = (uint16_t)argc[1];
    g_tim1_cfg.level_logic = (uint8_t)argc[2];
    if (bsp_tim1_pwm_init(&g_tim1_cfg)) {
        strcat(buff, AT_ERROR);
    } else {
        strcat(buff, AT_OK);
    }
    pack->reply((uint8_t*)buff, strlen(buff));
    return 0;
}
ATCMD_INIT("AT+TIM1_CFG=?", atcmd_set_tim1_cfg_help);
ATCMD_INIT("AT+TIM1_CFG=", atcmd_set_tim1_cfg);
#endif
#if LS_TIM2_EN
extern bsp_tim_cfg_t g_tim2_cfg;
static int atcmd_set_tim2_cfg_help(atcmd_pack_t *pack) {
    char buff[85] = {0};
    snprintf(buff, 60, "AT+TIM2_CFG=<prescaler(0-65534)>,<period(0-65534)>,<level_logic(0-1)>\r\n");
    strcat(buff, AT_OK);
    pack->reply((uint8_t*)buff, strlen(buff));
    return 0;
}
static int atcmd_set_tim2_cfg(atcmd_pack_t *pack) {
    uint32_t argc[3] = {0};
    char buff[10] = {0};
    pack->argc = sscanf((char*)(pack->data), "%d,%d,%d", &argc[0], &argc[1], &argc[2]);
    if (pack->argc != 3) {
        strcat(buff, AT_ARGCERR);
        pack->reply((uint8_t*)buff, strlen(buff));
        return -2;
    }
    bsp_tim2_pwm_deinit();
    g_tim2_cfg.prescaler   = (uint16_t)argc[0];
    g_tim2_cfg.period      = (uint16_t)argc[1];
    g_tim2_cfg.level_logic = (uint8_t)argc[2];
    if (bsp_tim2_pwm_init(&g_tim2_cfg)) {
        strcat(buff, AT_ERROR);
    } else {
        strcat(buff, AT_OK);
    }
    pack->reply((uint8_t*)buff, strlen(buff));
    return 0;
}
ATCMD_INIT("AT+TIM2_CFG=?", atcmd_set_tim2_cfg_help);
ATCMD_INIT("AT+TIM2_CFG=", atcmd_set_tim2_cfg);
#endif

static int atcmd_set_pwm_val_help(atcmd_pack_t *pack) {
    char buff[60] = {0};
    snprintf(buff, 60, "AT+PWM=<ch(0-7)>,<val(0-65535)>\r\n");
    strcat(buff, AT_OK);
    pack->reply((uint8_t*)buff, strlen(buff));
    return 0;
}

static int atcmd_set_pwm_val(atcmd_pack_t *pack) {
    uint32_t argc[2] = {0};
    uint8_t buff[10] = {0};
    pack->argc = sscanf((char*)(pack->data), "%d,%d", &argc[0], &argc[1]);
    if (pack->argc != 2) {
        strcat((char*)buff, AT_ARGCERR);
        pack->reply(buff, strlen((char*)buff));
        return -2;
    }
    if (bsp_pwm_set_pulse(argc[0], argc[1])) {
        strcat((char*)buff, AT_ERROR);
    } else {
        strcat((char*)buff, AT_OK);
    }
    pack->reply(buff, strlen((char*)buff));
    return 0;
}

ATCMD_INIT("AT+PWM=?", atcmd_set_pwm_val_help);
ATCMD_INIT("AT+PWM=", atcmd_set_pwm_val);

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

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

相关文章

只需一个Prompt,ChatGPT秒变万能导师,轻松学习任意领域知识

AI正在改变我们生活的方方面面&#xff0c;包括我们学习的方式。AI已经证明自己有能力成为我们的助手甚至是老师&#xff0c;帮助我们更有效地获取知识。 拿ChatGPT来说&#xff0c;我们平时有什么问题都可以向它提问&#xff0c;不过想让它更高效的帮助我们&#xff0c;还是需…

C++多态和文件读写

C黑马&#xff0c;每天1.5倍速2个视频&#xff08;1小时&#xff09;&#xff0c;看到9月1日完成314个视频 目录 &#x1f511;多态 &#x1f333;基本语法 &#x1f333;原理剖析 &#x1f333;案例1 -- 计算器类 &#x1f333;纯虚函数和抽象类 &#x1f333;案例2 --…

区块链世界的大数据入门之zkMapReduce简介

1. 引言 跨链互操作性的未来将围绕多链dapp之间的动态和数据丰富的关系构建。Lagrange Labs 正在构建粘合剂&#xff0c;以帮助安全地扩展基于零知识证明的互操作性。 2. ZK大数据栈 Lagrange Labs 的ZK大数据栈 为一种专有的证明结构&#xff0c;用于在任意动态分布式计算的…

Nginx本地启动前端Vue项目

1.Nginx下载及安装 下载地址&#xff1a;nginx: download 下载stable稳定版本&#xff0c;解压安装包 2.前端项目打包 使用cnpm/npm run serve 或 yarn serve将前端项目打包&#xff0c;记录dist文件夹路径 3.nginx.conf 填写 根目录下conf文件夹有nginx.conf文件&#xf…

Linux——Centos系统中网络连接的三种方式(如何修改VMware的IP地址?)

一、CentOS系统中&#xff0c;三种常见的网络连接模式 我们在前面搭建Linux环境中使用了虚拟机的方式进行&#xff08;后续也会发文演示用Docker来搭建Linux环境&#xff09;。在虚拟机中选择安装CentOS系统&#xff0c;然后当时在安装流程的时候选择了NAT模式&#xff0c;但是…

MySQL基础知识:索引

一、索引基础知识 &#xff08;一&#xff09;辅助索引/二级索引 叶子节点除了包含键值以外&#xff0c;每个叶子节点中的索引行中还包含了一个书签( bookmark) &#xff08;每个索引一颗B树&#xff0c;不包含行记录的全部数据&#xff09; &#xff08;二&#xff09; 回表…

第一章 数据处理篇:数据集读取和构建

说在前面的话 满打满算工作也有三年了&#xff0c;还是没有感觉到自己和刚毕业相比有什么明显的进步。 严格来讲&#xff0c;代码力确实有提升&#xff0c;对各类工具的使用也更加熟练。但是对算法的理解和从0开始编程的能力仍然没有什么长进。归根到底&#xff0c;是因为在工作…

算法学习day18

文章目录 513.找树左下角的值递归迭代 112 .路径总和递归迭代 113.路径总和II递归 106.从中序与后序遍历序列构造二叉树递归 105.从前序与中序遍历序列构造二叉树卡尔递归版本递归优化 总结 513.找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底…

PPT里文字太多如何排版-一口气教你7种布局瞬间让PPT高大上起来

简介 这是我们学PPT处于初级到中级进化阶段常做的一件事,就是拿了这种纯文字类版面来做布局。而且这种文字都是政企类的、相当苦涩难懂、无法创意。 因此我们会要求使用7种排版来优化这个版面。这和达芳奇画鸡蛋很像,这样的练习需要坚持一段时间,就是拿了纯文字来beautifu…

【Flutter】如何给按钮添加圆角 自定义圆角按钮样式

文章目录 一、前言二、创建基本按钮三、如何在 Flutter 中创建圆角按钮四、自定义圆角按钮1.修改按钮颜色2.修改圆角半径 五、完整代码示例六、总结 一、前言 欢迎来到 Flutter 的世界&#xff01;在这篇文章中&#xff0c;我们将探索 Flutter 的一些基础知识。但是&#xff0…

【IC设计】Synopsys数字IC设计流程

文章目录 数字IC设计流程前端设计RTL编写和HDL仿真逻辑综合门级仿真形式化验证 后端设计数据准备set mw_phys_refs *set link_library *数据准备 (SDC)数据准备 (RC Techfile) set_tlu_plus_files floor planFloorplan阶段的主要内容&#xff1a;常用命令&#xff1a; placemen…

BiFPN,one-stage,two-stage

目录 BiFPN 语义信息 单stage物体检测算法 双stage skip connection,low-level feature,high level-feature,top-dowm path backbone通常分为几个stage BiFPN BiFPN是双向特征金字塔网络的缩写&#xff0c;是计算机视觉中用于目标检测和分割任务的一种神经网络架构。 …

碳排放预测模型 | Python实现基于传统Holt winter时间序列的碳排放预测模型(预测未来发展趋势)

文章目录 效果一览文章概述研究内容环境准备源码设计学习总结参考资料效果一览 文章概述 碳排放预测模型 | Python实现基于传统Holt winter时间序列的碳排放预测模型(预测未来发展趋势) 研究内容 这是数据集的链接:https://github.com/owid/co2-data/blob/master/owid-co2-d…

一个好的接口自动化测试脚本是怎么写出来的?

目录 前言 1、某个用例的测试目的是什么 2、接口信息的来源 3、一些基本原则 4、断言那些事 5、脚本的后期维护 6、关于测试数据的准备 总结&#xff1a; 前言 谈到接口测试&#xff0c;大家关注更多的是哪个工具更优秀&#xff0c;更好用。但是很少人关注到接口测试用…

Allegor17.2版本WIN11系统CIS配置提示错误解决方案

错误提示&#xff1a; ERROR(ORCIS-6250): Unable to continue. Database access failed. Contact the database administrator to correct the following error(s), and then retry. ODBC Error Code: -1 Description: 在指定的 DSN 中&#xff0c;驱动程序和应用程序之间的体…

架构-系统架构设计模块-2

软件架构风格 #mermaid-svg-daJWV8kQ9nIgH5tZ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-daJWV8kQ9nIgH5tZ .error-icon{fill:#552222;}#mermaid-svg-daJWV8kQ9nIgH5tZ .error-text{fill:#552222;stroke:#55222…

2023年大学计算机专业实习心得14篇

2023年大学计算机专业实习心得精选篇1 20__年已然向我们挥手告别而去了。在20__年初之际&#xff0c;让我们对过去一年的工作做个总结。忙碌的一年里&#xff0c;在领导及各位同事的帮助下&#xff0c;我顺利的完成了20__年的工作。为了今后更好的工作&#xff0c;总结经验&…

【大数据学习篇13】在linux上安装jupyter

下面介绍在liunx怎么安装jupyter&#xff0c;一步到位介绍。 目录 下面介绍在liunx怎么安装jupyter&#xff0c;一步到位介绍。 1、安装Anaconda3​编辑 1.1 自己选择一个位置下载 1.3 配置anaconda的路径 1.3 查看anaconda的版本 2、配置Jupyter Notebook 3、运行Jupy…

Linux UPS配置详解 (山特SANTAK TGBOX-850 )

起因 配置了一台All in One主机&#xff0c;系统是装的PVE&#xff0c;一个linux的虚拟机。里面装了openwrt软路由&#xff0c;还有OMV这个NAS系统。为了防止数据丢失&#xff0c;最好是配置一台UPS来保护数据&#xff0c;毕竟数据无价。于是买了一台山特的TGBOX-850。由于山特…

【群智能算法改进】基于动态折射反向学习和自适应权重的改进麻雀搜索算法[4]【Matlab代码#39】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. SSA算法2. 改进SSA算法2.1 动态折射反向学习策略2.2 自适应权重策略 3. 部分代码展示4. 仿真结果展示5. 资源获取说明 【获取资源请见文章第5节&#xff1a;资源获取】 1. SSA算法 2. 改进SSA算法 2.1 动态折射反向…