阡陌 发布的文章

阡陌

RS-232 接口标准

RS-232 是美国电子工业联盟 EIA(Electronic Industry Association)制定的串行数据通信的物理接口标准,原始编号全称是 EIA-RS-232(简称 RS232, 232),目前的版本是 C(RS-232-C)。 标准的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。该标准规定采用一个 25 脚的 DB-25 连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。后来 IBM 的 PC 机将 RS-232 简化成了 DB-9 连接器,从而成为事实标准。而现在通常只使用 RXD、TXD、GND 三条...

非 Docker 方式安装 GitLab

GitLab 是一个基于 Git 的代码托管与协作平台,可以实现代码的版本管理、代码的审阅、问题追踪等功能。它是一个开源的、管理代码的全流程解决方案,用户可以通过其提供的 Web 界面轻松地管理代码仓库、代码版本、任务列表、CI/CD 等。 GitLab 不仅仅是一个代码托管平台,还提供了许多其他的功能,如代码审查、问题追踪、Wiki、持续集成和交付等。其中,代码审查是 GitLab 最突出的功能之一,它可以让团队成员在代码合并之前对代码进行评审和讨论,确保代码的质量和一致性。此外,GitLab 还支持多人协作开发,用户可以通过它方便地与团队成员进行代码共享和协作开发。它还提供了强大的问题追踪功能,可以让团队成员轻松地跟踪和解决问题。 安装 CentOS 7 安装和配置必要的依赖: yum install policycoreutils openssh-server openssh-clients systemctl enable sshd systemctl start sshd yum -y install postfix systemctl enable postfix systemctl start postfix firewall-cmd --permanent --add-service=http systemctl reload firewalld 获取并安装软件包: yum 方式安装: vim /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] name=gitlab-ce baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7 repo_gpgcheck=0 gpgcheck=0 enabled=1 gpgkey=https://packages.gitlab.com/gpg.key yum makecache yum -y install gitlab-ce 或直接安装 rpm 包: wget http://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-8.5.1-ce.0.el7.x86_64.rpm sudo rpm -i gitlab-ce-8.5.1-ce.0.el7.x86_64.rpm Ubuntu curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null sudo vim /etc/apt/sources.list.d/gitlab-ce.list deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu trusty main sudo apt-get update sudo apt-get install gitlab-ce=10.1.3-ce.0 配置 创建仓库位置 sudo mkdir -p /data/git-data sudo chown -R git:git /data/git-data 创建备份位置 sudo mkdir -p /backups/gitlab sudo chown -R git:git /backups/gitlab 修改配置文件 sudo vim /etc/gitlab/gitlab.rb external_url "https://192.168.1.223:8888" git_data_dir "/data/git-data" //// gitlab10 git_data_dirs({ "default" => { "path" => "/data/git-data" } }) /////////////////////////////// gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.mculoop.com" gitlab_rails['smtp_port'] = 25 gitlab_rails['smtp_user_name'] = "gitlab@mculoop.com" gitlab_rails['smtp_password'] = "***" gitlab_rails['smtp_domain'] = "smtp.mculoop.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['gitlab_email_from'] = "gitlab@mculoop.com" user["git_user_email"] = "gitlab@mculoop.com" #nginx['redirect_http_to_https'] = true ##注意:8.5.1版本 redirect_http_to_https 不能打开,否则会提示:no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking #nginx['redirect_http_to_https_port'] = 8888 nginx['ssl_certificate'] = "/data/ssl/localhost.crt" nginx['ssl_certificate_key'] = "/data/ssl/localhost.key" gitlab_rails['backup_path'] = '/backups/gitlab' 防火墙放端口 firewall-cmd --permanent --add-port=8888/tcp systemctl restart firewalld 配置并运行 gitlab-ctl reconfigure  #每次配置后都运行这个命令 好了,已经可以访问了。 默认用户名及密码: Username: root Password: 5iveL!fe 其他命令 重启命令: gitlab-ctl restart 查看运行情况命令: gitlab-ctl status 备份: sudo gitlab-ctl stop unicorn sudo gitlab-ctl stop sidekiq sudo gitlab-ctl stop nginx sudo gitlab-rake gitlab:backup:create sudo gitlab-ctl restart 定时备份: crontab -e 0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create #凌晨2点执行备份 #格式:minute hour day month dayofweek command 从备份恢复: # 停止相关数据连接服务 sudo gitlab-ctl stop unicorn sudo gitlab-ctl stop sidekiq # 从1393513186编号备份中恢复 gitlab-rake gitlab:backup:restore BACKUP=1515653671_2018_01_11_10.3.3 # 启动Gitlab gitlab-ctl restart 升级 Gitlab: 如果是用 yum 方式安装的,只需执行 yum install gitlab-ce 即可。 如果是用下载的 rpm 安装包安装的,升级过程: wget http://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-8.5.3-ce.0.el7.x86_64.rpm rpm -Uvh gitlab-ce-8.5.3-ce.0.el7.x86_64.rpm Ubuntu 下的与 CentOS 下的类...

