NXP(I.MX6uLL) UART串口通信原理————这个未复习

参考:Linux NXP (I.MX6uLL) UART串口通信原理
作者:一只青木呀
发布时间: 2020-09-20 16:48:33
网址:https://blog.csdn.net/weixin_45309916/article/details/108694634

目录

  • 1、UART简介
    • 1.1、UART串口通讯格式
    • 1.2、UART 的通信格式:
    • 1.3、UART 电平标准
  • 2、I.MX6U UART 简介
    • 2.1、UART的时钟源选择
  • 3、UART 几个重要的寄存器
    • 3.1、UART 的控制寄存器 1,即UARTx_UCR1(x=1~8)
    • 3.2、UART 的控制寄存器 2,即: UARTx_UCR2
    • 3.3、寄存器UARTx_UCR3
    • 3.4、寄存器 UARTx_USR2
    • 3.5、寄 存 器 UARTx_UFCR 、 UARTx_UBIR 和 UARTx_UBMR
  • UART1 的配置步骤
  • 硬件原理分析
  • 实验程序编写
  • 编译下载验证
    • 编写Makefile 和链接脚本
    • 编译下载

不管是单片机开发还是嵌入式 Linux 开发,串口都是最常用到的外设。可以通过串口将开发板与电脑相连,然后在电脑上通过串口调试助手来调试程序。还有很多的模块,比如蓝牙、GPS、 GPRS 等都使用的串口来与主控进行通信的,在嵌入式 Linux 中一般使用串口作为控制台,所以掌握串口是必备的技能。

1、UART简介

1.1、UART串口通讯格式

串口全称叫做串行接口,通常也叫做 COM 接口,串行接口指的是数据一个一个的顺序传输,通信线路简单。使用两条线即可实现双向通信,一条用于发送,一条用于接收。串口通信距离远,但是速度相对会低,串口是一种很常用的工业接口。 I.MX6U 自带的 UART 外设就是串口的一种, UART 全称是 Universal Asynchronous Receiver/Trasmitter,也就是异步串行收发器。既然有异步串行收发器,那肯定也有同步串行收发器,学过 STM32 的同学应该知道, STM32除 了 有 UART 外 ,还有 另 外一 个 叫 做 USART 的 东 西。 USART 的全 称 是 UniversalSynchronous/Asynchronous Receiver/Transmitter,也就是同步/异步串行收发器相比 UART 多了一个同步的功能,在硬件上体现出来的就是多了一条时钟线。 一般 USART 是可以作为 UART使用的,也就是不使用其同步的功能。

UART 作为串口的一种,其工作原理也是将数据一位一位的进行传输,发送和接收各用一条线,因此通过 UART 接口与外界相连最少只需要三条线: TXD(发送)、RXD(接收) 和 GND(地线)。

1.2、UART 的通信格式:

在这里插入图片描述
上图中的每个位的含义如下:

含义
空闲位数据线在空闲状态的时候为逻辑“1”状态,也就是高电平,表示没有数据线空闲,没有数据传输。
起始位当要传输数据的时候先传输一个逻辑“0”,也就是将数据线拉低,表示开始数据传输。
数据位数据位就是实际要传输的数据,数据位数可选择 5~8 位,我们一般都是按照字节传输数据的,一个字节 8 位,因此数据位通常是 8 位的。低位在前,先传输,高位最后传输。
奇偶校验位这是对数据中“1”的位数进行奇偶校验用的,可以不使用奇偶校验功能
停止位数据传输完成标志位,停止位的位数可以选择 1 位、 1.5 位或 2 位高电平,一般都选择 1 位停止位。
波特率波特率就是 UART 数据传输的速率,也就是每秒传输的数据位数,一般选择 9600、19200、 15200(用的最多)等。

1.3、UART 电平标准

UART 一般的接口电平有 TTL 和 RS-232,一般开发板上都有 TXD 和 RXD 这样的引脚,这些引脚低电平表示逻辑 0,高电平表示逻辑 1,这个就是 TTL 电平。 RS-232 采用差分线, -3~ -15V 表示逻辑 1, +3~+15V 表示逻辑 0。一般下图中的接口就是 TTL 电平:
在这里插入图片描述
上图中的模块就是 USB 转 TTL 模块, TTL 接口部分有 VCC、 GND、 RXD、 TXD、RTS 和 CTS。 RTS 和 CTS 基本用不到,使用的时候通过杜邦线和其他模块的 TTL 接口相连即可。

