kpu.h文件研究

/* Copyright 2018 Canaan Inc.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/
#ifndef _KPU_H
#define _KPU_H#include <plic.h>
#include <stdint.h>
#include "dmac.h"#define kpu_matmul_begin kpu_conv2d_outputtypedef int (*plic_irq_callback_t)(void *ctx);typedef struct
{union{uint64_t reg;struct{uint64_t int_en : 1;uint64_t ram_flag : 1;uint64_t full_add : 1;uint64_t depth_wise_layer : 1;uint64_t reserved : 60;} data;} interrupt_enabe;union{uint64_t reg;struct{uint64_t image_src_addr : 15;uint64_t reserved0 : 17;uint64_t image_dst_addr : 15;uint64_t reserved1 : 17;} data;} image_addr;union{uint64_t reg;struct{uint64_t i_ch_num : 10;uint64_t reserved0 : 22;uint64_t o_ch_num : 10;uint64_t reserved1 : 6;uint64_t o_ch_num_coef : 10;uint64_t reserved2 : 6;} data;} image_channel_num;union{uint64_t reg;struct{uint64_t i_row_wid : 10;uint64_t i_col_high : 9;uint64_t reserved0 : 13;uint64_t o_row_wid : 10;uint64_t o_col_high : 9;uint64_t reserved1 : 13;} data;} image_size;union{uint64_t reg;struct{uint64_t kernel_type : 3;uint64_t pad_type : 1;uint64_t pool_type : 4;uint64_t first_stride : 1;uint64_t bypass_conv : 1;uint64_t load_para : 1;uint64_t reserved0 : 5;uint64_t dma_burst_size : 8;uint64_t pad_value : 8;uint64_t bwsx_base_addr : 32;} data;} kernel_pool_type_cfg;union{uint64_t reg;struct{uint64_t load_coor : 1;uint64_t load_time : 6;uint64_t reserved0 : 8;uint64_t para_size : 17;uint64_t para_start_addr : 32;} data;} kernel_load_cfg;union{uint64_t reg;struct{uint64_t coef_column_offset : 4;uint64_t coef_row_offset : 12;uint64_t reserved0 : 48;} data;} kernel_offset;union{uint64_t reg;struct{uint64_t channel_switch_addr : 15;uint64_t reserved : 1;uint64_t row_switch_addr : 4;uint64_t coef_size : 8;uint64_t coef_group : 3;uint64_t load_act : 1;uint64_t active_addr : 32;} data;} kernel_calc_type_cfg;union{uint64_t reg;struct{uint64_t wb_channel_switch_addr : 15;uint64_t reserved0 : 1;uint64_t wb_row_switch_addr : 4;uint64_t wb_group : 3;uint64_t reserved1 : 41;} data;} write_back_cfg;union{uint64_t reg;struct{uint64_t shr_w : 4;uint64_t shr_x : 4;uint64_t arg_w : 24;uint64_t arg_x : 24;uint64_t reserved0 : 8;} data;} conv_value;union{uint64_t reg;struct{uint64_t arg_add : 40;uint64_t reserved : 24;} data;} conv_value2;union{uint64_t reg;struct{uint64_t send_data_out : 1;uint64_t reserved : 15;uint64_t channel_byte_num : 16;uint64_t dma_total_byte : 32;} data;} dma_parameter;
} kpu_layer_argument_t;typedef struct
{union{uint64_t reg;struct{uint64_t shift_number : 8;uint64_t y_mul : 16;uint64_t x_start : 36;} data;} activate_para[16];union{uint64_t reg;struct{uint8_t result_bias[8];} data;} activate_para_bias0;union{uint64_t reg;struct{uint8_t result_bias[8];} data;} activate_para_bias1;
} kpu_activate_table_t;typedef struct
{union{uint64_t reg;struct{uint64_t norm_mul : 24;uint64_t norm_add : 32;uint64_t norm_shift : 4;} data;} batchnorm;
} kpu_batchnorm_argument_t;typedef struct
{union{uint64_t reg;struct{uint16_t weight[9];} data;} weights;
} kpu_weights_kernel_16_3x3_t;typedef struct
{uint64_t calc_done_int : 1;uint64_t layer_cfg_almost_empty_int : 1;uint64_t layer_cfg_almost_full_int : 1;uint64_t reserved : 61;
} kpu_config_interrupt_t;typedef struct
{uint64_t fifo_full_threshold : 4;uint64_t fifo_empty_threshold : 4;uint64_t reserved : 56;
} kpu_config_fifo_threshold_t;typedef struct
{uint64_t dma_fifo_flush_n : 1;uint64_t gs_fifo_flush_n : 1;uint64_t cfg_fifo_flush_n : 1;uint64_t cmd_fifo_flush_n : 1;uint64_t resp_fifo_flush_n : 1;uint64_t reserved : 59;
} kpu_config_fifo_ctrl_t;typedef struct
{uint64_t eight_bit_mode : 1;uint64_t reserved : 63;
} kpu_config_eight_bit_mode_t;typedef struct
{volatile uint64_t layer_argument_fifo;volatile union{uint64_t reg;kpu_config_interrupt_t data;} interrupt_status;volatile union{uint64_t reg;kpu_config_interrupt_t data;} interrupt_raw;volatile union{uint64_t reg;kpu_config_interrupt_t data;} interrupt_mask;volatile union{uint64_t reg;kpu_config_interrupt_t data;} interrupt_clear;volatile union{uint64_t reg;kpu_config_fifo_threshold_t data;} fifo_threshold;volatile uint64_t fifo_data_out;volatile union{uint64_t reg;kpu_config_fifo_ctrl_t data;} fifo_ctrl;volatile union{uint64_t reg;kpu_config_eight_bit_mode_t data;} eight_bit_mode;
} kpu_config_t;typedef struct
{kpu_layer_argument_t *layers;kpu_layer_argument_t *remain_layers;plic_irq_callback_t callback;void *ctx;uint64_t *src;uint64_t *dst;uint32_t src_length;uint32_t dst_length;uint32_t layers_length;uint32_t remain_layers_length;dmac_channel_number_t dma_ch;uint32_t eight_bit_mode;float output_scale;float output_bias;float input_scale;float input_bias;
} kpu_task_t;typedef struct
{uint32_t version;uint32_t flags;uint32_t arch;uint32_t layers_length;uint32_t max_start_address;uint32_t main_mem_usage;uint32_t output_count;
} kpu_kmodel_header_t;typedef struct
{uint32_t version;uint32_t flags;uint32_t layers_length;uint32_t max_start_address;uint32_t layers_argument_start;
} kpu_model_header_t;typedef struct
{uint32_t address;uint32_t size;
} kpu_model_output_t;typedef enum
{KL_INVALID = 0,KL_ADD,KL_QUANTIZED_ADD,KL_GLOBAL_MAX_POOL2D,KL_QUANTIZED_GLOBAL_MAX_POOL2D,KL_GLOBAL_AVERAGE_POOL2D,KL_QUANTIZED_GLOBAL_AVERAGE_POOL2D,KL_MAX_POOL2D,KL_QUANTIZED_MAX_POOL2D,KL_AVERAGE_POOL2D,KL_QUANTIZED_AVERAGE_POOL2D,KL_QUANTIZE,KL_DEQUANTIZE,KL_REQUANTIZE,KL_L2_NORMALIZATION,KL_SOFTMAX,KL_CONCAT,KL_QUANTIZED_CONCAT,KL_FULLY_CONNECTED,KL_QUANTIZED_FULLY_CONNECTED,KL_TENSORFLOW_FLATTEN,KL_QUANTIZED_TENSORFLOW_FLATTEN,KL_RESIZE_NEAREST_NEIGHBOR,KL_QUANTIZED_RESIZE_NEAREST_NEIGHBOR,KL_CHANNELWISE_DEQUANTIZE,KL_LOGISTIC,KL_K210_CONV = 10240,KL_K210_ADD_PADDING,KL_K210_REMOVE_PADDING,KL_K210_UPLOAD
} kpu_model_layer_type_t;typedef struct
{uint32_t type;uint32_t body_size;
} kpu_model_layer_header_t;typedef enum
{KLF_NONE = 0,KLF_MAIN_MEM_OUT = 1
} kpu_model_layer_flags_t;typedef enum
{KLP_SAME = 0,KLP_VALID = 1
} kpu_model_padding_t;typedef enum
{KLA_LINEAR = 0,KLA_RELU = 1,KLA_RELU6 = 2
} kpu_model_activation_t;typedef struct
{float scale;float bias;
} kpu_model_quant_param_t;typedef struct
{uint32_t width;uint32_t height;uint32_t channels;
} kpu_model_shape_t;typedef struct
{uint32_t start;uint32_t size;
} kpu_model_memory_range_t;typedef struct
{uint32_t flags;uint32_t main_mem_out_address;uint32_t layer_offset;uint32_t weights_offset;uint32_t bn_offset;uint32_t act_offset;
} kpu_model_conv_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_a_address;uint32_t main_mem_in_b_address;uint32_t main_mem_out_address;uint32_t count;
} kpu_model_add_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_a_address;uint32_t main_mem_in_b_address;uint32_t main_mem_out_address;uint32_t count;int32_t in_a_offset;int32_t in_a_mul;int32_t in_a_shift;int32_t in_b_offset;int32_t in_b_mul;int32_t in_b_shift;int32_t out_offset;int32_t out_mul;int32_t out_shift;
} kpu_model_quant_add_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t main_mem_out_address;uint32_t kernel_size;uint32_t channels;
} kpu_model_gap2d_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t main_mem_out_address;kpu_model_shape_t in_shape;kpu_model_shape_t out_shape;uint32_t kernel_width;uint32_t kernel_height;uint32_t stride_width;uint32_t stride_height;uint32_t padding_width;uint32_t padding_height;
} kpu_model_quant_max_pool2d_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t main_mem_out_address;kpu_model_shape_t in_shape;kpu_model_shape_t out_shape;uint32_t kernel_width;uint32_t kernel_height;uint32_t stride_width;uint32_t stride_height;uint32_t padding_width;uint32_t padding_height;kpu_model_activation_t act;
} kpu_model_ave_pool2d_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t mem_out_address;uint32_t count;kpu_model_quant_param_t quant_param;
} kpu_model_quantize_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t main_mem_out_address;uint32_t count;kpu_model_quant_param_t quant_param;
} kpu_model_dequantize_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t main_mem_out_address;uint32_t count;uint8_t table[256];
} kpu_model_requantize_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t kpu_mem_out_address;uint32_t channels;
} kpu_model_add_padding_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t main_mem_out_address;uint32_t channels;
} kpu_model_remove_padding_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t kpu_mem_out_address;uint32_t width;uint32_t height;uint32_t channels;
} kpu_model_upload_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t main_mem_out_address;uint32_t channels;
} kpu_model_l2_norm_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t main_mem_out_address;uint32_t channels;
} kpu_model_softmax_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_out_address;uint32_t input_count;kpu_model_memory_range_t inputs_mem[0];
} kpu_model_concat_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t main_mem_out_address;uint32_t in_channels;uint32_t out_channels;kpu_model_activation_t act;float weights[0];
} kpu_model_fully_connected_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t main_mem_out_address;kpu_model_shape_t shape;
} kpu_model_tf_flatten_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t main_mem_out_address;kpu_model_shape_t in_shape;uint32_t out_width;uint32_t out_height;uint32_t align_corners;
} kpu_model_resize_nearest_neighbor_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t main_mem_out_address;kpu_model_shape_t in_shape;uint32_t out_width;uint32_t out_height;uint32_t align_corners;
} kpu_model_quant_resize_nearest_neighbor_layer_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t main_mem_out_address;uint32_t channels;uint32_t channel_size;kpu_model_quant_param_t quant_params[0];
} kpu_model_channelwise_dequant_argument_t;typedef struct
{uint32_t flags;uint32_t main_mem_in_address;uint32_t main_mem_out_address;uint32_t channels;
} kpu_model_logistic_layer_argument_t;typedef void (*kpu_done_callback_t)(void *userdata);typedef struct
{int is_nncase;union{struct{const uint8_t *model_buffer;uint8_t *main_buffer;uint32_t output_count;const kpu_model_output_t *outputs;const kpu_model_layer_header_t *layer_headers;const uint8_t *body_start;uint32_t layers_length;volatile uint32_t current_layer;const uint8_t *volatile current_body;dmac_channel_number_t dma_ch;kpu_done_callback_t done_callback;void *userdata;};struct{void* nncase_ctx;};};
} kpu_model_context_t;typedef struct
{uint32_t weigths_offset;uint32_t bn_offset;uint32_t act_offset;float input_scale;float input_bias;float output_scale;float output_bias;
} kpu_model_layer_metadata_t;typedef struct _quantize_param
{float scale;float bias;
} quantize_param_t;extern volatile kpu_config_t *const kpu;/*** @brief       Modle complier init kpu handler** @param[in]   task            Kpu handler** @return      Kpu handler*/
extern kpu_task_t *kpu_task_init(kpu_task_t *task);/*** @brief       Kpu run for AI** @param[in]   task                Kpu handler* @param[in]   dma_ch              DMA for kpu* @param[in]   src                 The picture data* @param[in]   dest                The result of kpu* @param[in]   callback            The callback of kpu** @return      result*     - 0      Success*     - Other  Fail.Kpu is busy.*/
int kpu_run(kpu_task_t *task, dmac_channel_number_t dma_ch, const void *src, void *dest, plic_irq_callback_t callback);/*** @brief       Get kpu result buf** @param[in]   task                Kpu handler** @return      Kpu result buf*/
uint8_t *kpu_get_output_buf(kpu_task_t *task);/*** @brief       Release kpu output buf** @param[in]   output_buf                Kpu output buf**/
void kpu_release_output_buf(uint8_t *output_buf);/*** @brief       Kpu run for AI** @param[in]   task                Kpu handler
*
* @return      result
*     - 0      Success
*     - Other  Fail.Kpu is busy.
*/
int kpu_start(kpu_task_t *task);/*** @brief      Initialize kpu handler** @param[in]   task            Kpu handler** @return      result*     - 0      Success*     - Other  Fail.*/
int kpu_single_task_init(kpu_task_t *task);/*** @brief      Uninitialize kpu handler** @param[in]   task            Kpu handler** @return      result*     - 0      Success*     - Other  Fail.*/
int kpu_single_task_deinit(kpu_task_t *task);/*** @brief      Load kmodel and init kpu task** @param[in]   task            Kpu handler* @param[in]   buffer          Kmodel* @param[in]   meta            Test data** @return      result*     - 0      Success*     - Other  Fail.*/
int kpu_model_load_from_buffer(kpu_task_t *task, uint8_t *buffer, kpu_model_layer_metadata_t **meta);/*** @brief       Kpu initialize** @param[in]   eight_bit_mode            0:16bit mode  1:8bit mode* @param[in]   callback                  Callback of kpu* @param[in]   userdata                  Data of callback**/
void kpu_init(int eight_bit_mode, plic_irq_callback_t callback, void *userdata);/*** @brief       Kpu input data by dma** @param[in]   layer                   Kpu task layer* @param[in]   src                     Image data* @param[in]   dma_ch                  Dmac channel* @param[in]   callback                Dmac complete callback* @param[in]   userdata                Data of callback**/
void kpu_input_dma(const kpu_layer_argument_t *layer, const uint8_t *src, dmac_channel_number_t dma_ch, plic_irq_callback_t callback, void *userdata);/*** @brief       Kpu input data by cpu** @param[in]   layer                   Kpu task layer* @param[in]   src                     Image data* @param[in]   width                   Image width* @param[in]   height                  Image heigth* @param[in]   channels                Color channel, RGB is 3**/
void kpu_input_with_padding(kpu_layer_argument_t *layer, const uint8_t *src, int width, int height, int channels);/*** @brief       Kpu run only one layer** @param[in]   layer                   Kpu task layer**/
void kpu_conv2d(kpu_layer_argument_t *layer);/*** @brief       Kpu run only one layer then get the result by dma** @param[in]   layer                   Kpu task layer* @param[in]   dma_ch                  Dmac channel* @param[in]   dest                    Result* @param[in]   callback                Dmac complete callback* @param[in]   userdata                Data of callback**/
void kpu_conv2d_output(kpu_layer_argument_t *layer, dmac_channel_number_t dma_ch, uint8_t *dest, plic_irq_callback_t callback, void *userdata);/*** @brief       Kpu pooling** @param[in]   src                        Source* @param[in]   src_param                  Source param* @param[in]   kernel_size                Kernel size, 7*7 is 49* @param[in]   channels                   Channels* @param[in]   dest                       Dest* @param[in]   dest_param                 Dest param**/
void kpu_global_average_pool(const uint8_t *src, const quantize_param_t *src_param, int kernel_size, int channels, uint8_t *dest, const quantize_param_t *dest_param);/*** @brief       Kpu pooling** @param[in]   src                        Source* @param[in]   src_param                  Source param* @param[in]   kernel_size                Kernel size, 7*7 is 49* @param[in]   channels                   Channels* @param[in]   dest                       Dest**/
void kpu_global_average_pool_float(const uint8_t *src, const quantize_param_t *src_param, int kernel_size, int channels, float *dest);/*** @brief       Kpu fullly connected by cpu** @param[in]   src                                 Source* @param[in]   weights                             Weight* @param[in]   biases                              Biases* @param[in]   dest                                Dest* @param[in]   input_channels                      Input channels* @param[in]   output_channels                     Output channels**/
void kpu_fully_connected(const float *src, const float *weights, const float *biases, float *dest, int input_channels, int output_channels);/*** @brief       Kpu matrix multiplication** @param[in]   src                                 Source* @param[in]   channels                            Channels* @param[in]   dest                                Dest* @param[in]   dest_param                          Dest param**/
void kpu_matmul_end(const uint8_t *src, int channels, float *dest, const quantize_param_t *dest_param);/*** @brief       Kpu dequantize** @param[in]   src                                 Source* @param[in]   src_param                           Source param* @param[in]   count                               Dequantize count* @param[in]   dest                                Dest**/
void kpu_dequantize(const uint8_t *src, const quantize_param_t *src_param, size_t count, float *dest);/*** @brief       Kpu load kmodel** @param[in]   ctx                                 Kmodel object* @param[in]   buffer                              Kmodel buffer** @return      result*     - 0      Success*     - Other  Fail.*/
int kpu_load_kmodel(kpu_model_context_t *ctx, const uint8_t *buffer);/*** @brief       Kpu free kmodel buffer** @param[in]   ctx                                 kmodel object**/
void kpu_model_free(kpu_model_context_t *ctx);/*** @brief       Kpu load kmodel** @param[in]   ctx                                 Kmodel object* @param[in]   index                               Output index* @param[in]   data                                Output data* @param[in]   size                                Output data size** @return      result*     - 0      Success*     - Other  Fail.*/
int kpu_get_output(kpu_model_context_t *ctx, uint32_t index, uint8_t **data, size_t *size);/*** @brief       Kpu run kmodel** @param[in]   ctx                                 Kmodel object* @param[in]   src                                 Source data* @param[in]   dma_ch                              Dma channel* @param[in]   done_callback                       Kpu complete callback* @param[in]   userdata                            Data of callback** @return      result*     - 0      Success*     - Other  Fail.*/
int kpu_run_kmodel(kpu_model_context_t *ctx, const uint8_t *src, dmac_channel_number_t dma_ch, kpu_done_callback_t done_callback, void *userdata);#endif