ARM DS-5(ARM Development Studio 5)

ARM DS-5 是 ARM 公司 2009 年推出的一款可扩展多功能,可调试裸板、Linux、Android 系统,支持所有 ARM 内核的软件开发工具。 自 2007 年 ARM 公司停止对 ADS 的维护更新后,ARM 在基于 eclipse 集成环境的基础上,相继推出了 RVDS(RealView Development Suite)和 DS-5 两款重量级开发软件。其中 DS-5 以同时集成 ARM Compiler 和 GCC 可轻松调试 Linux 系统而占优势。 ARM DS-5 开发工具链帮助工程师为 ARM 应用处理器(如 Cortex™-A 系列,Cortex-R 实时处理器和其他 ARM 嵌入式处理器)开发强大且高度优化的嵌入式软件 。 DS-5 工具链包括一流的 ARM C / C ++ 编译器,强大的 Linux / Android™/ RTOS 调试器,ARM Streamline™ 系统性能分析器和实时系统仿真模型, 所有这些都方便地封装在基于 Eclipse 的用户友好的集成开发环境(IDE)中。 DS-5 有三个不同的版本,它们是通过同一安装包进行许可证管理。 DS-5 Ultimate Edition 支持最新的 ARM 处理器和技术,如 ARMv8。 DS-5 专业版支持所有 ARM 处理器,包括 ARMv7,提供卓越的调试和跟踪功能以及 ARM 编译器。 DS-5 社区版是免费的,可以使用 DS-5 调试器和 Streamline 的有限功能集。功能包括裸机和 Linux 应用程序调试。 应用程序处理器支持: ARMv5: ARM926EJ-S ARMv6: ARM1136JF-S ARM1176JZ-S ARMv7: Cortex-A5 Cortex-A8 Cortex-A9 Cortex-A15 价格(20171108 Digi-Key): Ultimate 相比 Professional 多 ARMv8 processors、Compiler Safety Package Ultimate DS5UE-KD-40001 floating 1year 56,113.46HKD Ultimate DS5UE-KD-30001 node-locked 1year 44,635.76HKD Professional DS5PE-KD-40001 floating 1year 35,070.92HKD Professional DS5PE-KD-30001 node-locked 1year 28,056.77HKD Professional DS5PE-KD-40000 floating 永久 70,141.84HKD Professional DS5PE-KD-30000 node-locked 永久 56,113.46HKD 仿真器: DS-5 官方推荐的仿真器 DSTREAM,售价大约在 2 万 3 千人民币(201711)。 DS-5 vs MDK KEIL MDK-ARM 是用于满足开发者基于ARM7/9, ARM Cortex-M 处理器的开发需求,包括它自带的 RTX 实时操作系统和中间库,都是属于 MCU 应用领域的。 DS-5 是用于创建 Linux/Andriod 的复杂嵌入式系统应用和系统平台驱动接口,DS-5 支持设备添加,包括多核调试和支持,主要针对复杂的多核调试,片上系统开发而推出...

Debian Xfce4 VNC 服务

1、安装服务: apt-get install vnc4server 2、设置密码: vncpasswd 3、停止服务 vncserver -kill :1 Killing Xtigervnc process ID 12510... success! 4、编辑 xstartup vi ~/.vnc/xstartup #!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS vncconfig -iconic & xfce4-session & 5、启动服务 vncserver :1 -localhost n...

Python 包管理

distutils distutils 是 Python 标准库的一部分,其初衷是为开发者提供一种方便的打包方式, 同时为使用者提供方便的安装方式。 setuptools (easy_install) setuptools 是 Python 的基础包工具,可以帮助我们轻松的下载,构建,安装,升级,卸载 python 的软件包。setuptools 是对 distutils 的增强, 尤其是引入了包依赖管理。setuptools 可以为 Python 包创建 egg 文件, Python 与 egg 文件的关系,相当于 Java 与 jar 包的关系。setuptools 提供的 easy_install 脚本可以用来安装 egg 包。 另外, easy_install 可以自动从 PyPI 上下载相关的包,并完成安装,升级。 地址:https://pypi.python.org/pypi/setuptools 安装: 进入源文件根目录,执行 python setup.py install 安装完后 CMD 中执行 easy_install 命令,进行检测,如果提示: error: No urls, filenames, or requirements specified (see –help) 说明安装成功。 pip pip 是安装,管理 Python 包的工具。它是对 easy_install 的一种增强。 同样可以从 PyPI 上自动下载,安装包。在 pip 中,安装前所有需要的包都要先下载,所以不会出现安装了一部分,另一部分没安装的情况所有安装的包会被跟踪,所以你可以知道为什么他们被安装,同时可以卸载。无需使用 egg 文件。使用方式比 setuptools 更简单: pip install pkg_name pip uninstall pkg_name 如果已安装 setuptools,则可以直接用 easy_install 来安装 pip: easy_install pip 当然也可以下载源代码,进入根目录执行 python setup.py install 来安...