RS-232 电平需要 DB9 接口, I.MX6U-ALPHA 开发板上的 COM3(UART3)口就是 RS-232 接口的,如下图所示:
在这里插入图片描述
由于现在的电脑都没有 DB9 接口了,取而代之的是 USB 接口,所以就催生出了很多 USB转串口 TTL 芯片,比如 CH340、PL2303 等 。通过这些芯片就可以实现串口 TTL 转 USB。I.MX6UALPHA开发板就使用CH340 芯片来完成UART1 和电脑之间的连接,只需要一条USB 线即可,
在这里插入图片描述

2、I.MX6U UART 简介

上面介绍了 UART 接口,下面具体看一下 I.MX6U 的 UART 接口, I.MX6U 一共有 8 个 UART,其主要特性如下:

  • ①、兼容 TIA/EIA-232F 标准,速度最高可到 5Mbit/S
  • ②、支持串行 IR 接口,兼容 IrDA,最高可到 115.2Kbit/s。
  • ③、支持 9 位或者多节点模式(RS-485)。
  • ④、 1 或 2 位停止位。
  • ⑥、可编程的奇偶校验(奇校验和偶校验)。
  • ⑦、自动波特率检测(最高支持 115.2Kbit/S)

2.1、UART的时钟源选择

UART 的时钟源是由寄存器 CCM_CSCDR1 的 UART_CLK_SEL(bit)位来选择的,当为 0 的时候 UART 的时钟源为 pll3_80m(80MHz),如果为 1 的时候 UART 的时钟源为 osc_clk(24M),一般选择 pll3_80m 作为 UART 的时钟源。寄存器 CCM_CSCDR1 的 UART_CLK_PODF(bit5:0)位是 UART 的时钟分频值,可设置 0~ 63,分别对应 1~64 分频,一般设置为 1 分频,因此最终进入 UART 的时钟为 80MHz

3、UART 几个重要的寄存器

3.1、UART 的控制寄存器 1,即UARTx_UCR1(x=1~8)

在这里插入图片描述
寄存器 UARTx_UCR1 我们用到的重要位如下:

重要位含义
ADBR(bit14)自动波特率检测使能位,为 0 的时候关闭自动波特率检测,为 1 的时候使能自动波特率检测。
UARTEN(bit0)UART 使能位,为 0 的时候关闭 UART,为 1 的时候使能 UART。

3.2、UART 的控制寄存器 2,即: UARTx_UCR2

在这里插入图片描述寄存器 UARTx_UCR2 用到的重要位如下:

含义
IRTS(bit14)为 0 的时候使用 RTS 引脚功能,为 1 的时候忽略 RTS 引脚。
PREN(bit8)奇偶校验使能位,为 0 的时候关闭奇偶校验,为 1 的时候使能奇偶校验。
PROE(bit7)奇偶校验模式选择位,开启奇偶校验以后此位如果为 0 的话就使用偶校验,此位为 1 的话就使能奇校验。
STOP(bit6)停止位数量,为 0 的话 1 位停止位,为 1 的话 2 位停止位。
WS(bit5)数据位长度,为 0 的时候选择 7 位数据位,为 1 的时候选择 8 位数据位。
TXEN(bit2)发送使能位,为 0 的时候关闭 UART 的发送功能,为 1 的时候打开 UART的发送功能。
RXEN(bit1)接收使能位,为 0 的时候关闭 UART 的接收功能,为 1 的时候打开 UART的接收功能。
SRST(bit0)软件复位,为 0 的是时候软件复位 UART,为 1 的时候表示复位完成。复位完成以后此位会自动置 1, 表示复位完成。此位只能写 0,写 1 会被忽略掉。

3.3、寄存器UARTx_UCR3

在这里插入图片描述
寄存器 UARTx_UCR3 用到的重要位如下:

含义
RXDMUXSEL(bit2)这个位应该始终为 1

3.4、寄存器 UARTx_USR2

在这里插入图片描述
寄存器 UARTx_USR2 用到的重要位如下:

含义
TXDC(bit3)发送完成标志位,为 1 的时候表明发送缓冲(TxFIFO)和移位寄存器为空,也就是发送完成,向 TxFIFO 写入数据此位就会自动清零。
RDR(bit0)数据接收标志位,为 1 的时候表明至少接收到一个数据,从寄存器UARTx_URXD 读取数据接收到的数据以后此为会自动清零

3.5、寄 存 器 UARTx_UFCR 、 UARTx_UBIR 和 UARTx_UBMR

