Jetson基本笔录3 -- Module timer gpio chardev
文章目录
- Module Timer
- Module GPIO
- GPIO Header Pinout
- Module chardev
- 备忘
- 参考
Module Timer
内核空间, 每5s打印一次计数值
//test_timer.c
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/timer.h>struct timer_list timer0;void timer0_callback(unsigned long data)
{static unsigned long cnt = 0;mod_timer(&timer0, jiffies + msecs_to_jiffies(5000));printk(KERN_INFO "timer0.data = %ld\n", cnt++);
}static int module_test_init(void)
{printk(KERN_ALERT "Module Timer Test\n");setup_timer(&timer0, timer0_callback, 0);mod_timer(&timer0, jiffies + msecs_to_jiffies(5000));return 0;
}static void module_test_exit(void)
{del_timer(&timer0);printk(KERN_ALERT "Goodbye Module Timer Test\n");
}module_init(module_test_init);
module_exit(module_test_exit);MODULE_AUTHOR("yiming");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Module Test");
其中:
#include <linux/timer.h>
, 定时器相关的头文件struct timer_list timer0;
定义一个定时器setup_timer
, 绑定定时器和回调函数mod_timer
, 修改定时器的超时时间, 函数原型int mod_timer (struct timer_list * timer, unsigned long expires);
其中expires -- new timeout in jiffies
, 而jiffies
记录着从开机到现在的时钟中断次数(ticks), 和ms的转换关系用msecs_to_jiffies
然后是Makefile
, 和上次hello例子中的Makefile基本一样, 除了第一行
obj-m:=test_timer.okernel_dir = /home/z/jetson/Linux_for_Tegra/source/public/kernel/kernel-4.9
cross_compile_dir = /home/z/jetson/l4t-gcc/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-makefile_dir := $(shell pwd)
top_makefile_dir := $(shell pwd)/top
build_dir := $(shell pwd)/buildall:@if [ ! -d ${top_makefile_dir} ]; then \export CROSS_COMPILE=${cross_compile_dir}; \export LOCALVERSION=-tegra; \mkdir -p ${top_makefile_dir}; \cd ${kernel_dir}; \make ARCH=arm64 O=${top_makefile_dir} tegra_defconfig; \cd ${top_makefile_dir}; \make ARCH=arm64 O=${top_makefile_dir} -j $$(nproc) modules_prepare; \echo "\n=================================\n"; \fi; \export CROSS_COMPILE=${cross_compile_dir}; \cd ${makefile_dir};\mkdir -p ${build_dir}; \make ARCH=arm64 -C ${top_makefile_dir} M=${makefile_dir} -j $$(nproc); \mv *.mod.c *.o *.order *.symvers ${build_dir}clean:@# rm -rf *.mod.* *.o *.order *.symvers *.korm -rf build *.ko top
其中:
if..fi
里面是看看有没有顶级Makefile, 没有就从内核源码中生成一个放到top文件夹里面
make
, 然后拷贝生成的 test_timer.ko
到TX2, 测试
$ sudo insmod test_timer.ko# 可以看到大概5.1s打印一次
$ dmesg | tail -f
[12549.587808] Module Timer Test
[12554.685658] timer0.data = 0
[12559.805676] timer0.data = 1
[12564.925585] timer0.data = 2
[12570.045719] timer0.data = 3
[12575.165784] timer0.data = 4
[12580.285815] timer0.data = 5$ sudo rmmod test_timer
$ dmesg | tail -f
[12790.207129] timer0.data = 46
[12795.195966] Goodbye Module Timer Test
Module GPIO
常见在用户空间中:
export x > /sys/class/gpio/export
, 使用sysfs
接口将gpiox
导入用户空间echo out > /sys/class/gpio/gpiox/direction
, 设置gpiox为输出, in为输入echo 1 > /sys/class/gpio/gpiox/value
, gpiox输出高电平cat /sys/class/gpio/gpiox/value
, 读取gpiox电平
用户空间可以选用自己喜欢的语言Shell/C/C++/Python
进行操作.
内核空间, 实现让GPIO396(官方载板J21 Pin7)
每5s翻转一次电平, GPIO392(官方载板J21 Pin12)
设置为上升沿+下降沿中断, 用杜邦线把两个GPIO连起来
//test_gpio.c
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/timer.h>
#include <linux/gpio.h>
#include <linux/interrupt.h> //参考下面的 GPIO Header Pinout 小节
static unsigned int gpiox = 396;
static unsigned int gpioy = 392;
static unsigned int irq_num;
struct timer_list timer0;static void timer0_callback(unsigned long data)
{static unsigned long cnt = 0;mod_timer(&timer0, jiffies + msecs_to_jiffies(5000));if(cnt % 2) {printk(KERN_INFO "gpio%d low\n", gpiox);gpio_set_value(gpiox, 0);} else {printk(KERN_INFO "gpio%d high\n", gpiox);gpio_set_value(gpiox, 1);}++cnt;
}static irq_handler_t gpioy_irq_callback(unsigned int irq, void *dev_id, struct pt_regs *regs)
{if(gpio_get_value(gpioy) == 1) {printk(KERN_INFO "rising irq\n");} else {printk(KERN_INFO "falling irq\n");}return (irq_handler_t) IRQ_HANDLED;
}static int module_test_init(void)
{int result = 0;printk(KERN_ALERT "Module GPIO Test\n");if(!gpio_is_valid(gpiox)) {printk(KERN_ALERT "GPIO Test: invalid gpio %d\n", gpiox);return -ENODEV;}//set gpiox outgpio_request(gpiox, "sysfs");gpio_direction_output(gpiox, true);gpio_set_value(gpiox, 0);gpio_export(gpiox, false); //false: direction not change//set gpioy ingpio_request(gpioy, "sysfs");gpio_direction_input(gpioy);//gpio_set_debounce(gpioy, 200); //Debounce 200msgpio_export(gpioy, false);//irqirq_num = gpio_to_irq(gpioy);printk("gpio%d is mapped to irq %d\n", gpioy, irq_num);result = request_irq(irq_num,(irq_handler_t)gpioy_irq_callback,IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,"test_gpio_handler",NULL);printk(KERN_INFO "GPIO_TEST: The interrupt request result is: %d\n", result);setup_timer(&timer0, timer0_callback, 0);mod_timer(&timer0, jiffies + msecs_to_jiffies(5000));return result;
}static void module_test_exit(void)
{gpio_set_value(gpiox, 0);gpio_unexport(gpiox);gpio_free(gpiox);free_irq(irq_num, NULL);gpio_unexport(gpioy);gpio_free(gpioy);del_timer(&timer0);printk(KERN_ALERT "Goodbye Module GPIO Test\n");
}module_init(module_test_init);
module_exit(module_test_exit);MODULE_AUTHOR("yiming");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Module Test");
其中:
- 包含了定时器的头文件
timer.h
, GPIO的gpio.h
, 中断的interrupt.h
gpiox
设置为输出, 在定时器中断中每5s翻转一次电平gpioy
设置为输入, 绑定到中断request_irq
中的IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING
指上升沿下降沿都中断,test_gpio_handler
可以在/proc/interrupts
中看到, 用于区分owner
Makefile
还是上面的, 只需要第一行改为obj-m:=test_gpio.o
make
后生成的test_gpio.ko
拷贝到TX2, 记得用用杜邦线把官方载板上J21的Pin7和Pin12连起来
, 测试
$ sudo insmod test_gpio.ko# 多了 gpio396 和 gpiochip392
$ ls /sys/class/gpio/
export gpio396 gpiochip224 gpiochip256 unexport
gpio392 gpiochip216 gpiochip240 gpiochip320$ cat /proc/interrupts | grep test
205: 88 0 0 0 0 0 tegra-gpio 72 Edge test_gpio_handler
$ sudo rmmod test_gpio.ko# dmesg | tail -f
$ dmesg -wH &
[1月24 16:04] Module GPIO Test
[ +0.003122] gpio392 is mapped to irq 205 # irq_num
[ +0.000021] GPIO_TEST: The interrupt request result is: 0 # 0 表示正常
[ +5.054777] gpio396 high # gpio396初始设置为低电平, 5s后的这里变成高电平, 产生上升沿中断
[ +0.000494] rising irq
[ +5.119456] gpio396 low # 5s后高电平变为低电平, 产生下降沿中断
[ +0.000059] falling irq
[ +5.120096] gpio396 high
[ +0.000490] rising irq
[ +5.119621] gpio396 low
[ +0.000322] falling irq
[ +5.119775] gpio396 high
[ +0.000395] rising irq
[ +5.119674] gpio396 low
[ +0.000338] falling irq
[ 1634.696580] Goodbye Module GPIO Test
[ +1.125281] Goodbye Module GPIO Test
这里测试J21的Pin12做输入中断是可以的, 但是Pin11做输入中断未成功, Pin15运行insmod直接重启, 啊这…
GPIO Header Pinout
之前的文章也写过一个C计算GPIO的工具 TX2/Xavier Linux GPIO 计算
NVIDIA Jetson TX2 J21 Header Pinout - JetsonHacks
Connector Pin # | Connector Label | HW GPIO | Linux GPIO | Notes |
---|---|---|---|---|
1 | 3V3 | |||
2 | 5V0 | |||
3 | SDA1 | EE.01 | 305 | Don’t use as GPIO |
4 | 5V0 | |||
5 | SCL1 | EE.00 | 304 | Don’t use as GPIO |
6 | GND | 0 | ||
7 | GPIO_GCLK | J.04 | 396 | |
8 | TXD0 | T.00 | 464 | Don’t use as GPIO |
9 | GND | 0 | ||
10 | RXD0 | T.01 | 465 | Don’t use as GPIO |
11 | GPIO_GEN0 | T.02 | 466 | |
12 | GPIO_GEN1 | J.00 | 392 | |
13 | GPIO_GEN2 | J.05 | 397 | |
14 | GND | |||
15 | GPIO_GEN3 | P17 | 255 | |
16 | GPIO_GEN4 | AA.00 | 296 | |
17 | 3V3 | 0 | ||
18 | GPIO_GEN5 | Y.01 | 481 | |
19 | SPI_MOSI | N.05 | 429 | |
20 | GND | 0 | ||
21 | SPIO_MISO | N.04 | 428 | |
22 | GPIO_GEN6 | P16 | 254 | |
23 | SPI_SCLK | N.03 | 427 | |
24 | SPI_CE0_N | N.06 | 430 | |
25 | GND | |||
26 | SPI_CE1_N | |||
27 | ID_SD | C.06 | 342 | Don’t use as GPIO |
28 | ID_SC | C.05 | 341 | Don’t use as GPIO |
29 | GPIO5 | J.06 | 398 | |
30 | GND | |||
31 | GPIO6 | AA.02 | 298 | |
32 | GPIO12 | AA.01 | 297 | |
33 | GPIO13 | I.05 | 389 | |
34 | GND | |||
35 | GPIO19 | J.03 | 395 | |
36 | GPIO16 | T.03 | 467 | |
37 | GPIO26 | I.04 | 388 | |
38 | GPIO20 | J.02 | 394 | |
39 | GND | |||
40 | GPIO21 | J.01 | 393 |
Module chardev
直接把 lkmpg/chardev.c at master · sysprog21/lkmpg (github.com) 例子拿过来看
/* * chardev.c: Creates a read-only char device that says how many times * you have read from the dev file */ #include <linux/cdev.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/poll.h> /* Prototypes - this would normally go in a .h file */
static int device_open(struct inode *, struct file *);
static int device_release(struct inode *, struct file *);
static ssize_t device_read(struct file *, char __user *, size_t, loff_t *);
static ssize_t device_write(struct file *, const char __user *, size_t, loff_t *); #define SUCCESS 0
#define DEVICE_NAME "chardev" /* Dev name as it appears in /dev/ */
#define BUF_LEN 80 /* Max length of the message from the device */ /* Global variables are declared as static, so are global within the file. */ static int major; /* major number assigned to our device driver */ enum { CDEV_NOT_USED = 0, CDEV_EXCLUSIVE_OPEN = 1,
}; /* Is device open? Used to prevent multiple access to device */
static atomic_t already_open = ATOMIC_INIT(CDEV_NOT_USED); static char msg[BUF_LEN]; /* The msg the device will give when asked */ static struct class *cls; static struct file_operations chardev_fops = { .read = device_read, .write = device_write, .open = device_open, .release = device_release,
}; static int __init chardev_init(void)
{ major = register_chrdev(0, DEVICE_NAME, &chardev_fops); if (major < 0) { pr_alert("Registering char device failed with %d\n", major); return major; } pr_info("I was assigned major number %d.\n", major); cls = class_create(THIS_MODULE, DEVICE_NAME); device_create(cls, NULL, MKDEV(major, 0), NULL, DEVICE_NAME); pr_info("Device created on /dev/%s\n", DEVICE_NAME); return SUCCESS;
} static void __exit chardev_exit(void)
{ device_destroy(cls, MKDEV(major, 0)); class_destroy(cls); /* Unregister the device */ unregister_chrdev(major, DEVICE_NAME);
} /* Methods */ /* Called when a process tries to open the device file, like * "sudo cat /dev/chardev" */
static int device_open(struct inode *inode, struct file *file)
{ static int counter = 0; if (atomic_cmpxchg(&already_open, CDEV_NOT_USED, CDEV_EXCLUSIVE_OPEN)) return -EBUSY; sprintf(msg, "I already told you %d times Hello world!\n", counter++); try_module_get(THIS_MODULE); return SUCCESS;
} /* Called when a process closes the device file. */
static int device_release(struct inode *inode, struct file *file)
{ /* We're now ready for our next caller */ atomic_set(&already_open, CDEV_NOT_USED); /* Decrement the usage count, or else once you opened the file, you will * never get get rid of the module. */ module_put(THIS_MODULE); return SUCCESS;
} /* Called when a process, which already opened the dev file, attempts to * read from it. */
static ssize_t device_read(struct file *filp, /* see include/linux/fs.h */ char __user *buffer, /* buffer to fill with data */ size_t length, /* length of the buffer */ loff_t *offset)
{ /* Number of bytes actually written to the buffer */ int bytes_read = 0; const char *msg_ptr = msg; if (!*(msg_ptr + *offset)) { /* we are at the end of message */ *offset = 0; /* reset the offset */ return 0; /* signify end of file */ } msg_ptr += *offset; /* Actually put the data into the buffer */ while (length && *msg_ptr) { /* The buffer is in the user data segment, not the kernel * segment so "*" assignment won't work. We have to use * put_user which copies data from the kernel data segment to * the user data segment. */ put_user(*(msg_ptr++), buffer++); length--; bytes_read++; } *offset += bytes_read; /* Most read functions return the number of bytes put into the buffer. */ return bytes_read;
} /* Called when a process writes to dev file: echo "hi" > /dev/chardev */
static ssize_t device_write(struct file *filp, const char __user *buff, size_t len, loff_t *off)
{ pr_alert("Sorry, this operation is not supported.\n"); return -EINVAL;
} module_init(chardev_init);
module_exit(chardev_exit); MODULE_LICENSE("GPL");
其中:
#define DEVICE_NAME "chardev"
, 那insmod
后对应的设备就是/dev/chardev
struct file_operations
采用分配给结构的新方法read write open release
, 用C99的点语法来指定初始值设定项.chardev_init
中, 用major 0 传递给register_chrdev
, 动态分配major numeratomic_cmpxchg(&already_open, CDEV_NOT_USED, CDEV_EXCLUSIVE_OPEN)
是原子判断, 当 already_open的值为CDEV_NOT_USED
, 也就是未使用时, 赋值为CDEV_NOT_USED + CDEV_EXCLUSIVE_OPEN
, 也就是打开, 返回值为旧值, 也就是CDEV_NOT_USED=0
MKDEV(major, 0)
, 将主设备号和次设备号转换为dev_t类型put_user(*(msg_ptr++), buffer++);
把内核空间的数据msg拷贝到用户空间buffer
make
后生成的test_chardev.ko
拷贝到TX2, 测试
$ sudo insmod test_chardev.ko
$ sudo dmesg | tail -2
[ 9657.474056] I was assigned major number 506.
[ 9657.474379] Device created on /dev/chardev# open read
$ sudo cat /dev/chardev
I already told you 0 times Hello world!
$ sudo cat /dev/chardev
I already told you 1 times Hello world!# write
$ sudo sh -c 'echo "hi" > /dev/chardev'
sh: echo: I/O error
$ dmesg | tail -f
[ 89.636842] Sorry, this operation is not supported.$ sudo rmmod test_chardev
备忘
块设备block -> b
, 字符设备character -> c
, 链接link -> l
, 文件夹directory - d
$ ls -l /dev
...
crw-rw---- 1 root i2c 89, 0 1月 24 15:37 i2c-0
crw-rw---- 1 root i2c 89, 1 1月 24 15:37 i2c-1
lrwxrwxrwx 1 root root 25 1月 24 15:37 initctl -> /run/systemd/initctl/fifo
drwxr-xr-x 4 root root 220 1月 24 15:37 input
brw-rw---- 1 root disk 179, 0 1月 24 15:37 mmcblk0
drwxrwxrwt 2 root root 60 1月 24 15:37 shm
crw-rw---- 1 root dialout 4, 67 1月 24 15:37 ttyS3
crw-rw---- 1 root dialout 4, 143 1月 24 15:37 ttyTCU0
crw-rw---- 1 root dialout 238, 1 1月 24 15:37 ttyTHS1
crw-rw---- 1 root dialout 238, 2 1月 24 15:37 ttyTHS2
crw-rw---- 1 root dialout 238, 3 1月 24 15:37 ttyTHS3# 参考
# https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/admin-guide/devices.txt
# https://sysprog21.github.io/lkmpg/
# i2c-0, i2c-1 的89是major, 主设备号, 它们由同一驱动程序(major 8)处理
# i2c-0 的0 是minor, 次设备号 # cat /proc/devices
参考
- Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解 - 专注it - 博客园 (cnblogs.com)
- NVIDIA Tegra186 GPIO controllers
- Writing a Linux Loadable Kernel Module (LKM) - Interfacing to GPIOs | derekmolloy.ie
- sysprog21/lkmpg: The Linux Kernel Module Programming Guide (updated for 5.x kernels) (github.com)
- devices.txt « admin-guide « Documentation - kernel/git/stable/linux.git - Linux kernel stable tree
- atomic_cmpxchg_gangdai的博客-CSDN博客_atomic_cmpxchg
- MKDEV宏定义及其主要函数_m0_37141848的博客-CSDN博客_mkdev函数
欢迎扫描二维码关注微信公众号, 及时获取最新文章:
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Day03:剑指 Offer II 007. 数组中和为 0 的三个数
题目 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c ,使得 a b c 0 ?请找出所有和为 0 且 不重复 的三元组。 代码实现 基于快排 class Solution {public List<List<Integer&g…...
2024/5/6 6:18:24 - 1.24题目翻译
原题链接:Numeric Keypad_牛客题霸_牛客网 题目: 描述 The numberic keypad on your mobile phone looks like below:1234567890suppose you are holding your mobile phone with single hand. Your thumb points at digit 1. Each time you can 1)pr…...
2024/4/18 5:12:49 - mathpix替代品使用
写论文写到一半最让人抓狂的就是mathpix的次数用完了!该不会想让我手敲那些巨勾8复杂的公式吧,想都别想!!我的时间是用来做宝贵的事情的(自豪脸) 我使用了一下其他几款OCR工具,体验如下&#x…...
2024/4/5 4:16:42 - 微信网页开发(3)--微信网页授权
本文目录1. 什么是授权2. 两种授权方式3. 网页授权access_token和普通access_token4. 网页授权流程5. 网页授权代码开发5.1 项目搭建5.2 修改配置文件5.3 开发启动类5.4 开发公众号配置类5.5 开发控制器5.6 开发测试网页6. 测试6.1 网页授权测试6.2 获取用户code测试6.3 获取JS…...
2024/4/14 5:49:50 - 试题 算法训练 字符删除(Java)
试题 算法训练 字符删除(Java) 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,先输入一个字符串str(长度不超过20),再输入单独的一个字符ch,然后…...
2024/5/6 6:05:38 - 字符串的输入输出处理
输入: 第一行是一个正整数N,最大为100。之后是多行字符串(行数大于N), 每一行字符串可能含有空格,字符数不超过1000。 输出: 先将输入中的前N行字符串(可能含有空格)原…...
2024/5/6 5:56:10 - spring经典面试题灵魂24问,我和面试官纠缠了2个小时,最后拿下offer。
推荐阅读:Java小白进阶架构师学习路线 🧼 网上的 Java面试题文章有非常多,但是大部分都比较老了。很多题目早已不是当前的热门题目,没有必要在这些题目上花太多时间。很多答案放现在已经不准确,可能会误导新人。因此&a…...
2024/4/14 5:52:58 - RocketMQ如何保证消息不丢失+消息顺序+处理积压消息+消息轨迹
使用RocketMQ如何保证消息不丢失? 1、哪些环节会有丢消息的可能? 其中,1,2,4三个场景都是跨网络的,而跨网络就肯定会有丢消息的可能。 然后关于3这个环节,通常MQ存盘时都会先写入操作系统的缓…...
2024/5/6 6:34:38 - Interceptor拦截器概述
拦截器概述 Spring MVC 中的拦截器(Interceptor) 类似于Servlet 中的过滤器(Filter),它主要用于拦截用户请求并做相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。 拦截器的定义: 要使用 Spring MVC 中的拦截器&a…...
2024/4/7 16:45:10 - 如何快速零基础到入门51单片机(三)
单片机介绍 单片机:在一片集成电路芯片上集成微处理器(CPU)、存储器(ROM和RAM)、I/O接口、定时器、中断系统等电路,从而构成了单芯片微型计算机,也就是单片机(single chip Microcom…...
2024/4/20 2:38:07 - Day 02 Tomcat 安装-部署-运行
Tomcat 安装(Fix) 官网下载安装包(最好下载Tomcat8.0/8.5版本的)解压(不要出现中文和空格) Tomcat 基本目录 bin —可执行文件目录 conf —配置文件目录 lib —存放 lib 文件目录 logs —日志文件目…...
2024/4/14 5:52:58 - [ pikachu ] 靶场通关之 XSS (六) --- 什么是 Xss 之盲打 ?
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】🎉点赞➕评论➕收藏 养成习惯…...
2024/4/29 2:28:07 - es6---class 助力js更面向对象 - 类
1.class简单应用 //传统对象 - function function Course(teacher,course){this.teacherteacher;this.coursecourse; } Course.prototype.getCoursefunction(){return teacher is ${this.teacher},course:${this.course} }const coursenew Course(aa,ES6); course.getCourse()…...
2024/4/14 5:50:56 - java实现HTTP的POST协议
转自:微点阅读 https://www.weidianyuedu.com/content/2517432699756.html 使用代码实现HTTP的POST协议流程。 任何HTTP服务器都会支持客户端将文件上传,该功能的实现往往要走POST协议流程。为了使用代码实现该协议,首先需要一个目的HTTP服…...
2024/4/7 16:45:06 - eratosthenes筛法--关于素数
...
2024/4/14 5:51:06 - SpringBoot整合RocketMQ,集群、广播消息
目录环境生产者application.yml发送普通消息消费者application.yml消费组(consumerGroup)集群消费者1 consumer-group-1 (集群)消费者2 consumer-group-1 (集群)消费者3 consumer-group-2消息消费结果集群模…...
2024/4/5 4:16:54 - MyBatis入门学习
入门 1.创建maven项目(此处略去) 2.在pom.xml文件中导入mybatis依赖 <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency>3.在resource目录下创建配置文件m…...
2024/4/17 15:41:48 - 【Mysql基础】五.TCL语言(事务控制)
一.常见的数据库对象 对象描述表(TABLE)存储数据的逻辑单元,以行和列的形式存在数据字典系统表,存放数据库相关信息的表,系统表的数据通常由数据库系统维护,程序员通常不应该修改,只可查看约束…...
2024/4/14 5:50:46 - C++实现快速排序
#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std;int n 0; const int N 100000 10; int arr[N];//快速排序 void quick_sort(int arr[], int l, int r) {if (l > r) return;int temp arr[(l r) >> 1];int i l - 1, j r 1;wh…...
2024/4/20 11:06:49 - 蓝桥杯真题-数列求值(填空-10分)
数列求值(点击前往做题) 输入描述: 给定数列 1, 1, 1, 3, 5, 9, 17, \cdots1,1,1,3,5,9,17,⋯,从第 44 项开始,每项都是前 33 项的和。 求第 2019032420190324 项的最后 44 位数字。 输出描述: 无 输入输出…...
2024/4/19 10:08:29
最新文章
- 我从这些书籍中学来的财务以及税务知识
“你不能指望在开始工作的头两年攒下任何积蓄。” 这句话一直是我的座右铭,也是我给大学生的个人理财建议。这也就难怪我二十出头的时候,基本就是靠薪水过日子。 回想起来,我意识到其实这并不是最好的建议,甚至非常不好。 我现…...
2024/5/6 7:54:23 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 阿里云8核32G云服务器租用优惠价格表,包括腾讯云和京东云
8核32G云服务器租用优惠价格表,云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价,腾讯云和京东云是轻量应用服务器,阿里云是云服务器ECS: 阿里云8核32G服务器 阿里云8核32G服务器价格…...
2024/5/5 8:42:13 - 【Locust分布式压力测试】
Locust分布式压力测试 https://docs.locust.io/en/stable/running-distributed.html Distributed load generation A single process running Locust can simulate a reasonably high throughput. For a simple test plan and small payloads it can make more than a thousan…...
2024/5/5 21:03:09 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/4 23:54:56 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/4 23:54:56 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/4 23:55:17 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/4 23:55:16 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/4 23:55:06 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/4 23:55:01 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57