半导体

半导体(Semiconductor) 半导体是电阻率介于导体和绝缘体之间并有负的电阻温度系数的物质。在室温时,半导体的电阻率约在 $10^{-5}~10^7$ Ω·m(欧·米)之间,温度升高时电阻率指数则减小。半导体导带和价带距离适中,即禁带宽度适中,因此价带中的电子在常见能量级别的激励下,例如光、热和电压,即可进入导带,导致半导体电阻率变化。 本征半导体(Intrinsic Semiconductor) 本征半导体是完全不含杂质且无晶格缺陷的纯净半导体。主要常见代表有硅、锗这两种元素的单晶体结构。 单晶硅的每个硅原子和其周围的硅原子组成 8 电子稳定结构。一般情况下,电子-空穴对较少,具有较大的电阻率。在温度和光照的作用下,电子会变得更加活跃,载流子增多,电阻率下降。 N 型半导体(N-type semiconductors) 在本征半导体中掺入少量杂 Ⅴ 族质元元素(磷、砷、锑等),由于半导体原子(如硅原子)被杂质原子取代,杂质原子外层的五个外层电子的其中四个与周围的半导体原子形成共价键,多出的一个电子几乎不受束缚,较为容易地成为自由电子。于是,N 型半导体就成为了含电子浓度较高的半导体,其导电性主要是因为自由电子导电。该类杂质原子称为施主。多数载流子为电子。 P 型半导体 P 型半导体则通常是由在锗、硅类半导体材料中掺杂适量三价元素(Ⅲ 族元素)硼、铟、镓等而形成。由于半导体原子(如硅原子)被杂质原子取代,杂质原子外层的三个外层电子与周围的半导体原子形成共价键的时候,会产生一个“空穴”。因为三价元素的原子与周围的四价原子还差一个电子才能形成稳定的结构,所以容易“勾引”别的电子以达到稳定结构。多数载流子为空穴。 PN 结 采用不同的掺杂工艺,通过扩散作用,将 P 型半导体与 N 型半导体制作在同一块半导体(通常是硅或锗)基片上,在它们的交界面就形成空间电荷区称为 PN 结(PN junction)。PN 结中的内电场阻止了空穴向 N 区扩散,也阻止了电子向 P 区扩散,至此,扩散过程达到平衡。要想让 PN 结导通形成电流,必须消除其空间电荷区的内部电场的阻力。很显然,给它加一个反方向的更大的电场,即 P 区接外加电源的正极,N 区结负极,就可以抵消其内部自建电场,使载流子可以继续运动,从而形成线性的正向电流。而外加反向电压则相当于内建电场的阻力更大,PN 结不能导通,仅有极微弱的反向电流(由少数载流子的漂移运动形成,因少子数量有限,电流饱和)。当反向电压增大至某一数值时,因少子的数量和能量都增大,会碰撞破坏内部的共价键,使原来被束缚的电子和空穴被释放出来,不断增大电流,最终 PN 结将被击穿(变为导体)损坏,反向电流急剧增大。 PN 结特性 单向导电性 PN 结加正向电压时导通(存在导通电压,抵消 PN 结内电场),PN 结加反向电压时截止(PN 结呈现高阻性,存在反向饱和电流)。 反向击穿性 电容特性...

晶体三极管