kpu.h文件研究(完善中)相关推荐

  1. Spring Cloud: .yml属性文件配置 (完善中)

    服务消费端 server:port: 8080 spring:application:name: orderservice # spring cloud 服务名称# 数据源datasource:dri ...

  2. C++大型项目中使用hpp和h文件代替cpp

    文章目录 1.hpp头文件与h头文件的区别: 2.msf中代码分析 2.1利用hpp实现 2.2利用h文件实现 1.hpp头文件与h头文件的区别: (1) hpp,其实质就是将.cpp的实现代码混入. ...

  3. c语言.h文件实例,C 语言项目中.h文件和.c文件的关系

    那是一个被 遗忘的年代,在编译器只认识.c(.cpp))文件,而不知道.h是何物的年代. 那时的人们写了很多的.c(.cpp)文件,渐渐地,人们发现在 很多.c(.cpp)文件中的声明语句就是相同的, ...

  4. c语言中.h文件中的宏定义,endian.h这个头文件里面的宏可以直接用么?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 endian.h头文件中以宏的形式定义了大端字节序.小端字节序和混合字节序 #define __LITTLE_ENDIAN 1234 #define __ ...

  5. 编译过程中,termcap.h 文件找不到路径 licli.a终于生成

    编译过程中,termcap.h      文件找不到路径   查看是linux  源码下找不到termcap.h文件 安装了所有关于*cap*的源码包也不起作用 今天终于解决了这个问题,搜termca ...

  6. C语言中 *.c和*.h文件的区别!

    C语言中 *.c和*.h文件的区别!      这是HR面试我的一道题,没技术上含量,不过细想起来,还是C语言的最基本的知识!俗话说,目标决定动力,细节决定成败! C文件就是C语言系列的源文件,而H文 ...

  7. Qt中查看ui_xxx.h文件方法

    前提 1.Qt当有界面 2.构造完成 满足以上两个条件qt会生成ui_xxx.h文件. 如何查看 方法1 在cpp文件中找到UI下的一个对象 如: ui->textEdit Ui::QWDial ...

  8. stm32中stm32f10x_type.h(固件3.0以前)、stm32f10x.h(固件3.0以后)、stdint.h文件的关系

    在stm32f10x的3.5固件库中stm32f10x.h有以下代码(第478行开始): /*** @}*/#include "core_cm3.h" #include " ...

  9. (转)51单片机C中关于.c文件和.h文件

    1)h文件作用 1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明: 2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h). 2)h文件里应该有什么 ...