通过这三个寄存器可以设置 UART 的波特率,波特率的计算公式如下:
在这里插入图片描述

  • Ref Freq:经过分频以后进入 UART 的最终时钟频率。
  • UBMR:寄存器 UARTx_UBMR 中的值。
  • UBIR:寄存器 UARTx_UBIR 中的值。

通过 UARTx_UFCR 的 RFDIV 位、 UARTx_UBMR 和 UARTx_UBIR 这三者的配合即可得到我们想要的波特率。比如现在要设置 UART 波特率为 115200,那么可以设置 RFDIV 为5(0b101),也就是 1 分频,因此 Ref Freq=80MHz。设置 UBIR=71, UBMR=3124,根据上面的公式可以得到:
在这里插入图片描述
最后来看一下寄存器 UARTx_URXD 和 UARTx_UTXD,这两个寄存器分别为 UART 的接收和发送数据寄存器,这两个寄存器的低八位为接收到的和要发送的数据。读取寄存器UARTx_URXD 即可获取到接收到的数据,如果要通过 UART 发送数据,直接将数据写入到寄存器 UARTx_UTXD 即可。

寄 存 器UARTx_UFCR中我们要用到的是位 RFDIV(bit9:7),用来设置参考时钟分频,如下表:

RFDIV(bit9:7)分频值
0006 分频
0015 分频
0104 分频
0113 分频
1002 分频
1011 分频
1107 分频
111保留

UART1 的配置步骤

关于UART 的寄存器就介绍到这里,关于这些寄存器详细的描述,请参考《I.MX6ULL 参考手册》第3608 页的55.15 小节。本章我们使用I.MX6U 的UART1 来完成开发板与电脑串口调试助手之间串口通信,UART1 的配置步骤如下:

1、设置UART1 的时钟源
设置UART 的时钟源为pll3_80m,设置寄存器CCM_CSCDR1 的UART_CLK_SEL 位为0即可。

2、初始化UART1
初始化UART1 所使用IO,设置UART1 的寄存器UART1_UCR1~UART1_UCR3,设置内容包括波特率,奇偶校验、停止位、数据位等等。

4、使能UART1
UART1 初始化完成以后就可以使能UART1 了,设置寄存器UART1_UCR1 的位UARTEN为1。

5、编写UART1 数据收发函数
编写两个函数用于UART1 的数据收发操作。

硬件原理分析

本试验用到的资源如下:
①、一个LED 灯:LED0。
②、串口1。
I.MX6U-ALPHA 开发板串口1 硬件原理图如图21.2.1 所示:
在这里插入图片描述
在做实验之前需要用USB 串口线将串口1 和电脑连接起来,并且还需要设置JP5 跳线帽,将串口1 的RXD、TXD 两个引脚分别与P116、P117 连接一起,如图21.2.2 所示:

在这里插入图片描述
硬件连接设置好以后就可以开始软件编写了,本章实验我们初始化好UART1,然后等待SecureCRT 给开发板发送一个字节的数据,开发板接收到SecureCRT 发送过来的数据以后在同通过串口1 发送给SecureCRT。

实验程序编写

本实验对应的例程路径为:开发板光盘-> 1、裸机例程-> 13_uart。

本章实验在上一章例程的基础上完成,更改工程名字为“uart”,然后在bsp 文件夹下创建名为“uart”的文件夹,然后在bsp/uart 中新建bsp_uart.c 和bsp_uart.h 这两个文件。在bsp_uart.h中输入如下内容:

1 #ifndef _BSP_UART_H
2 #define _BSP_UART_H
3 #include "imx6ul.h"
4 /***************************************************************
5 Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved.
6 文件名: bsp_uart.h
7 作者: 左忠凯
8 版本: V1.0
9 描述: 串口驱动文件头文件。
10 其他: 无
11 论坛: www.openedv.com
12 日志: 初版V1.0 2019/1/15 左忠凯创建
13 ***************************************************************/
14
15 /* 函数声明*/
16 void uart_init(void);
17 void uart_io_init(void);
18 void uart_disable(UART_Type *base);

文件bsp_uart.h 内容很简单,就是一些函数声明。继续在文件bsp_uart.c 中输入如下所示内容:

/***************************************************************
Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved.
文件名: bsp_uart.c
作者: 左忠凯
版本: V1.0
描述: 串口驱动文件。
其他: 无
论坛: www.openedv.com
日志: 初版V1.0 2019/1/15 左忠凯创建
***************************************************************/
1 #include "bsp_uart.h"
2
3 /*
4 * @description : 初始化串口1,波特率为115200
5 * @param : 无
6 * @return : 无
7 */
8 void uart_init(void)
9 {
10 /* 1、初始化串口IO */
11 uart_io_init();
12
13 /* 2、初始化UART1 */
14 uart_disable(UART1); /* 先关闭UART1 */
15 uart_softreset(UART1); /* 软件复位UART1 */
16
17 UART1->UCR1 = 0; /* 先清除UCR1寄存器*/
18 UART1->UCR1 &= ~(1<<14); /* 关闭自动波特率检测*/
19

文件bsp_uart.c 中共有10 个函数,我们依次来看一下这些函数都是做什么的,第一个函数是uart_init,这个函数是UART1 初始化函数,用于初始化UART1 相关的IO、并且设置UART1的波特率、字长、停止位和校验模式等,初始化完成以后就使能UART1。第二个函数是uart_io_init,用于初始化UART1 所使用的IO。第三个函数是uart_setbaudrate,这个函数是从
NXP 官方的SDK 包里面移植过来的,用于设置波特率。我们只需将要设置的波特率告诉此函数,此函数就会使用逐次逼近方式来计算出寄存器UART1_UFCR 的FRDIV 位、寄存器UART1_UBIR 和寄存器UART1_UBMR 这三个的值。第四和第五这两个函数为uart_disable 和uart_enable,分别是使能和关闭UART1。第6 个函数是uart_softreset,用于软件复位指定的UART。第七个函数是putc,用于通过UART1 发送一个字节的数据。第八个函数是puts,用于通过UART1发送一串数据。第九个函数是getc,用于通过UART1 获取一个字节的数据,最后一个函数是raise,这是一个空函数,防止编译器报错。

最后在main.c 中输入如下所示内容:

/**************************************************************
Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved.
文件名: main.c

第5 行调用函数uart_init 初始化UART1,最终在while 循环里面获取串口接收到的数据,并且将获取到的数据通过串口打印出来。

编译下载验证

编写Makefile 和链接脚本

在Makefile 文件中输入如下内容:

1 CROSS_COMPILE ?= arm-linux-gnueabihf-
2 TARGET ?= uart
3
4 CC := $(CROSS_COMPILE)gcc
5 LD := $(CROSS_COMPILE)ld
6 OBJCOPY := $(CROSS_COMPILE)objcopy
7 OBJDUMP := $(CROSS_COMPILE)objdump
8
9 LIBPATH := -lgcc -L /usr/local/arm/gcc-linaro-4.9.4-2017.01- x86_64_arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/4.9.4
10
11
12 INCDIRS := imx6ul \
13 bsp/clk \
14 bsp/led \
15 bsp/delay \
16 bsp/beep \
17 bsp/gpio \
18 bsp/key \
19 bsp/exit \
20 bsp/int \
21 bsp/epittimer \
22 bsp/keyfilter \
23 bsp/uart
24
25 SRCDIRS := project \
26 bsp/clk \

上述的Makefile 文件内容和上一章实验的区别不大。将TARGET 为uart,在INCDIRS 和SRCDIRS 中加入“bsp/uart”。但是,相比上一章中的Makefile 文件,本章实验的Makefile 有两处重要的改变:

①、本章Makefile 文件在链接的时候加入了数学库,因为在bsp_uart.c 中有个函数uart_setbaudrate,在此函数中使用到了除法运算,因此在链接的时候需要将编译器的数学库也链接进来。第9 行的变量LIBPATH 就是数学库的目录,在第56 行链接的时候使用了变量LIBPATH。

在后面的学习中,我们常常要用到一些第三方库,那么在连接程序的时候就需要指定这些第三方库所在的目录,Makefile 在链接的时候使用选项“-L”来指定库所在的目录,比如“示例代码21.4.1”中第9 行的变量LIBPATH 就是指定了我们所使用的编译器库所在的目录。

②、在第61 行和64 行中,加入了选项“-fno-builtin”,否则编译的时候提示“putc”、“puts”这两个函数与内建函数冲突,错误信息如下所示:

warning: conflicting types for built-in function ‘putc’
warning: conflicting types for built-in function ‘puts’

在编译的时候加入选项“-fno-builtin”表示不使用内建函数,这样我们就可以自己实现putc和puts 这样的函数了。

链接脚本保持不变。

编译下载

使用Make 命令编译代码,编译成功以后使用软件imxdownload 将编译完成的uart.bin 文件下载到SD 卡中,命令如下:

chmod 777 imxdownload //给予imxdownload 可执行权限,一次即可
./imxdownload uart.bin /dev/sdd //烧写到SD 卡中,不能烧写到/dev/sda 或sda1 设备里面!

烧写成功以后将SD 卡插到开发板的SD 卡槽中,然后复位开发板。打开SourceCRT,点击File->Quick Connect…,打开快速连接设置界面,设置好相应的串口参数,比如在我的电脑上是COM8,设置如图21.4.2.1 所示:
在这里插入图片描述
设置好以后就点击“Connect”就可以了,连接成功以后SecureCRT 收到来自开发板的数据,但是SecureCRT 显示可能会是乱码,如图21.4.2.2 所示:
在这里插入图片描述
这是因为有些设置还没做,点击Options->Session Options…,打开会话设置窗口,按照图21.4.2.3 所示设置:
在这里插入图片描述
设置好以后点击“OK”按钮就可以了,清屏,然后重新复位一次开发板,此时SecureCRT显示就正常了,如图21.4.2.4 所示:
在这里插入图片描述
根据提示输入一个字符,这个输入的字符就会通过串口发送给开发板,开发板接收到字符以后就会通过串口提示你接收到的字符是什么,如图21.4.2.5 所示:
在这里插入图片描述
至此,I.MX6U 的串口1 就工作起来了,以后我们就可以通过串口来调试程序。但是本章只实现了串口最基本的收发功能,如果我们要想使用格式化输出话就不行了,比如最常用的printf 函数,下一章就讲解如何移植printf 函数。

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

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

相关文章

linux内核pwn,Linux Kernel Pwn 学习笔记 (UAF)

原标题&#xff1a;Linux Kernel Pwn 学习笔记 (UAF)本文为看雪论坛优秀文章看雪论坛作者ID&#xff1a;Vinadiak0x01 背景知识UAF漏洞&#xff1a;UAF 漏洞是当我们 free 掉某个指针变量所指向的堆块的时候&#xff0c;未将该指针变量置0&#xff0c;导致该指针依然指着该堆块…

NXP(I.MX6uLL)DDR3实验——DDR发展历史

目录何为RAM 和ROMSRAM 简介①、地址线②、数据线③、控制线SDRAM 简介①、控制线(时钟、片选)②、A10 地址线③、地址线④、BANK 选择线⑤、BANK 区域⑥、数据线⑦、高低字节选择DDR 简介①、控制线②、地址线③、BANK 选择线④、BANK 区域⑤、数据线⑥、数据选通引脚⑦、数据…

超赞!12套你没见过的社交媒体 社交网站图标

如今&#xff0c;社交网络成为我们信息获取和传播的重要途径&#xff0c;很多网站都有把内容分享到社交媒体的功能。社交媒体图标作为向用户传递信息的重要媒介&#xff0c;不管是在网页还是 Web 应用程序中都非常需要。今天这篇文章和大家分享12套你没见过的社交媒体 & 社…

I2C实验

参考&#xff1a;I2C 总线协议详解 作者&#xff1a;一只青木呀 发布时间&#xff1a;2020-09-21 11:41:25 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/108705297 目录I2C 简介I2C 协议I2C协议有关术语1、起始位2、停止位3、数据传输4、应答信号5…

linux安装ffmpeg版本太多,Linux安装FFmpeg的方法

FFmpeg是一款优秀的播放器解码插件&#xff0c;可以跨平台&#xff0c;有不同平台的版本&#xff0c;对于解码&#xff0c;编码和录制以及转换作用的很多的软件都是使用FFmpeg的插件来实现的.FFmpeg&#xff1a;https://www.ffmpeg.org/download.html安装方法&#xff1a;#wget…

官方系统镜像烧写(windows下使用OTG)

目录OTG系统烧写为什么能通过VBS将系统烧写进去呢&#xff1f;OTG系统烧写 选择对应的烧写工具&#xff0c;USB_OTG线连接好&#xff0c;双击即可进行烧写。 注意&#xff1a; 当然也可以烧写到SD卡里面。前面我们烧写裸机代码都是选择从SD卡启动。Mfgtool这个工具先向板子下载…

SQL Server中通用数据库角色权限的处理详解

SQL Server中通用数据库角色权限的处理详解 前言 安全性是所有数据库管理系统的一个重要特征。理解安全性问题是理解数据库管理系统安全性机制的前提。 最近和同事在做数据库权限清理的事情&#xff0c;主要是删除一些账号&#xff1b;取消一些账号的较大的权限等&#xff0c;例…

linux之xargs命令用途

实现文件删除的方法大致有以下几种&#xff1a;1&#xff0e;rm find /a -type f 2&#xff0e;find /a -type f -exec|-ok rm -rf { } \;3&#xff0e;find /a -type f -exec|-ok rm -rf { } ;本例中xargs将find产生的长串文件列表拆散成多个子串&#xff0c;然后…

什么是U-Boot以及如何下载U-Boot源码

参考&#xff1a;什么是U-Boot以及如何下载U-Boot源码&#xff1f; 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-10-20 11:05:59 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/109176510 目录前言系统的启动过程uboot简介uboot源码下载选…

linux系统重装win系统教程,Win10如何重装linux系统 Win10重装linux系统教程

Windows10如何重装linux系统?下面小编就给大家介绍一下Win10重装linux系统教程。1、我们按下wini打开设置 后点击【更新和安全】->【windows更新】;2、我们在左侧点击【针对开发人员】&#xff0c;在右侧点击【发开人员模式】;3、我们按winx键->选择【程序和功能】;4、我…

Uboot初次编译、烧写、启动(启动界面log简析)

目录U-Boot 初次编译U-Boot 烧写与启动上述笔记第三点就是建立shell脚本实现的 第四点就是修改Makefile文件实现的&#xff0c;下面均有实现步骤讲解。 U-Boot 初次编译 先编译体验一下正点原子提供的UBOOT。 首先在Ubuntu 中安装ncurses 库&#xff0c;否则编译会报错&#…

360 linux 扩展文件夹,360签具名工Linux下载0907 官方版

腾牛网提供的这款360签名工具Linux版&#xff0c;共有两个版本&#xff0c;分别是图形界面版和命令行界面版&#xff0c;两种选择为apk签名具有一样的正版效果。相关下载&#xff1a;360加固助手pc端Linux签名工具使用流程(图形界面)使用方法&#xff1a;一、准备工作&#xff…

锁优化

前言 高效并发是从JDK1.5到JDK1.6的一个重要改进&#xff0c;HotSpot虚拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术&#xff0c;如适应性自旋、锁消除、锁粗化、轻量级锁和偏向锁等&#xff0c;这些技术都是为了在线程之间高效的共享数据&#xff0c;以及解…

WPF--ComboBox数据绑定

0-在ComboBox中显示图片&#xff1a; <ComboBox Height"33" HorizontalAlignment"Right" Margin"0,94,31,0" x:Name"comboBox1" VerticalAlignment"Top" Width"142" SelectedIndex"0"> <Co…

U-Boot源码目录分析(VScode工程创建及文件夹过滤)

参考&#xff1a;U-Boot工程目录介绍 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-10-21 14:47:30 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/109199081 目录0、Uboot下载编译VScode工程创建及文件夹过滤2、重要文件2.1、arch文件夹&…

Spring Security 案例实现和执行流程剖析

在线演示 演示地址&#xff1a;http://139.196.87.48:9002/kitty 用户名&#xff1a;admin 密码&#xff1a;admin Spring Security Spring Security 是 Spring 社区的一个顶级项目&#xff0c;也是 Spring Boot 官方推荐使用的安全框架。除了常规的认证&#xff08;Authentica…

Ubuntu用户与用户组

目录Ubuntu用户与用户组创建用户和用户组Ubuntu用户与用户组 创建用户和用户组

linux执行windows创建的脚本,如何在Windows 10上创建和运行Bash Shell脚本 | MOS86

随着Windows 10的到来您还可以将Bash命令合并到Windows批处理文件或PowerShell脚本中。如果你知道你是什么Windows和UNIX使用不同的行尾字符&#xff0c;Windows文件系统可以在Bash环境的不同位置访问。如何在Windows上编写一个Bash脚本10当在Windows上编写shell脚本时&#xf…

31 锁,信号量,事件,队列

1.同步锁&#xff08;互斥锁&#xff09; from mutilprocessing import Lock 方式一&#xff1a; lockLock() lock.acquire() 数据操作的代码 lock.release() 方式二&#xff1a; with lock: 数据操作代码2.信号量 from mutilprocessing import …

Ubuntu下文件权限管理

参考&#xff1a;Ubuntu / Linux 下文件权限管理 作者&#xff1a;~莘莘 发布时间&#xff1a; 2021-07-12 17:09:48 网址&#xff1a;https://blog.csdn.net/lcx1837/article/details/118676383?spm1001.2014.3001.5501 目录一、文件权限二、修改文件权限一、文件权限 文件权…