晶体三极管(Transistor),也称为晶体管、三极管、半导体三极管、双极型晶体管。是在一块半导体基片上制作两个相距很近的 PN 结,两个 PN 结把整块半导体分成三部分,中间部分是基区,两侧部分是发射区和集电区,排列方式有 PNP 和 NPN 两种。发射区与基区之间形成的 PN 结称为发射结,而集电区与基区形成的 PN 结称为集电结,三条引线分别称为发射极 E(Emitter)、基极 B(Base)和集电极 C (Collector)。 在三极管符号中有一个箭头,箭头画在发射极 E,总是指向 N 区(N 型半导体),这是用来区分电路符号是 NPN(从基极指向射极)还是 PNP(从射极指向基极)的。 晶体三极管是电流型控制器件,而场效应晶体管则是电压型控制器件。 以上图的 NPN 三极管为例来讲。在制造三极管时,有意识地使发射区的多数载流子浓度大于基区的,同时基区做得很薄,而且,要严格控制杂质含量,这样,一旦接通电源后,由于发射结正偏,发射区的多数载流子(电子)及基区的多数载流子(空穴)很容易地越过发射结互相向对方扩散,但因前者的浓度基大于后者,所以通过发射结的电流基本上是电子流,这股电子流称为发射极电流子。由于基区很薄,加上集电结的反偏,注入基区的电子大部分越过集电结进入集电区而形成集电极电流 Ic,只剩下很少的电子在基区的空穴进行复合,被复合掉的基区空穴由基极电源 Eb 重新补给,从而形成了基极电流 Ib。根据电流连续性原理得:Ie = Ib + Ic。这就是说,在基极补充一个很小的 Ib,就可以在集电极上得到一个较大的 Ic,这就是所谓电流放大作用,Ic 与 Ib 是维持一定的比例关系,即:β = Ic / Ib。三极管的电流放大作用实际上是利用基极电流的微小变化去控制集电极电流的巨大变化。 放大原理 发射区向基区发射电子 电源 Ub 经过电阻 Rb 加在发射结上,发射结正偏,发射区的多数载流子(自由电子)不断地越过发射结进入基区,形成发射极电流 Ie。同时基区多数载流子也向发射区扩散,但由于多数载流子浓度远低于发射区载流子浓度,可以不考虑这个电流,因此可以认为发射结主要是电子流。 基区中电子的扩散与复合 电子进入基区后,先在靠近发射结的附近密集,渐渐形成电子浓度差,在浓度差的作用下,促使电子流在基区中向集电结扩散,被集电结电场拉入集电区形成集电极电流 Ic。也有很小一部分电子(因为基区很薄)与基区的空穴复合,扩散的电子流与复合电子流之比例决定了三极管的放大能力。 集电区收集电子 由于集电结外加反向电压很大,这个反向电压产生的电场力将阻止集电区电子向基区扩散,同时将扩散到集电结附近的电子拉入集电区从而形成集电极主电流 Icn。另外集电区的少数载流子(空穴)也会产生漂移运动,流向基区形成反向饱和电流,用 Icbo 来表示,其数值很小,但对温度却异常敏感。 晶体三极管在结构设计上的要点: 基区足够薄,以使发射区发来的载流子能够更容易地越过基区到达集电区; 基区掺杂浓度较小,使得在基区因空穴与电子复合而消耗掉发射区发射的载流子足够地少。 可见,晶体三极管简单地比作两个二极管的组合连接是不恰当的,三极管之所能够工作,与其结构设计是密不可分...

TM1638 按键数码管驱动芯片

TM1638 是一种带键盘扫描接口的 LED 驱动控制 IC,内部集成有 MCU 数字接口、数据锁存器、LED 驱动、键盘扫描等电路。 产品特性: 采用 CMOS 工艺 显示模式 10 段 × 8 位 键扫描(8 × 3 bit) 辉度调节电路(占空比 8 级可调) 串行接口(CLK,STB,DIO) 振荡方式:RC 振荡 内置上电复位电路 封装形式:SOP28 SEG1~SEG8 P 管开漏,只能接 LED 阳极,输出电流。 GRID1~GRID8 N 管开漏,只能接 LED 阴极,吸收电流。 由于是各 8 个脚,所以既可以驱动 8 位共阴极 LED 也可以驱动 8 位共阳极 LED。引脚接法与 RAM 中点亮 LED 的写法不同。 共阴极时可以支持 10 段,8 位。RAM 中写入一组数据(2 字节),可以控制一位的完整显示。 共阳极时可以支持 8 段,10 位。RAM 中写入一组数据(2 字节),可以控制 10 位的同一个段的显示。也就是说,如果控制一个位的显示,至少写 8 个低位字节(按一个位 8 段来说)。 这个表的含义更浅显的解释为:当某位为 1 时表示使 SEGx 输出电流且 GRIDy 输入电...

LED 数码管

LED 数码管(LED Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个段位和公共电极。通常,数码管由七个发光管组成 8 字形,再加上一个点,一共 8 个发光管。这些段分别由字母 a、b、c、d、e、f、g、dp 来表示,公共电极用 com 来表示。他们组成的单元称为一个显示...

结构体内存对齐规则

规则 1:结构体中元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从结构体存储的首地址开始,每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始(以结构体变量首地址为 0 计算)。 规则 2:在经过第一原则分析后,检查计算出的存储单元是否为所有元素中最宽的元素的长度的整数倍,是,则结束;若不是,则补齐为它的整数倍。 struct route_entry { uint16_t addr; uint32_t teAddr; uint8_t relayNum; uint16_t relay[NWK_RELAY_MAXNUM]; uint8_t age; }; struct route_table { uint8_t count; struct route_entry entry[2]; uint16_t crc; }; sizeof(struct route_entry) == 24 sizeof(struct route_table) == 56...