最新文章

  1. 硅谷产学研的创新循环
  2. echarts用法配置
  3. spo2数据集_Arduino 血氧心率模块传感器数据采集
  4. linux中256错误,YUM安装遭遇: [Errno 256] No more mirrors to try
  5. mac电脑开机键盘和鼠标失灵
  6. JavaScript的运动——模拟重力场
  7. 求圆面积的python代码_《求》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
  8. 诸葛亮的十堂课:在变局中安身立命,在逆境中找到力量
  9. 张亚勤新力作《变革中的思索》受热捧
  10. 时间分集、空间/天线分集、频率分集——无线通信中的分集技术
  11. 大数据导论学习日志Day1
  12. 关于 2021 年度「博客之星」评选刷票行为处罚通知
  13. 基于RT-Thread系统的迷你时钟
  14. 从刚体动力学方程到 MATLAB 多种方法仿真验证
  15. 群发邮件技巧集锦[转]
  16. 【蜂言蜂语】何以解忧?唯有暴富~
  17. Swin—UNet代码学习(pytorch)
  18. python定时任务巡检写入excel_Python巡检关于Excel表格操作
  19. IDEA快捷键改为eclipse的快捷键(完整版)、常用快捷键、导入已有的设置
  20. php触发器 优点,触发器的作用

热门文章

  1. 西门子博途系列学习笔记SCL(一)
  2. 说一说BAPI_MATERIAL_SAVEDATA的使用过程
  3. 基于GEE(Google earth engine)的 GIMMS NDVI月合成
  4. 中台质疑背后的再“进化”
  5. 2022年全球与中国无人机软件行业发展趋势及投资战略分析报告
  6. python 实现四则运算(一)
  7. php设计模式(四):行为型模式
  8. 又新又全 |制图符号库、最新市级国土空间总体规划制图规范“GIS符号库“下载
  9. 大学计算机基础实验指导第一章答案,(教材)大学计算机基础实验指导与习题解答...
  10. Vue中使用quill富文本